1 parent
0421994fe6
commit
425ea7449b
138 files changed
+5705
-1012
No files matched your search
@@ -1,4 +1,4 @@
|
||||
# RustBox 0.0.6
|
||||
# RustBox 0.1.0
|
||||
|
||||
RustBox is a webmail derived from `c0h1b4/oxi`. The consumed Oxi revision is recorded in `UPSTREAM_BASE`.
|
||||
|
||||
@@ -9,7 +9,6 @@ The repository is one Cargo application. The RustBox browser interface lives und
|
||||
```text
|
||||
rustbox/
|
||||
├── Cargo.toml
|
||||
├── Cargo.lock
|
||||
├── build.rs
|
||||
├── src/
|
||||
│ ├── main.rs
|
||||
@@ -43,7 +42,7 @@ Edit `config.dev.toml` before the first run:
|
||||
|
||||
```toml
|
||||
default_theme = "system" # system | dark | light
|
||||
default_interface_skin = "rustbox" # rustbox | gmail | proton | zoho | outlook | fastmail | apple-mail | yahoo | hey | nord | ...
|
||||
default_interface_skin = "rustbox" # rustbox | gmail | proton | zoho | outlook | fastmail | apple-mail | yahoo | hey | nord | github | gitlab | discord | slack | reddit | notion | ...
|
||||
# Mail hosts may be omitted: IMAP defaults to localhost:993 and SMTP to localhost:587.
|
||||
# imap_host = "localhost"
|
||||
# smtp_host = "localhost"
|
||||
@@ -71,6 +70,39 @@ If the mail host settings are omitted, RustBox uses `localhost` with IMAP `993`
|
||||
|
||||
Mail-size limits are intentionally separate. `max_attachment_size_mb` applies to each raw uploaded file, while `max_message_size_mb` is checked against the final RFC822/MIME byte stream immediately before SMTP submission. The latter therefore includes message bodies, headers, MIME boundaries, base64 expansion, inline CID parts and OpenPGP transformations. The composer displays only an estimate; the server-side final-MIME check is authoritative.
|
||||
|
||||
## Persistent sessions and cluster traffic
|
||||
|
||||
RustBox 0.1.0 persists login sessions by default in SQLite at `data_dir/rustbox.sqlite`. The session contains encrypted IMAP/SMTP credentials so it can survive a process restart; the encryption key is stored as `data_dir/session.key` with restrictive permissions for the default single-node SQLite setup.
|
||||
|
||||
RustBox uses `rusqlite` for SQLite and `sqlx` only for MySQL/PostgreSQL, avoiding duplicate native SQLite linkage in the Cargo dependency graph.
|
||||
|
||||
The session database backend can be `sqlite`, `mysql` or `pgsql`. For multi-node deployments use MySQL/PostgreSQL or Redis, set `cluster_mode = true`, and provide the same base64-encoded 32-byte `session_encryption_key` on every node. Redis is configured independently from the database and can use either a direct URL or Redis Sentinel discovery.
|
||||
|
||||
```toml
|
||||
# Default: SQLite under data_dir.
|
||||
database_backend = "sqlite"
|
||||
# database_url = "sqlite:///var/lib/rustbox/rustbox.sqlite?mode=rwc"
|
||||
session_backend = "database"
|
||||
|
||||
# Shared SQL example:
|
||||
# database_backend = "pgsql"
|
||||
# database_url = "postgres://rustbox:secret@db/rustbox"
|
||||
# cluster_mode = true
|
||||
# session_encryption_key = "<base64-32-byte-key>"
|
||||
|
||||
# Redis example; the application database remains configured separately above.
|
||||
# session_backend = "redis"
|
||||
# redis_url = "redis://redis:6379/"
|
||||
|
||||
# Sentinel alternative to redis_url:
|
||||
# redis_sentinel_nodes = ["sentinel-a:26379", "sentinel-b:26379", "sentinel-c:26379"]
|
||||
# redis_sentinel_master = "mymaster"
|
||||
# redis_sentinel_password = "sentinel-secret"
|
||||
# redis_password = "secret"
|
||||
```
|
||||
|
||||
All executable application SQL is centralized by dialect under `src/queries/{sqlite,mysql,pgsql}/queries.rs`. The migration tree is flat per dialect: `migrations/sqlite/`, `migrations/mysql/`, and `migrations/pgsql/`. SQLite user-schema migrations are `V001`-`V046`, and the session schema is `V047__sessions.sql` for each SQL dialect.
|
||||
|
||||
|
||||
## Development
|
||||
|
||||
@@ -106,7 +138,7 @@ RustBox uses a compact three-pane mail layout: folders, message list and reader.
|
||||
|
||||
IMAP IDLE events are delivered to the browser over the embedded WebSocket endpoint for realtime refresh and optional desktop notifications. Notification preferences include sound, folder selection and Do Not Disturb hours.
|
||||
|
||||
Appearance preferences are persisted per account and include light/dark/system theme, density, preview position, UI scale, multiple color presets, custom accent/background/panel/text colors, font, row height, pane widths, radius, contrast and visibility toggles. Administrators can set the global light/dark mode with `default_theme = "system" | "dark" | "light"` and the global interface style with `default_interface_skin = "rustbox" | "gmail" | "proton" | "zoho" | "outlook" | ...` in TOML. The global interface style is used on the login screen and by accounts set to **Global default**. Built-in interface styles include RustBox, Roundcube variants, Clean, Graphite, High contrast, Gmail/Proton/Zoho/Outlook/Fastmail/Apple Mail/Yahoo/HEY-inspired profiles, Nord and Minimal. Predefined styles can optionally unlock the per-account UI scale control. The mailbox toolbar also exposes persisted date/sender/subject/size sorting, and remote images can be restricted to saved contacts.
|
||||
Appearance preferences are persisted per account and include light/dark/system theme, density, preview position, UI scale, multiple color presets, custom accent/background/panel/text colors, font, row height, pane widths, radius, contrast and visibility toggles. Administrators can set the global light/dark mode with `default_theme = "system" | "dark" | "light"` and the global interface style with `default_interface_skin = "rustbox" | "gmail" | "proton" | "zoho" | "outlook" | ...` in TOML. The global interface style is used on the login screen and by accounts set to **Global default**. Built-in interface styles include RustBox, Roundcube variants, Clean, Graphite, High contrast, Gmail/Proton/Zoho/Outlook/Fastmail/Apple Mail/Yahoo/HEY/GitHub/GitLab/Discord/Slack/Reddit/Notion-inspired profiles, Nord and Minimal. Predefined styles can optionally unlock the per-account UI scale control. The mailbox toolbar also exposes persisted date/sender/subject/size sorting, and remote images can be restricted to saved contacts.
|
||||
|
||||
The native RustBox interface intentionally uses flat surfaces, small radii and one SVG icon set. Compatibility skins may reproduce upstream visual treatments such as gradients, while toolbar icons remain SVG rather than Unicode glyphs.
|
||||
|
||||
@@ -138,7 +170,7 @@ Initialize Git after extracting the release archive:
|
||||
```bash
|
||||
git init
|
||||
git add .
|
||||
git commit -m "RustBox 0.0.6 release"
|
||||
git commit -m "RustBox 0.1.0 release"
|
||||
./scripts/setup-upstream.sh
|
||||
```
|
||||
|
||||
|
||||
Reference in new issue
Block a user