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