From 41c9e7f53f3a76259d8b86ab97a847d252adb671 Mon Sep 17 00:00:00 2001 From: Maxwell Jeffress 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}" +```