API сервис позволяет создать секрет, задать кодовую фразу для его открытия и cгенерировать код, по которому можно прочитать секрет только один раз.
- Метод
/generate
принимает секрет и кодовую фразу и отдаетsecret_key
, по которому этот секрет можно получить. - Метод
/secrets/{secret_key}
принимает на вход кодовую фразу и отдает секрет.
Сервис асинхронно обрабатывает запросы.
Данные сервиса хранятся во внешнем хранилище, запуск которого описан в docker-compose
.
Секреты и кодовые фразы не хранятся в базе в открытом виде.
Задано время жизни для секретов с помощью TTL индексов. В данной реализации секрет существует 7 дней с момента создания, после чего автоматически удаляется базой данных.
- FastAPI — фреймворк.
- MongoDB — база данных приложения.
- Motor — драйвер для соединения MongoDB и FastAPI.
- cryptography — для шифрования чувствительной информации.
- pytest + pytest-asyncio — для асинхронных тестов.
- Docker — контейнеризация приложения.
- Jinja2 + Bootstrap — для небольшой визуальной части проекта.
- Склонируйте репозиторий:
git clone /~https://github.com/blakkheart/secrets_test_task.git
- Перейдите в директорию проекта:
cd secrets_test_task
- Установите и активируйте виртуальное окружение:
- Windows
python -m venv venv source venv/Scripts/activate
- Linux/macOS
python3 -m venv venv source venv/bin/activate
- Обновите pip:
- Windows
(venv) python -m pip install --upgrade pip
- Linux/macOS
(venv) python3 -m pip install --upgrade pip
- Установите зависимости из файла requirements.txt:
(venv) pip install -r requirements.txt
Создайте и заполните файл .env
по примеру с файлом .env.example
, который находится в корневой директории.
- Введите команду для запуска докер-контейнера:
docker compose up
Cервер запустится по адресу localhost:8000 и вы сможете получить доступ к API. Доступны эндпоинты:
- localhost:8000/generate — POST запрос c параметрами:
{ "code_phrase": "string", "secret": "string" }
- localhost:8000/generate/{secret_key} — POST запрос c параметрами:
{ "code_phrase": "string" }
- localhost:8000 - демо проекта.
- localhost:8000/docs - документация проекта.
Можно запустить тесты из основной директории с помощью команды pytest