# KOreader Sync Server This is a KOreader sync server, implemented in Rust. It uses the crates *axum*, *sqlx*, *serde* and *serde_json*. ## Requirements - Rust toolchain for compilation - A running PostgreSQL server - Nginx (or Apache) webserver as a reverse proxy, since kosyncrs only listens locally and uses HTTP. ## Installation Just compile it with `cargo build --release`. You can then copy the executable for example to `/usr/local/bin/`. If you want to start the service automatically, you can adapt the example systemd file for your needs. Please pay particularly attention to the PG_URL environment variable.You have to adjust the database username and password. You can also use nginx as a reverse proxy, so that the sync server listens on port 443. An example file is provided. ### Database setup First, create a new database user and set a password: ``` $ createuser -P kosync ``` Then, create a new database which is owned by the newly created user: ``` $ createdb -O kosync kosync ``` Connect to the database as user *kosync* (with psql) and create the database tables: ```sql CREATE TABLE users ( id BIGSERIAL PRIMARY KEY, username TEXT UNIQUE NOT NULL, password TEXT ); CREATE TABLE progresses ( id BIGSERIAL PRIMARY KEY, user_id BIGINT, document TEXT NOT NULL, progress TEXT NOT NULL, percentage REAL NOT NULL, device TEXT NOT NULL, device_id TEXT NOT NULL, timestamp BIGINT NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, UNIQUE (user_id, document) ); ```