ТЗ на программу-агент
Программа должна представлять из себя ПО с открытыми исходными кодами. В качестве основного - диалоговое окно, скрывающееся в иконку области уведомлений (в трэй) по щелчку на иконке и появляющееся по нему-же. В окне должны задаваться параметры программы, сохраняемые в файле конфигурации:
- Путь к программе gpg2 (диалог выбора файла).
- Путь к хранилищу gpg ключей (диалог выбора каталога).
- URL сервера ключей GPG. Значение по умолчанию - hkp://keys.cdemocracy.ru;
- Выбор из списка имеющихся своих секретных ключей ключа по умолчанию. Этот пункт активизируется после выбора двух верхних.
- Чекбокс "Скрывать программу при запуске".
Внизу три кнопки: "Сохранить" - активизируется при изменении какого-либо из параметров, "Отменить" - отменяет сделанные в параметрах изменения и "Завершить" - завершает работу программы.
HTTP сервер
Программа должна принимать HTTP соединения по адресу 127.0.0.1 пор 7920 (таймоут соединения не менее 300 секунд). Запрос типа POST. В качестве URL будет выступать название функции:
- /sign - подписание текста (clear sign);
- /check_sign - проверка подписи;
- /encrypt - шифрование текста (ascii armored);
- /decrypt - расшифровка текста;
- /vote_uuid - генерация одноразового идентификатора для голосований;
Текст для подписания и шифрования передается в параметре запроса "text". В ответе типа "text/plain" должен передаваться результат работы функции. В заголовках ответа должен присутствовать заголовок "Access-Control-Allow-Origin: *".
Диалоги
По HTTP запросу программой должно выдаваться окно соответствующего назначения (в центре экрана, выше всех окон):
Для подписания текста: Выдается окно, в верхней части которого содержится текстовая информация, которую нужно подписать. Внизу окна на стандартном месте (горизонтально по середине) две кнопки - "Подписать" и "Отказаться". При нажатии "Подписать", должны производиться действия по подписанию текста с помощью вызова программы gpg2. Ответ должен передаваться в ответную часть запроса. При нажатии на "Отказаться" в ответ должен передаваться пустой текст (либо текст типа "Отказ в подписании" - строка должна быдь доступна в коде для изменения).
Для проверки подписи: Сразу производится проверка подписи. Если ключа, которым совершена подпись, не обнаруживается в локальном хранилище, производится попытка его скачать с сервера ключей GPG. После этого в диалоговом окне выводиться сообщение "Подпись верна" или "Плохая подпись" и, в случае верной подписи, идентификаторы ключа подписавшего. Снизу одна кнопка "Готово", по нажатию на которую окно закрывается.
Для шифрования текста Выдается окно с запросом на шифрование указанного текста ключем пользователя. В окне должна быть область с шифруемым текстом, галочка "Не спрашивать в следующий раз" и кнопка "Зашифровать". При этом шифрование будет производится указанным в настройках ключем пользователя. При пометке галочки "Не спрашивать в следующий раз" настройка запоминается и в следующий раз шифрование производится без выдачи диалога пользователю.
Для расшифровки текста Выдается окно с зашифрованным текстом и кнопкой "Расшифровать". По нажатию на нее переданный текст расшифровывается и выдается пользователю в этом-же окне. Расшифрованный текст НЕ передается назад на страницу (передается лишь результат-заглушка).
Для генерации одноразового идентификатора для голосований Без диалогового окна в ответе выдается одноразовый идентификатор (хэшь от GUID) и в зашифрованной локальной БД программы-агента запоминается пара "Одноразовый идентификатор" - "Идентификатор голосования". При повторной генерации идентификатора для того-же голосования должен выдаваться запрос на подтверждение операции пользователем. Через контекстное меню программы (правой кнопкой мыши на иконке в трэе) должна быть возможность вызвать диалог, в котором будет возможность показать пользователю по идентификатору голосования соответствующий (или соответствующие) ему одноразовый идентификатор пользователя.
Общие требования
В программе должна присутствовать "защита от дурака". Она должна быть устойчива к передаче в нее через сетевое соединение произвольных данных и подмене локальной БД программы.
В данный момент для написания программы-агента используется Free Pascal и среда Lazarus, которые работают и под Windows и под Linux. Если хотите принять участие в разработке, пишите на емэил [1].