/pf2-secrets-app

Пример приложения на PF2

Primary LanguageRubyMIT LicenseMIT

pf2-secrets-app

Пример приложения на веб-фреймворке pf2 для языка программирования Парсер 3. Идею приложения подсмотрел у Умпутуна в https://github.com/umputun/secrets.

Сайт помогает пользователям передавать секретные сообщения коллегам и друзьям через интернет. Сообщение защищаем пин-кодом и уничтожаем как только получатель откроет ссылку и введет правильный пин-код.

Принцип работы

Приложение работает на сайте https://secrets.unhandled-exception.ru/

Напишите секретное сообщение, введите пин-код и время жизни сообщения на сервере. Сайт зашифрует сообщение и покажет секретную ссылку. Ссылку перешлите коллеге по почте или через чат. Пин-код расскажите по телефону или пошлите эсэмэской.

Коллега откроет ссылку на компьютере или телефоне, введет пин-код и увидит сообщение. Сообщение покажем один раз и сразу сотрем с сервера.

Безопасность

  • Шифруем сообщение пин-кодом перед тем как сохранить в базу данных. Для пин-кода храним хеш из которого невозможно восстановить пин.
  • Не сохраняем сообщения и пин-коды в логи веб-сервера.
  • Сообщение удалим сразу после просмотра. Спрашиваем сколько минут хранить сообщение и удалим сообщение, когда время прошло и сообщение не прочитали.

API

Для программистов на сайте работает 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
}

Библиотека API для Парсера

Класс ueSecretsAPI лежит в ./lib/secrets_api.p. Пример работы с классом смотрите в ./lib/secrets_api_test.p.