Пример приложения на веб-фреймворке pf2 для языка программирования Парсер 3. Идею приложения подсмотрел у Умпутуна в https://github.com/umputun/secrets.
Сайт помогает пользователям передавать секретные сообщения коллегам и друзьям через интернет. Сообщение защищаем пин-кодом и уничтожаем как только получатель откроет ссылку и введет правильный пин-код.
Приложение работает на сайте https://secrets.unhandled-exception.ru/
Напишите секретное сообщение, введите пин-код и время жизни сообщения на сервере. Сайт зашифрует сообщение и покажет секретную ссылку. Ссылку перешлите коллеге по почте или через чат. Пин-код расскажите по телефону или пошлите эсэмэской.
Коллега откроет ссылку на компьютере или телефоне, введет пин-код и увидит сообщение. Сообщение покажем один раз и сразу сотрем с сервера.
- Шифруем сообщение пин-кодом перед тем как сохранить в базу данных. Для пин-кода храним хеш из которого невозможно восстановить пин.
- Не сохраняем сообщения и пин-коды в логи веб-сервера.
- Сообщение удалим сразу после просмотра. Спрашиваем сколько минут хранить сообщение и удалим сообщение, когда время прошло и сообщение не прочитали.
Для программистов на сайте работает REST API, чтобы сохранить и загрузить сообщение из программы.
POST /api/v1/message
, body - pin=12345&message=testtest-12345678&exp=15
message
сообщениеexp
время жизни сообщения в минутахpin
пин-код
$ http --form POST https://secrets.unhandled-exception.ru/api/v1/message pin=12345 message=testtest-12345678 exp=15
HTTP/1.1 201 Created
{
"exp": "2016-12-13T22:01:25+03:00",
"token": "109a943d-c254-4306-bdab-2afaac78e94f"
}
GET /api/v1/message/:token/:pin
$ http GET https://secrets.unhandled-exception.ru/api/v1/message/109a943d-c254-4306-bdab-2afaac78e94f/12345
HTTP/1.1 200 OK
{
"token": "109a943d-c254-4306-bdab-2afaac78e94f",
"message": "testtest-12345678"
}
GET /api/v1/ping
$ http https://secrets.unhandled-exception.ru/api/v1/ping
HTTP/1.1 200 OK
pong
GET /api/v1/params
$ http https://secrets.unhandled-exception.ru/api/v1/params
HTTP/1.1 200 OK
{
"min_exp_min": 10,
"max_pin_attempts": 3,
"min_pin_size": 5
}
Класс ueSecretsAPI лежит в ./lib/secrets_api.p. Пример работы с классом смотрите в ./lib/secrets_api_test.p.