Evan Reichard f1414e3e4e fix(timezones): move from utc offsets to timezones
This fixed various issues related to calculating streaks, etc. Now we
appropriately handle time as it was, vs as it is relative to an offset.
2024-03-11 22:20:21 -07:00
2023-11-26 15:51:47 -05:00
2023-11-07 19:19:06 -05:00
2023-11-04 19:55:38 -04:00
2024-01-24 21:40:14 -05:00
2023-09-19 08:01:15 -04:00
2023-09-19 08:01:15 -04:00
2023-11-04 19:55:38 -04:00
2024-01-20 15:32:04 -05:00
2023-09-19 08:01:15 -04:00
2024-01-25 19:22:57 -05:00

ScreenshotsDemo Server

user: demo • pass: demo


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 compatible API, and a KOReader Plugin used to sync activity from your Kindle. Some additional features include:

  • OPDS API Endpoint
  • Local / Offline Reader (via ServiceWorker)
  • Metadata Scraping (Thanks OpenLibrary & Google Books API)
  • Words / Minute (WPM) Tracking & Leaderboard (Amongst Server Users)

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.

Server

Docker Image: docker pull gitea.va.reichard.io/evan/antholume:latest

Local / Offline Reader

The Local / Offline reader allows you to use any AnthoLume server as a standalone offline accessible reading app! Some features:

  • 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

KOSync API

The KOSync compatible API endpoint is located at: http(s)://<SERVER>/api/ko

OPDS API

The OPDS API endpoint is located at: http(s)://<SERVER>/api/opds

Quick Start

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.

# Make Data Directory
mkdir -p antholume_data

# Run Server
docker run \
    -p 8585:8585 \
    -e COOKIE_SECURE=false \
    -e REGISTRATION_ENABLED=true \
    -v ./antholume_data:/config \
    -v ./antholume_data:/data \
    gitea.va.reichard.io/evan/antholume:latest

The service is now accessible at: http://localhost:8585. I recommend registering an account and then disabling registration unless you expect more users.

Configuration

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 Optional secret cookie authentication key (auto generated if not provided)
COOKIE_ENC_KEY 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)

Security

Authentication

  • Web App / PWA - Session based token (7 day expiry, refresh after 6 days)
  • KOSync & SyncNinja API - Header based - X-Auth-User & X-Auth-Key (KOSync compatibility)
  • 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

Client (KOReader Plugin)

See documentation in the client subfolder: SyncNinja

Development

SQLC Generation (v1.21.0):

go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
~/go/bin/sqlc generate

Goose Migrations:

go install github.com/pressly/goose/v3/cmd/goose@latest

Run Development:

CONFIG_PATH=./data DATA_PATH=./data REGISTRATION_ENABLED=true go run main.go serve

Building

The Dockerfile and Makefile contain the build information:

# Build Local (Linux & Darwin - arm64 & amd64)
make build_local

# Build Local Docker Image
make docker_build_local

# Build Docker & Push Latest or Dev (Linux - arm64 & amd64)
make docker_build_release_latest
make docker_build_release_dev

# Generate Tailwind CSS
make build_tailwind

# Clean Local Build
make clean

# Tests (Unit & Integration - Google Books API)
make tests_unit
make tests_integration

Notes

Description
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 compatible API, and a KOReader Plugin used to sync activity from your Kindle.
Readme GPL-2.0 21 MiB
Languages
Go 57.2%
JavaScript 19.1%
Lua 12.3%
HTML 9.1%
CSS 1.5%
Other 0.7%