Files
ActivePush/docs/CONFIGURATION.md
T
2026-11-05 12:52:32 +01:00

74 lines
4.5 KiB
Markdown

# Configuration
Runtime settings live in SQLite (`settings` table, JSON with a revision number) and are edited in the panel.
Saving in the panel applies them **immediately** (no restart): the IMAP pool and login cache are cleared and DAV
HTTP clients are rebuilt.
From the command line:
```bash
active-push config get # secrets masked as "__SET__"
active-push config get --with-secrets
active-push config validate file.json
active-push config apply file.json # partial JSON - only the given keys change (deep merge)
```
Startup parameters (listen addresses, data directory, panel TLS) come from `/etc/active-push/environment` or
flags (`active-push --help`).
| Variable | Default | Meaning |
|---|---|---|
| `ACTIVE_PUSH_DATA_DIR` | `/var/lib/active-push` | database directory |
| `ACTIVE_PUSH_EAS_LISTEN` | `127.0.0.1:8081` | ActiveSync + Autodiscover + `/healthz` |
| `ACTIVE_PUSH_ADMIN_LISTEN` | `127.0.0.1:9091` | panel |
| `ACTIVE_PUSH_ALLOW_REMOTE_ADMIN` | `false` | allow the panel on a non-loopback address |
| `ACTIVE_PUSH_ADMIN_TLS_CERT/KEY` | - | panel TLS |
| `ACTIVE_PUSH_EAS_TLS_CERT/KEY` | - | ActiveSync TLS (without a reverse proxy) |
| `ACTIVE_PUSH_LOG_JSON` | `false` | JSON logs |
| `RUST_LOG` | `active_push=info,warn` | log filter |
| `ACTIVE_PUSH_PANEL_LOG` | `active_push=info,warn` | filter for the panel log viewer |
## Z-Push equivalents
| Z-Push | ActivePush (`section.key`) |
|---|---|
| `TIMEZONE` | `general.default_timezone` |
| `USE_FULLEMAIL_FOR_LOGIN` | `general.login_format` (`as_given` / `local_part` / `full_email`) + `general.default_domain` |
| `IMAP_DEFAULTFROM` | `general.email_template` (`{login}`, `{local}@{domain}`, `{local}@example.com`) |
| `IMAP_SERVER`, `IMAP_PORT`, `IMAP_OPTIONS` | `imap.host`, `imap.port`, `imap.security` (`none`/`start_tls`/`tls`), `imap.verify_tls` |
| `IMAP_FOLDER_*`, `IMAP_FOLDER_PREFIX` | `imap.folder_*`, `imap.folder_prefix`, `imap.use_special_use` |
| `IMAP_EXCLUDED_FOLDERS` | `imap.excluded_folders` (list, `prefix*` allowed) |
| `IMAP_AUTOSEEN_ON_DELETE`, `IMAP_INLINE_FORWARD` | `imap.autoseen_on_delete`, `imap.inline_forward` |
| `IMAP_SMTP_METHOD`, `IMAP_SMTP_PARAMS` | `smtp.method`, `smtp.host`, `smtp.port`, `smtp.security`, `smtp.auth` |
| `CALDAV_*` | `caldav.enabled`, `caldav.base_url`, `caldav.path`, `caldav.include_regex`, `caldav.exclude_regex` |
| `CARDDAV_*`, `CARDDAV_GAL_PATH`, `CARDDAV_GAL_MIN_LENGTH` | `carddav.*`, `carddav.gal_path`, `carddav.gal_min_length` |
| `SYNC_MAX_ITEMS`, `SYNC_FILTERTIME_MAX`, `SYNC_CONFLICT_DEFAULT` | `sync.max_items`, `sync.filter_time_max`, `sync.server_wins` |
| `SYNC_CONTACTS_MAXPICTURESIZE` | `carddav.max_picture_kb` |
| `PING_INTERVAL`, `PING_*_BOUND_LIFETIME` | `ping.check_interval_secs`, `ping.lifetime_min/max` |
| `RETRY_AFTER_DELAY`, `SEARCH_WAIT`, `SEARCH_MAXRESULTS` | `sync.retry_after_secs`, `sync.search_wait_secs`, `sync.search_max_results` |
| `PROVISIONING`, `LOOSE_PROVISIONING`, `policies.ini` | `provisioning.enabled`, `provisioning.loose`, `provisioning.policies[]`, `provisioning.user_policies[]` |
| `LOGAUTHFAIL`, `LOGUSERLEVEL` | `security.log_auth_failures`, `logging.debug_users` |
| `ZPUSH_HOST` (autodiscover) | `autodiscover.server_url` |
| `STATE_MACHINE`, `IPC_PROVIDER` | not needed - states in SQLite, IPC in process |
DAV paths accept `%u` (login), `%l` (local part) and `%d` (domain).
## Settings without a Z-Push counterpart
- `security.auth_fail_max / auth_fail_window_secs / lockout_secs` - password guessing protection.
- `security.trusted_proxies`, `security.real_ip_header` - real client IP behind a proxy.
- `security.eas_allowed_networks`, `panel.allowed_networks` - network allow lists.
- `security.allowed_users`, `blocked_users`, `blocked_device_types`, `require_device_approval`.
- `security.auth_cache_secs` - successful login cache (HMAC with a random per-process key, never the password).
- `smtp.enforce_from` - sender always equals the account address.
- `sync.loop_detection` - detects devices replaying an old SyncKey (shrinks the window, reported in the panel).
- `imap.pool_*` - pool of authenticated IMAP connections reused between requests.
- `panel.prometheus_token`, `panel.device_inactive_days`, `logging.*` - see [LOGS.md](LOGS.md).
## Time zones
Devices send the zone as a 172-byte Windows `TIME_ZONE_INFORMATION` structure. ActivePush maps it to an IANA
zone, preferring `general.default_timezone` (comparing this year's DST rules). Recurring events are stored in
CalDAV with `TZID` and a generated `VTIMEZONE`; single events in UTC (unless the original used `TZID`, in which
case the format is kept).