48 lines
1.6 KiB
Markdown
48 lines
1.6 KiB
Markdown
|
|
# Montana Messenger Relay
|
|||
|
|
|
|||
|
|
Federated relay backend for Montana Messenger (`montana.quest/messenger`).
|
|||
|
|
|
|||
|
|
## Stack
|
|||
|
|
- Flask 3 + gunicorn
|
|||
|
|
- PostgreSQL (table: accounts, sessions, messages)
|
|||
|
|
- PyNaCl for ed25519 signature verify
|
|||
|
|
- Listens on 127.0.0.1:5010 (proxied by nginx at /messenger/api/)
|
|||
|
|
|
|||
|
|
## Setup (on montana-moscow)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. PostgreSQL
|
|||
|
|
sudo -u postgres createuser -P montana
|
|||
|
|
sudo -u postgres createdb -O montana montana_messenger
|
|||
|
|
sudo -u postgres psql montana_messenger < /opt/app/messenger/schema.sql
|
|||
|
|
|
|||
|
|
# 2. Virtualenv
|
|||
|
|
cd /opt/app/messenger
|
|||
|
|
python3 -m venv .venv
|
|||
|
|
.venv/bin/pip install -r requirements.txt
|
|||
|
|
|
|||
|
|
# 3. .env
|
|||
|
|
cp .env.example .env # отредактировать DSN с реальным паролем
|
|||
|
|
|
|||
|
|
# 4. systemd
|
|||
|
|
sudo cp montana-messenger.service /etc/systemd/system/
|
|||
|
|
sudo systemctl daemon-reload
|
|||
|
|
sudo systemctl enable --now montana-messenger
|
|||
|
|
sudo systemctl status montana-messenger
|
|||
|
|
|
|||
|
|
# 5. nginx
|
|||
|
|
sudo cat nginx-snippet.conf
|
|||
|
|
# скопировать содержимое в /etc/nginx/sites-available/montana_quest перед "location /"
|
|||
|
|
sudo nginx -t && sudo systemctl reload nginx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## API
|
|||
|
|
|
|||
|
|
- `POST /api/auth/challenge` body `{accountId}` → `{challengeId, challenge, expiresAt}`
|
|||
|
|
- `POST /api/auth/verify` body `{accountId, challengeId, signature}` → `{sessionToken, accountId, expiresAt}`
|
|||
|
|
- `POST /api/msg/send` body `{recipient, ciphertext, nonce}` (Bearer) → `{msgId, createdAt}`
|
|||
|
|
- `GET /api/msg/inbox?since=<ms>` (Bearer) → `{messages: [...]}`
|
|||
|
|
- `GET /api/msg/contacts` (Bearer) → `{contacts: [...]}`
|
|||
|
|
- `POST /api/msg/read` body `{msgIds}` (Bearer) → `{ok}`
|
|||
|
|
- `GET /api/health` → liveness
|