По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Привет! В статье расскажем как сделать аутентификацию пользователей FreePBX 13 в модуле User Management через Microsoft Active Directory. Настройка выполняется достаточно тривиально. Указанные параметры протестированы с MSE 2012. Pre - work Перед началом настройки, необходимо протестировать доступность 389 порта в AD по транспорту TCP. Для этого, сделаем telnet в cmd консоли рабочей машины: telnet 192.168.1.67 389 В нашем случае, 192.168.1.67 - это адрес AD – сервера. Если все ОК, то переходим к проверке Base DN (базы поиска). Открываем консоль CMD на своей рабочей машине и выполняем dsquery запрос: dsquery user -name MerionNetworks dsquery user - команда для поиска пользователей; -name - поиск пользователей, по критерию имени (в нашем случае MerionNetworks) – можно использовать маски, например, «*Networks»; MerionNetworks - имя, по которому осуществляем поиск; Команда вернет нам примерно вот такой вывод: "CN= MerionNetworks,CN=Users,DC=merionet,DC=local"* Запоминаем вот эту часть CN=Users,DC=merionet,DC=local и переходим к настройке FreePBX. Настройка в FreePBX Переходим в раздел Admin → User Management нажимаем на вкладку Settings и далее Authentication Settings. В поле Authentication Engine выбираем Microsoft Active Directory и приступаем к настройке: Authentication Engine - тип подключения. Мы рассматриваем подключения к Microsoft AD, его и указываем; Remote Authentication IP Addresses - список IP – адресов, с которых разрешена удаленная аутентификация методом отправки POST на URL 192.168.1.7/admin/ajax.php?module=userman&command=auth, где 192.168.1.7 – IP – адрес нашего сервера Asterisk (FreePBX); Synchronize - как часто синхронизировать данные с AD. Мы указали раз в час; Host - имя или IP – адрес сервера AD; Port - порт, на котором слушает AD. У нас стандартный 389 порт; Username - существующее имя пользователя в AD. Мы производили проверку в первой части статьи пользователем MerionNetworks, его и укажем; Password - указываем пароль этого пользователя; Domain - указываем доменную часть; Base DN - копируем сюда Base DN, который получили ранее с помощью dsquery; Status - статус подключения к AD. У нас Connected :)
img
Зачастую приходится сталкиваться с ситуациями, когда необходимо выбрать бесплатный, но в тоже время, простой и качественный программный телефон (софтфон) для своей компании, который бы поддерживал ключевой функционал, требующийся любому современному бизнесу, такой как перевод звонка, организация конференций, постановка звонка на удержание и прочие. Если Вы столкнулись с такой задачей, то рекомендуем Вам обратить внимание на программный клиент VoIP-телефонии- PhonerLite. В статье мы расскажем об установке и настройке этого софтфона для работы с IP – АТС Asterisk Немного теории PhonerLite – это бесплатное приложение программного телефона, предназначенное для работы под управлением операционной системы Windows. Для передачи сигнальной информации, используется протокол SIP (Session Initiation Protocol), для передачи потоков медиа-данных используется стандартный RTP (Real-time Transport Protocol), имеется поддержка более защищенных средств шифрования информации, такие как SRTP (Secure Real-time Transport Protocol) и ZRTP. Список поддерживаемых аудио-кодеков: G.711 A-law; G.711 ?-law; G.722, G.726; GSM; iLBC; Speex; Opus. Имеется поддержка IPv6. В качестве транспорта, телефон может использовать UDP, TCP и TLS. Cофтфон PhonerLite распространяется абсолютно бесплатно по лицензии Freeware, как для личного так и для коммерческого использования. Разработка PhonerLite не стоит на месте: согласно официальному сайту, выходят постоянные обновления, добавляющие новый функционал или же исправляющие выявленные ранее баги. Последнее обновление было 27 сентября 2016 года (дата написания этой статьи 12 октября 2016). Дистрибутив PhonerLite можно скачать с официального сайта разработчика, последняя доступная версия от 27.09.2016 – 2.43. Скачать софтфон PhonerLite Настройка программного телефона После того как мы скачали и установили PhonerLite, нас встречает мастер настройки, который предлагает настроить учетную запись SIP для одного из известных VoIP-провайдеров или же продолжить в режиме ручной настройки. Мы будем использовать свою IP-АТС Asterisk, поэтому, выбираем ручную настройку и указываем IP-адрес нашего сервера и стандартный порт 5061 (используется CHAN_SIP со стороны Asterisk), куда софтфон будет отправлять запросы на регистрацию. Далее указываем имя пользователя, который предварительно уже создан на нашем Asterisk в качестве внутреннего номера (Extension). В нашем случае это номер 1021. На скриншоте с интерфейса FreePBX, красным цветом выделен номер, который мы будем применять в качестве имени пользователя и логина. Далее предлагается выбрать устройство ввода звука на вашем компьютере. Подтверждаем выполненные настройки. Также предлагается дать название новому профилю. Советуем придумать какое-либо название, потому что по умолчанию профиль будет иметь название соответствующее IP-адресу вашей IP-АТС. Если все настройки были выполнены правильно, то напротив новой учётной записи мы увидим сообщение Registered, свидетельствующее о том, что софтфон успешно зарегистрировался на IP-АТС, теперь можно совершать звонки. В заключение хотелось бы отметить, что PhonerLite хорош ещё и тем, что в отличие от других аналогичных разработок данный софтфон не требует покупки дополнительных лицензий для доступа к расширенному функционалу. Все критически важные функции, такие как перевод звонка, организация конференции, установка на удержание, адресная книга, история звонков, доступны сразу же после установки.
img
Баги и ошибки неизбежны в программировании. Тем не менее они могут раздражать и вызывать разочарование в работе. Предлагаем разобраться, что такое try / catch в JavaScript. Что такое блок try/catch в JavaScript? Блок try/catch в JavaScript используется для обработки ошибок. Он помогает избежать прерывание кода из-за ошибок в вашем скрипте. Хотя это может показаться чем-то, что можно легко реализовать с помощью оператора if, try/catch предоставляет много преимуществ, которые выходят за рамки возможностей if/else, некоторые из которых мы рассмотрим ниже. Оператор try позволяет проверить блок кода на наличие ошибок. Оператор catch позволяет обработать эту ошибку. Например: Вот как строится конструкция try/catch. Вы помещаете код в блок try, и если возникает ошибка, JavaScript передает управление оператору catch, который выполняет указанные действия. В данном случае он выводит ошибку в виде оповещения. Все ошибки JavaScript на самом деле являются объектами, которые содержат два свойства: имя (например, Error, SyntaxError и т. д.) и само сообщение об ошибке. Поэтому, когда мы выводим e, мы получаем что-то вроде ReferenceError: getData is not defined. Как и любой другой объект в JavaScript, вы можете решать, как получить значения по-разному, например, e.name (ReferenceError) и e.message (getData is not defined). Но на самом деле это не отличается от того, что делает JavaScript. Хотя JavaScript уважает вас достаточно, чтобы записать ошибку в консоль, а не показывать оповещение всему миру. Как использовать операторы try/catch Оператор throw Одно из преимуществ try/catch - это возможность отображать свои собственные пользовательские ошибки. Это называется throw error. В ситуациях, когда вы не хотите видеть те ошибки, которые отображает JavaScript, вы можете бросить свою ошибку (исключение) с помощью оператора throw. Эта ошибка может быть строкой, булевым значением или объектом. И если возникает ошибка, оператор catch отобразит ту ошибку, которую вы выбросили. Здорово, не правда ли? Но мы можем пойти дальше, создавая ошибку с помощью конструкторов ошибок JavaScript. JavaScript в основном классифицирует ошибки на шесть групп: EvalError - ошибка, произошедшая в функции eval. RangeError - число вне диапазона, например, 1.toPrecision(500). Метод toPrecision дает числам десятичное значение, например, 1.000, и число не может иметь 500 таких значений. ReferenceError - использование переменной, которая не была объявлена. SyntaxError - ошибка синтаксиса при выполнении кода. TypeError - использование значения, выходящего за пределы ожидаемых типов, например, 1.toUpperCase(). URIError - ошибка, если используются незаконные символы в функции URI. Таким образом, мы можем легко выбросить ошибку, например, throw new Error("Привет"). В этом случае имя ошибки будет Error, а сообщение — Привет. Вы также можете создать свой собственный конструктор ошибки, например: И вы можете использовать это везде с throw new CustomError("данные не определены"). Проверим конструкцию try/catch. Рассмотрим следующий пример: Но когда вы попробуете это выполнить, даже с использованием оператора try, это все равно не сработает. Это потому, что в JavaScript существуют два основных типа ошибок (то, что я описал выше — синтаксическая ошибка и так далее — на самом деле не являются типами ошибок. Вы можете назвать их примерами ошибок): ошибки времени разбора (parse-time errors) и ошибки времени выполнения (runtime errors) или исключения. Ошибки времени разбора — это ошибки, которые возникают в коде, когда движок не понимает код. Например, в приведенном выше коде, JavaScript не понимает, что вы имеете в виду под {{}}, и из-за этого ваш try/catch здесь бесполезен (он не сработает). С другой стороны, ошибки времени выполнения — это ошибки, которые возникают в корректном коде, и это именно те ошибки, которые try/catch сможет обработать. Приведенный выше код является корректным, и try/catch корректно обработает ошибку. Оператор finally Оператор finally действует как нейтральная зона, базовая точка или финальная стадия для блока try/catch. С помощью finally вы говорите, что, независимо от того, что произойдет в блоке try/catch (ошибка или отсутствие ошибки), код в блоке finally должен выполниться. Например: Вложенные блоки try Вы также можете вкладывать блоки try, но, как и любое другое вложение в JavaScript (например, if, for и так далее), это может привести к громоздкости и ухудшению читаемости кода, поэтому я не рекомендую это делать. Но это только мое мнение. Вложение блоков try дает вам преимущество использования одного блока catch для нескольких блоков try. Хотя вы можете написать блок catch для каждого try отдельно, вот пример: В этом случае не будет ошибки во внешнем блоке try, так как с ним все в порядке. Ошибка возникает во внутреннем блоке try, и она уже обработана своим собственным блоком catch. Рассмотрим следующий пример: Этот код работает немного иначе: ошибка возникает во внутреннем блоке try, который не содержит catch, но вместо этого имеет блок finally. Обратите внимание, что блок try/catch можно записать тремя разными способами: try...catch, try...finally, try...catch...finally. Однако ошибка выбрасывается из внутреннего блока try. Блок finally для этого внутреннего try выполнится в любом случае, потому что, как мы уже говорили, он работает, что бы ни произошло в блоке try/catch. И хотя во внешнем блоке try нет ошибки, управление все равно передается его блоку catch для регистрации ошибки. Более того, используется ошибка, созданная во внутреннем блоке try, потому что она произошла именно там. Если бы мы создали ошибку для внешнего блока try, она все равно бы отобразила внутреннюю ошибку, если только внутренняя не поймает свою собственную ошибку. Вы можете поэкспериментировать с кодом ниже, закомментировав внутренний блок catch. Повторное выбрасывание ошибки (Rethrow Error) Оператор catch ловит все ошибки, которые попадают в него, и иногда нам это не нужно. Например: Предположим на секунду, что введенное число будет меньше 5 (цель использования "use strict" — указать, что код должен выполняться в строгом режиме). В строгом режиме, например, нельзя использовать необъявленные переменные. Я хочу, чтобы оператор try выбросил ошибку "y не меньше 5", когда значение y больше 5, что маловероятно. Ошибка должна быть связана с тем, что y не меньше..., а не с тем, что y не определена. В таких ситуациях вы можете проверить тип ошибки, и если это не та ошибка, которую вы хотите, повторно выбросить её: Это просто повторно выбросит ошибку для другого оператора try или остановит выполнение скрипта. Это полезно, когда вы хотите отслеживать только определенный тип ошибок, а остальные, возникшие из-за невнимательности, должны остановить выполнение кода.
ЗИМНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59