message-server/README.md

48 lines
1.9 KiB
Markdown

# Message server
## Running
### Starting servers
Server ID (`SERVER_ID`) and remote servers (`SERVERS`) are provided as environment variables along with shared auth key (`AUTH_KEY`).
#### Server 1
```bash
SERVER_ID=1 SERVERS="2:localhost:4001" PORT=4000 AUTH_KEY=your_secret_shared_key mix run --no-halt
```
#### Server 2
```bash
SERVER_ID=2 SERVERS="1:localhost:4000" PORT=4001 AUTH_KEY=your_secret_shared_key mix run --no-halt
```
### Sending messages
#### From Server 1
```curl
curl -X POST http://localhost:4000/api/messages -H "Content-Type: application/json" -d '{"from": "1-bender", "to": "1-zoidberg", "message": "Dreams are where elves and gnomes live!"}'
```
```curl
curl -X POST http://localhost:4000/api/messages -H "Content-Type: application/json" -d '{"from": "1-bender", "to": "2-nibbler", "message": "Bite my shiny metal ass!"}'
```
#### From Server 2
```curl
curl -X POST http://localhost:4001/api/messages -H "Content-Type: application/json" -d '{"from": "2-nibbler", "to": "1-bender", "message": "I am Nibbler, agent of the Nibblonian fleet."}'
```
### Notes on queueing failed messages
When messages fail to be delivered they are queued for retry at 30 second interval with a maximum of 5 retries by default (can be configured)
## Security
This application uses a shared auth key (`AUTH_KEY`) to authenticate requests between servers. The key is provided as an environment variable and must be the same on all servers.
## Next steps
### Security - HTTPS with client certificates
HTTPS with client certificates should be implemented to ensure secure communication between servers and prevent unauthorized access and possible man-in-the-middle attacks.
### Testing
Full suite of unit tests should be implemented to ensure the correctness of the application's logic and behavior.
### Message Queue
Finish implementation of Message Queue to queue failed messages for retry