From 41c9e7f53f3a76259d8b86ab97a847d252adb671 Mon Sep 17 00:00:00 2001
From: Maxwell Jeffress <max@maxwellj.xyz>
Date: Tue, 5 Nov 2024 20:27:25 +1100
Subject: [PATCH] Update README.md

---
 server/README.md | 127 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 126 insertions(+), 1 deletion(-)

diff --git a/server/README.md b/server/README.md
index 97acf5d..aaf7b7a 100644
--- a/server/README.md
+++ b/server/README.md
@@ -1,5 +1,130 @@
 # Chookpen Server
 
-This is the official Chookpen server implementation. It provides a backend and exposes an API. 
+Key features:
+- Real-time messaging with WebSocket support
+- User authentication and account management
+- Persistent message history
+- Simple HTTP API for basic operations
+- Built-in static file serving for web clients
+- Support for encryption keys
+- Active user tracking and presence notifications
 
+## Requirements
 
+- Java 17 or later
+- Caddy (for HTTPS reverse proxy) - [Download from caddyserver.com](https://caddyserver.com/download)
+- Some kind of OS, any should do
+- 50mb free space, 30mb avaliable ram (yes I know, very bloated and inefficient)
+
+## Running the Server
+
+Prebuilt binaries are available for immediate use. Simply download the latest server release and run:
+
+```bash
+./run
+```
+
+The server will start on port 7070 by default.
+
+## Building from Source
+
+First, install Gradle. Unless you want to painfully compile everything manually, Gradle is your best friend.
+
+Clone the repository and CD into the server directory. Then run:
+
+```bash
+gradle build
+```
+
+To create a distribution (you don't need to run gradle build, it will do that for you):
+```bash
+./gradlew installDist
+```
+
+To run the server, create the files `chatHistory` and `userDatabase` in the directory you're running it from, then run the script to start Chookpen.
+
+## API Documentation
+
+### HTTP Endpoints
+
+#### Send Message
+- Endpoint: `/api/send/{content}`
+- Content Format: `username:{name}token:{token}message:{message}`
+- Response: "Success" or error message
+
+#### Create Account
+- Endpoint: `/api/createaccount/{content}`
+- Content Format: `username:{name}token:{password}`
+- Response: "Success" or error message
+
+#### Sync Messages
+- Endpoint: `/api/syncmessages/{content}`
+- Content Format: `username:{name}token:{token}`
+- Response: Chat history or error message
+
+#### Auth Key (being worked on for E2EE)
+- Endpoint: `/api/authkey/{content}`
+- Content Format: `username:{name}token:{token}authkey:{key}`
+- Response: "Success" or error message
+
+## WebSocket Interface
+
+Connect to `/api/websocket` for real-time updates.
+
+### WebSocket Messages
+
+1. Server to Client:
+- Ping messages: "ping"
+- User updates: "!users:{user1,user2,user3}"
+- Chat messages: "username: message"
+
+2. Client to Server:
+- Pong response: "pong"
+- Message format: Same as HTTP send endpoint
+
+## Setting up HTTPS with Caddy
+
+Caddy provides automatic HTTPS and serves as a reverse proxy for your Chookpen server. [Download from caddyserver.com](https://caddyserver.com/download) or from your Linux/BSD/Illumos/Haiku/TempleOS/whatever distribution's package manager.
+
+1. Create a `Caddyfile` in your server directory:
+```
+chat.yourdomain.com {
+    reverse_proxy localhost:7070
+}
+```
+
+2. Start Caddy:
+```bash
+caddy run
+```
+
+Caddy will automatically obtain and manage SSL certificates for your domain.
+
+## Client Deployment
+
+Place your client files in the `src/main/resources/public` directory. The server will automatically serve these static files, making the client accessible at your server's root URL.
+
+## Maintenance
+
+### Database Files
+- `userDatabase`: Contains user credentials in format `username:token:salt`
+- `chatHistory`: Stores message history
+- Regular backups recommended
+
+### Health Checks
+- Server automatically maintains WebSocket connections
+- Dead sessions are cleaned up automatically
+- Active user count is logged
+
+### Security Recommendations
+- Keep database files secure
+- Regular system updates
+- Monitor for unusual login patterns
+- Back up regularly:
+```bash
+#!/bin/bash
+backup_dir="/path/to/backups"
+date_stamp=$(date +%Y%m%d)
+cp userDatabase "${backup_dir}/userDatabase_${date_stamp}"
+cp chatHistory "${backup_dir}/chatHistory_${date_stamp}"
+```