coller/src/cmd/collerd/README.md
Julien Riou 7c94a62d80
All checks were successful
/ pre-commit (push) Successful in 1m47s
docs: Add API routes
Signed-off-by: Julien Riou <julien@riou.xyz>
2025-08-26 11:45:27 +02:00

75 lines
No EOL
2.5 KiB
Markdown

# collerd
Server to manage notes:
* Website
* API
* Database management
## Usage
```
collerd -help
```
## Configuration
The file format is **JSON**:
* **title** (string): Title of the website
* **database_type** (string): Type of the database (default "sqlite", "postgres" also supported)
* **database_dsn** (string): Connection string for the database (default "collerd.db")
* **id_length** (int): Number of characters for note identifiers (default 5)
* **password_length** (int): Number of characters for generated passwords (default 16)
* **expiration_interval** (int): Number of seconds to wait between two expiration runs
* **listen_address** (string): Address to listen for the web server (default "127.0.0.1")
* **listen_port** (int): Port to listen for the web server (default 8080)
* **expirations** ([]int): List of supported expiration times in seconds (default 300, 86400, 604800, 18144000)
* **expiration** (int): Default expiration time in seconds
* **max_upload_size** (int): Maximum number of bytes received by the server for notes (the base64 encoding may use more space than the real size of the note)
* **show_version** (bool): Show version on the website
* **enable_metrics** (bool): Enable Prometheus endpoint (default false)
* **prometheus_route** (string): Route to expose Prometheus metrics (default "/metrics")
* **prometheus_notes_metric** (string): Name of the notes count metric (default "collerd_notes")
* **observation_internal** (int): Number of seconds to wait between two observations (default 60)
The configuration file is not required but the service might not be exposed to the public.
## API
### GET /health
Returns 200 OK.
### POST /api/note
Create a note.
Body (JSON):
* **content** (string): base64 encoded content (required)
* **password** (string): user-provided password
* **encrypted** (bool): true if the note has been encrypted by the client
* **expiration** (int): lifetime of the note in seconds (must be supported by the server)
* **delete_after_read** (bool): delete the note after the first read
Response (JSON):
* **id** (string): ID of the note
### GET /<id>/<password>
> [!IMPORTANT]
> Potential password leak
Return content of a note encrypted by the given password.
### GET /<id>
Return content of a note.
If the note is encrypted, the encrypted value is returned (application/octet-stream). Otherwise, the text is returned (text/plain).
### Errors
Errors return **500 Server Internal Error** with the **JSON** payload:
* **message** (string): message of the response
* **error** (string): error if any