#Область ОписаниеПеременных
&НаКлиенте
Перем ПрограммноеЗакрытие;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СписокСпособов.Очистить();
СписокСпособов.Добавить(Перечисления.СпособыАвторизацииDSS.Вторичный_AirKeyLite, "ГруппаМобильноеПриложение1");
СписокСпособов.Добавить(Перечисления.СпособыАвторизацииDSS.Вторичный_МобильноеПриложение, "ГруппаМобильноеПриложение");
СписокСпособов.Добавить(Перечисления.СпособыАвторизацииDSS.Вторичный_ОфлайнПодтверждение, "ГруппаОфлайн");
СписокСпособов.Добавить(Перечисления.СпособыАвторизацииDSS.Вторичный_СМС, "ГруппаТелефон");
СписокСпособов.Добавить(Перечисления.СпособыАвторизацииDSS.Вторичный_ЭлектроннаяПочта, "ГруппаПочта");
СписокСпособов.Добавить(Перечисления.СпособыАвторизацииDSS.Вторичный_DSSSDK, "ГруппаМобильноеПриложение2");
КоличествоВСписке = 0;
Если Параметры.СписокСпособов <> Неопределено Тогда
ВсеСпособы = ПолучитьРеестрСпособов();
Для каждого СтрокаМассива Из ВсеСпособы Цикл
НашлиЗначение = СписокСпособов.НайтиПоЗначению(СтрокаМассива.Тип);
Если СтрокаМассива.Адрес Тогда
ИдентификаторыПриложений.Добавить(СтрокаМассива.Идентификатор);
КонецЕсли;
Если НашлиЗначение <> Неопределено Тогда
НашлиЗначение.Пометка = Истина;
КоличествоВСписке = КоличествоВСписке + 1;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ДанныеПодтверждения = Параметры.ДанныеПодтверждения;
НастройкиПользователя = Параметры.НастройкиПользователя;
ВторичнаяАвторизация = СпособАвторизацииПользователя(ДанныеПодтверждения);
НашлиЗначение = СписокСпособов.НайтиПоЗначению(ВторичнаяАвторизация);
Если НашлиЗначение <> Неопределено
И НашлиЗначение.Пометка Тогда
НашлиЗначение.Пометка = Ложь;
КоличествоВСписке = КоличествоВСписке - 1;
КонецЕсли;
УправлениеФормой();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
СервисКриптографииDSSСлужебныйКлиент.ПриОткрытииФормы(ЭтотОбъект, ПрограммноеЗакрытие);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если СервисКриптографииDSSСлужебныйКлиент.ПередЗакрытиемФормы(
ЭтотОбъект,
Отказ,
ПрограммноеЗакрытие,
ЗавершениеРаботы) Тогда
ЗакрытьФорму();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОфлайнПодтверждение(Команда)
ВыборПользователя(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Вторичный_ОфлайнПодтверждение"));
КонецПроцедуры
&НаКлиенте
Процедура МобильноеПриложение1(Команда)
ВыборПользователя(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Вторичный_AirKeyLite"));
КонецПроцедуры
&НаКлиенте
Процедура Почта(Команда)
ВыборПользователя(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Вторичный_ЭлектроннаяПочта"));
КонецПроцедуры
&НаКлиенте
Процедура МобильноеПриложение(Команда)
ВыборПользователя(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Вторичный_МобильноеПриложение"));
КонецПроцедуры
&НаКлиенте
Процедура Телефон(Команда)
ВыборПользователя(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Вторичный_СМС"));
КонецПроцедуры
&НаКлиенте
Процедура МобильноеПриложение2(Команда)
Если ИдентификаторыПриложений.Количество() > 0 Тогда
ВыборПользователя(ИдентификаторыПриложений[0].Значение);
Иначе
ВыборПользователя(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Вторичный_DSSSDK"));
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ВыборПользователя(СпособВыбора)
ВыбранныйСпособ = СпособВыбора;
Если ВыбранныйСпособ <> ВторичнаяАвторизация
И ДанныеПодтверждения <> Неопределено Тогда
ДанныеПодтверждения.ВторичнаяАвторизация = ВыбранныйСпособ;
ОтветПользователя = СервисКриптографииDSSКлиент.ОтветСервисаПоУмолчанию(Истина);
ОтветПользователя.Вставить("Результат", ВыбранныйСпособ);
ОтветПользователя.Вставить("ДанныеПодтверждения", ДанныеПодтверждения);
Иначе
ОтветПользователя = СервисКриптографииDSSКлиент.ОтветСервисаПоУмолчанию(Ложь);
КонецЕсли;
ЗакрытьФорму(ОтветПользователя);
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьФорму(ПараметрыЗакрытия = Неопределено)
ПрограммноеЗакрытие = Истина;
Если ПараметрыЗакрытия = Неопределено Тогда
ПараметрыЗакрытия = СервисКриптографииDSSКлиент.ОтветСервисаПоУмолчанию(Ложь, "ОтказПользователя");
КонецЕсли;
Закрыть(ПараметрыЗакрытия);
КонецПроцедуры
&НаСервере
Функция ПолучитьПредставлениеТелефона()
КодЯзыка = СервисКриптографииDSSСлужебный.КодЯзыка();
Если НастройкиПользователя <> Неопределено И ЗначениеЗаполнено(НастройкиПользователя.Телефон) Тогда
Результат = НСтр("ru = 'Временный пароль будет отправлена номер мобильного телефона'", КодЯзыка) +
" " + СервисКриптографииDSSКлиентСервер.ПредставлениеТелефона(НастройкиПользователя.Телефон);
Иначе
Результат = НСтр("ru = 'Временный пароль будет отправлен на зарегистрированный номер мобильного телефона.'", КодЯзыка);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция ПолучитьПредставлениеПочты()
КодЯзыка = СервисКриптографииDSSСлужебный.КодЯзыка();
Если НастройкиПользователя <> Неопределено И ЗначениеЗаполнено(НастройкиПользователя.ЭлектроннаяПочта) Тогда
Результат = НСтр("ru = 'Временный пароль будет отправлен адрес электронной почты'", КодЯзыка) +
" " + СервисКриптографииDSSКлиентСервер.ПредставлениеАдресаПочты(НастройкиПользователя.ЭлектроннаяПочта);
Иначе
Результат = НСтр("ru = 'Временный пароль будет отправлен на зарегистрированный адрес электронной почты.'", КодЯзыка);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Процедура УправлениеФормой()
Для каждого СтрокаСписка Из СписокСпособов Цикл
Элементы[СтрокаСписка.Представление].Видимость = СтрокаСписка.Пометка;
КонецЦикла;
Элементы.ГруппаСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
Если КоличествоВСписке = 0 Тогда
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаНедоступны;
Иначе
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаВыбор;
КонецЕсли;
Элементы.ДекорацияТелефонПодсказка.Заголовок = ПолучитьПредставлениеТелефона();
Элементы.ДекорацияПочтаПодсказка.Заголовок = ПолучитьПредставлениеПочты();
КонецПроцедуры
&НаСервере
Функция СпособАвторизацииПользователя(ДанныеПодтверждения)
Если ТипЗнч(ДанныеПодтверждения) = Тип("Структура") Тогда
ОписаниеПодтвеждения = СервисКриптографииDSSКлиентСервер.НайтиОписаниеВторичнойАвторизации(ДанныеПодтверждения.СписокМетодов, ДанныеПодтверждения.ВторичнаяАвторизация);
Если ЗначениеЗаполнено(ОписаниеПодтвеждения.Тип) Тогда
Результат = ОписаниеПодтвеждения.Тип;
Иначе
Результат = ДанныеПодтверждения.ВторичнаяАвторизация;
КонецЕсли;
Иначе
Результат = Перечисления.СпособыАвторизацииDSS.ПустаяСсылка();
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция ПолучитьРеестрСпособов()
Возврат Параметры.СписокСпособов;
КонецФункции
#КонецОбласти