# Rectes [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) Rectes (anagram from "secret") is self-hosted service to share secrets (like passwords) with somebody over the network, but don't want them to appear in chats, unencrypted e-mails, etc. This service tries to be as anonymous as possible. The only personal information that will be stored on a server will be IP address of the client that made request to the server. Service is built with Python, FastAPI and is using Redis for data storage. ## Installation ### Requirements - Python 3.11+ - Redis - Python development libraries (optional, only needed for `hiredis` module installation) ### How to install #### TL/DR ``` $ git clone git@git.ivnglkv.ru:ivnglkv/rectes.git $ python3 -m venv venv $ . ./venv/bin/activate $ pip install ".[hiredis]" ``` --- Steps to install Rectes: 1. Clone repository 2. (optional) Create virtual environment 3. Install package #### Optional `hiredis` module Rectes server is using `aioredis` library for interaction with Redis. It's authors recommend using it with `hiredis` module for performance and stability reasons ([source](https://github.com/aio-libs/aioredis-py#installation)). Rectes offers `hiredis` as optional but recommended dependency too. Thus, the recommended way to install Rectes will be with `[hiredis]` option. If you don't want to use `hiredis` for any reasons, install package without options: ``` $ pip install . ``` ### Running Rectes server After installation is done, you can start rectes with `rectes` command. The web server will be started with `uvicorn` ASGI web server. ``` $ rectes ``` ## Contributing Codestyle is enforced with Black, and additional checks are done with the help of pre-commit-hooks, Flake8 and isort. Prior to making any commits, install `pre-commit` tool and install hooks: ``` # Alternatively, you could use 'pip install ".[development]"' $ pip install pre-commit==2.19.0 $ pre-commit install ``` This way you will always be sure that new code follows project guidelines. This project is using trunk-based branching strategy with the `main` as trunk branch.