2023-11-05 18:15:22 +00:00
< p > < img align = "center" src = "https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/banner.png" > < / p >
2023-11-04 23:40:32 +00:00
< p align = "center" >
< a href = "https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/login.png" >
< img src = "https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/login.png" width = "19%" >
2023-09-18 23:57:18 +00:00
< / a >
2023-11-04 23:40:32 +00:00
< a href = "https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/home.png" >
< img src = "https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/home.png" width = "19%" >
2023-09-18 23:57:18 +00:00
< / a >
2023-11-04 23:40:32 +00:00
< a href = "https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/documents.png" >
< img src = "https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/documents.png" width = "19%" >
2023-09-26 22:09:02 +00:00
< / a >
2023-11-04 23:40:32 +00:00
< a href = "https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/document.png" >
< img src = "https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/document.png" width = "19%" >
2023-09-26 22:09:02 +00:00
< / a >
2023-11-04 23:40:32 +00:00
< a href = "https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/metadata.png" >
< img src = "https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/metadata.png" width = "19%" >
2023-09-26 22:09:02 +00:00
< / a >
< / p >
2023-11-05 18:15:22 +00:00
< p align = "center" >
< strong > < a href = "https://gitea.va.reichard.io/evan/AnthoLume/src/branch/master/screenshots" > Screenshots< / a > < / strong > •
< strong > < a href = "https://antholume-demo.cloud.reichard.io/" > Demo Server< / a > < / strong >
< / p >
< p align = "center" > < strong > user:< / strong > demo • < strong > pass:< / strong > demo< / p >
2023-11-04 23:40:32 +00:00
2023-10-24 22:30:01 +00:00
< p align = "center" >
2023-11-04 23:40:32 +00:00
< a href = "https://drone.va.reichard.io/evan/AnthoLume" target = "_blank" >
< img src = "https://drone.va.reichard.io/api/badges/evan/AnthoLume/status.svg" >
2023-09-18 23:57:18 +00:00
< / a >
< / p >
---
2023-11-04 23:40:32 +00:00
AnthoLume is a Progressive Web App (PWA) that manages your EPUB documents, provides an EPUB reader, and tracks your reading activity! It also has a [KOReader KOSync ](https://github.com/koreader/koreader-sync-server ) compatible API, and a [KOReader ](https://github.com/koreader/koreader ) Plugin used to sync activity from your Kindle. Some additional features include:
2023-09-18 23:57:18 +00:00
2023-11-04 23:40:32 +00:00
- OPDS API Endpoint
- Local / Offline Reader (via ServiceWorker)
- Metadata Scraping (Thanks [OpenLibrary ](https://openlibrary.org/ ) & [Google Books API ](https://developers.google.com/books/docs/v1/getting_started ))
- Words / Minute (WPM) Tracking & Leaderboard (Amongst Server Users)
2023-09-18 23:57:18 +00:00
2023-11-04 23:40:32 +00:00
While some features require JavaScript (Service Worker & EPUB Reader), we make an effort to limit JavaScript usage. Outside of the two aforementioned features, no JavaScript is used.
2023-09-19 23:29:55 +00:00
2023-11-04 23:40:32 +00:00
## Server
2023-09-19 23:29:55 +00:00
2023-11-04 23:40:32 +00:00
Docker Image: `docker pull gitea.va.reichard.io/evan/antholume:latest`
2023-09-26 22:09:02 +00:00
2023-11-04 23:40:32 +00:00
### Local / Offline Reader
2023-10-30 23:23:38 +00:00
2023-11-04 23:40:32 +00:00
The Local / Offline reader allows you to use any AnthoLume server as a standalone offline accessible reading app! Some features:
2023-10-30 23:23:38 +00:00
- Add local EPUB documents
- Read both local and any cached server documents
- Maintains progress for all types of documents (server / local)
- Uploads any progress or activity for cached server documents once the internet is accessible
2023-11-04 23:40:32 +00:00
### KOSync API
2023-09-27 22:58:47 +00:00
The KOSync compatible API endpoint is located at: `http(s)://<SERVER>/api/ko`
2023-11-04 23:40:32 +00:00
### OPDS API
2023-10-05 23:56:19 +00:00
The OPDS API endpoint is located at: `http(s)://<SERVER>/api/opds`
2023-11-04 23:40:32 +00:00
### Quick Start
2023-09-26 22:09:02 +00:00
2024-01-27 01:45:07 +00:00
**NOTE**: If you're accessing your instance over HTTP (not HTTPS), you must set `COOKIE_SECURE=false` , otherwise you will not be able to login.
2023-09-26 22:09:02 +00:00
```bash
# Make Data Directory
2023-11-04 23:40:32 +00:00
mkdir -p antholume_data
2023-09-26 22:09:02 +00:00
# Run Server
docker run \
-p 8585:8585 \
2024-01-27 01:45:07 +00:00
-e COOKIE_SECURE=false \
2023-09-26 22:09:02 +00:00
-e REGISTRATION_ENABLED=true \
2023-11-04 23:40:32 +00:00
-v ./antholume_data:/config \
-v ./antholume_data:/data \
gitea.va.reichard.io/evan/antholume:latest
2023-09-26 22:09:02 +00:00
```
2023-09-27 22:58:47 +00:00
The service is now accessible at: `http://localhost:8585` . I recommend registering an account and then disabling registration unless you expect more users.
2023-09-26 22:09:02 +00:00
2023-11-04 23:40:32 +00:00
### Configuration
2023-09-19 23:29:55 +00:00
2024-01-27 01:45:07 +00:00
| Environment Variable | Default Value | Description |
| -------------------- | ------------- | -------------------------------------------------------------------------- |
| DATABASE_TYPE | SQLite | Currently only "SQLite" is supported |
| DATABASE_NAME | antholume | The database name, or in SQLite's case, the filename |
| CONFIG_PATH | /config | Directory where to store SQLite's DB |
| DATA_PATH | /data | Directory where to store the documents and cover metadata |
| LISTEN_PORT | 8585 | Port the server listens at |
| LOG_LEVEL | info | Set server log level |
| REGISTRATION_ENABLED | false | Whether to allow registration (applies to both WebApp & KOSync API) |
| COOKIE_AUTH_KEY | < EMPTY > | Optional secret cookie authentication key (auto generated if not provided) |
| COOKIE_ENC_KEY | < EMPTY > | Optional secret cookie encryption key (16 or 32 bytes) |
| COOKIE_SECURE | true | Set Cookie `Secure` attribute (i.e. only works over HTTPS) |
| COOKIE_HTTP_ONLY | true | Set Cookie `HttpOnly` attribute (i.e. inacessible via JavaScript) |
2023-09-19 23:29:55 +00:00
2023-10-05 23:56:19 +00:00
## Security
### Authentication
- _Web App / PWA_ - Session based token (7 day expiry, refresh after 6 days)
2023-10-29 00:07:24 +00:00
- _KOSync & SyncNinja API_ - Header based - `X-Auth-User` & `X-Auth-Key` (KOSync compatibility)
2023-10-05 23:56:19 +00:00
- _OPDS API_ - Basic authentication (KOReader OPDS compatibility)
### Notes
- Credentials are the same amongst all endpoints
- The native KOSync plugin sends an MD5 hash of the password. Due to that:
- We store an Argon2 hash _and_ per-password salt of the MD5 hashed original password
2023-11-04 23:40:32 +00:00
## Client (KOReader Plugin)
2023-09-19 23:29:55 +00:00
2023-11-04 23:40:32 +00:00
See documentation in the `client` subfolder: [SyncNinja ](https://gitea.va.reichard.io/evan/AnthoLume/src/branch/master/client/ )
2023-09-18 23:57:18 +00:00
2023-11-04 23:40:32 +00:00
## Development
2023-09-18 23:57:18 +00:00
2024-08-10 13:26:30 +00:00
SQLC Generation (v1.26.0):
2023-09-18 23:57:18 +00:00
2023-09-26 22:09:02 +00:00
```bash
2023-09-18 23:57:18 +00:00
go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
~/go/bin/sqlc generate
```
2024-01-26 00:22:57 +00:00
Goose Migrations:
```bash
go install github.com/pressly/goose/v3/cmd/goose@latest
```
2023-09-18 23:57:18 +00:00
Run Development:
2023-09-26 22:09:02 +00:00
```bash
2023-10-29 00:07:24 +00:00
CONFIG_PATH=./data DATA_PATH=./data REGISTRATION_ENABLED=true go run main.go serve
2023-09-18 23:57:18 +00:00
```
2023-11-04 23:40:32 +00:00
## Building
2023-09-19 23:29:55 +00:00
The `Dockerfile` and `Makefile` contain the build information:
2023-09-26 22:09:02 +00:00
```bash
2023-10-05 23:56:19 +00:00
# Build Local (Linux & Darwin - arm64 & amd64)
make build_local
2023-09-19 23:29:55 +00:00
# Build Local Docker Image
make docker_build_local
2023-10-05 23:56:19 +00:00
# Build Docker & Push Latest or Dev (Linux - arm64 & amd64)
2023-09-19 23:29:55 +00:00
make docker_build_release_latest
2023-10-05 23:56:19 +00:00
make docker_build_release_dev
2023-10-29 00:07:24 +00:00
# Generate Tailwind CSS
make build_tailwind
# Clean Local Build
make clean
# Tests (Unit & Integration - Google Books API)
make tests_unit
make tests_integration
2023-09-19 23:29:55 +00:00
```
2023-09-18 23:57:18 +00:00
## Notes
- Icons: https://www.svgrepo.com/collection/solar-bold-icons
2023-09-23 18:14:57 +00:00
- Icons: https://www.svgrepo.com/collection/scarlab-solid-oval-interface-icons/