epf_LicenseInfo1C/src/ИнформацияОЛицензиях1С/Forms/ФормаАктивацииЛицензии/Ext/Form/Module.bsl

175 lines
9.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

&НаСервереБезКонтекста
Функция Соответсвие_АктивацияПинКода()
Р = Новый Соответствие;
Р.Вставить("Имя", "--first-name");
Р.Вставить("Отчество", "--middle-name");
Р.Вставить("Фамилия", "--last-name");
Р.Вставить("EMail", "--email");
Р.Вставить("Компания", "--company");
Р.Вставить("Страна", "--country");
Р.Вставить("Индекс", "--zip-code");
Р.Вставить("Город", "--town");
Р.Вставить("Регион", "--region");
Р.Вставить("Район", "--district");
Р.Вставить("Улица", "--street");
Р.Вставить("Дом", "--house");
Р.Вставить("Строение", "--building");
Р.Вставить("Квартира", "--apartment");
Р.Вставить("НомерЛицензии", "--serial");
Р.Вставить("НовыйПинКод", "--pin");
Р.Вставить("ПинКод", "--previous-pin");
Возврат Новый ФиксированноеСоответствие(Р);
КонецФункции
&НаСервере
Функция АктивироватьНаСервере()
Кавычка = Символ(34);
Реквизиты = Соответсвие_АктивацияПинКода();
ОбязательныеРеквизиты = СтрРазделить("НомерЛицензии,ПинКод,НовыйПинКод", ",");
СтрокаПараметров = "";
Для Каждого ТекРеквизит Из Реквизиты Цикл
ЭтоОбязательный = Не Неопределено = ОбязательныеРеквизиты.Найти(ТекРеквизит.Ключ);
ЗначениеРеквизита = ЭтаФорма[ТекРеквизит.Ключ];
РеквизитЗаполнен = ЗначениеЗаполнено(ЗначениеРеквизита);
ВыводитьРеквизит = ЭтоОбязательный ИЛИ РеквизитЗаполнен;
Если НЕ ВыводитьРеквизит Тогда
Продолжить;
КонецЕсли;
Если НЕ ЭтоОбязательный Тогда
ЗначениеРеквизита = СтрШаблон("%1%2%1", Кавычка, ЗначениеРеквизита);
КонецЕсли;
СтрокаПараметров = СтрокаПараметров + СтрШаблон(" %1 %2", ТекРеквизит.Значение, ЗначениеРеквизита);
КонецЦикла;
ФайлОтвет = "";
ФайлОшибок = "";
ИмяВременногоФайлаCMD = SPS_СоздатьСистемныйСкрипт(СтрШаблон("call ring license activate %1 --validate", СтрокаПараметров), ФайлОтвет, ФайлОшибок);
SPS_ВыводФайлаОшибок(ФайлОшибок);
фФайлОтвет = Новый Файл(ФайлОтвет);
Если НЕ фФайлОтвет.Существует() Тогда
ВызватьИсключение "Ошибка чтения результата";
КонецЕсли;
Текст = Новый ЧтениеТекста;
Текст.Открыть(ФайлОтвет, SPS_КодировкаФайлаОтвета());
стр = Текст.Прочитать();
Сообщить(стр);
Текст.Закрыть();
УдалитьФайлы(ФайлОтвет);
УдалитьФайлы(ИмяВременногоФайлаCMD);
Возврат стр;
КонецФункции
&НаКлиенте
Процедура Активировать(Команда)
АктивироватьНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Фамилия = Параметры.Фамилия;
Имя = Параметры.Имя;
Отчество = Параметры.Отчество;
Компания = Параметры.Компания;
email = Параметры.email;
Страна = Параметры.Страна;
Индекс = Параметры.Индекс;
Регион = Параметры.Регион;
Район = Параметры.Район;
Город = Параметры.Город;
Улица = Параметры.Улица;
Дом = Параметры.Дом;
Строение = Параметры.Строение;
Квартира = Параметры.Квартира;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция SPS_ЭтоWindows()
СистемнаяИнформация = Новый СистемнаяИнформация;
Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция SPS_КодировкаФайлаОтвета()
Возврат ?(SPS_ЭтоWindows(), Неопределено, КодировкаТекста.UTF8);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция SPS_СоздатьСистемныйСкрипт(Знач Команда, ФайлОтвет="", ФайлОшибок="")
Это_Windows = SPS_ЭтоWindows();
ИмяФайлаСкрипта = ПолучитьИмяВременногоФайла(?(Это_Windows, "cmd", "sh"));
Если ПустаяСтрока(ФайлОтвет) Тогда
ФайлОтвет = ПолучитьИмяВременногоФайла("txt");
КонецЕсли;
Если ПустаяСтрока(ФайлОшибок) Тогда
ФайлОшибок = ПолучитьИмяВременногоФайла("log");
КонецЕсли;
ТекстСкрипта = Новый ЗаписьТекста;
ТекстСкрипта.Открыть(ИмяФайлаСкрипта, ?(Это_Windows, КодировкаТекста.ANSI, КодировкаТекста.UTF8));
Если НЕ Это_Windows Тогда
// добавление Шебанг
//ТекстСкрипта.ЗаписатьСтроку("#!/bin/sh");
//ТекстСкрипта.ЗаписатьСтроку("");
// выбор языка вывода (для парсинга)
ТекстСкрипта.ЗаписатьСтроку("export LC_ALL=en_US.UTF8");
// избавляемся от call
Команда = СтрЗаменить(Команда, "call ring", "ring");
КонецЕсли;
// добавляем перенаправления вывода
Команда = СтрШаблон("%1 >%2 2>%3", Команда, ФайлОтвет, ФайлОшибок);
ТекстСкрипта.ЗаписатьСтроку(Команда);
ТекстСкрипта.Закрыть();
Возврат ИмяФайлаСкрипта;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура SPS_ЗапуститьСистемныйСкрипт(Знач ИмяФайлаСкрипта)
Это_Windows = SPS_ЭтоWindows();
// добавляем интерпретатор чтобы запускать скрипт без "chmod +x"
ИмяФайлаСкрипта = СтрШаблон(?(Это_Windows, "cmd.exe /c %1", "/bin/sh %1"), ИмяФайлаСкрипта);
ЗапуститьПриложение(ИмяФайлаСкрипта, КаталогВременныхФайлов(), Истина);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура SPS_ВыводФайлаОшибок(Знач ИмяФайлаОшибок)
фФайл = Новый Файл(ИмяФайлаОшибок);
Если НЕ фФайл.Существует() Тогда
Возврат;
КонецЕсли;
Чтение = Новый ЧтениеТекста(ИмяФайлаОшибок, КодировкаТекста.ANSI);
Текст = Чтение.Прочитать();
Чтение.Закрыть();
Попытка
УдалитьФайлы(ИмяФайлаОшибок);
Исключение
;
КонецПопытки;
Если ПустаяСтрока(СокрЛП(Текст)) Тогда
Возврат;
КонецЕсли;
Сообщить(СтрШаблон("Ошибки: %1%2", Символы.ПС, Текст));
КонецПроцедуры