Commit Graph

6 Commits

Author SHA1 Message Date
fegger 7451a6b96b Add Outlook work calendar (ICS) to the calendar feeds 2026-09-07 10:08:53 +02:00
fegger e41e2f928f Route GitLab stats and health checks through a configurable proxy 2026-09-07 09:51:47 +02:00
fegger dfe246b7ca Add Outlook unread-mail widget with device-code login
- outlook-auth.js: one-time device-code flow against Microsoft login;
  stores the refresh token in the outlook-tokens compose volume
- update-outlook.js: per-minute cron fetching the unread count and the
  latest unread messages via Microsoft Graph; caches access tokens and
  persists rotated refresh tokens
- Widget is hidden until the mailbox is actually authorized, so it
  stays out of sight while (admin) consent is pending
- New external card for Outlook (Office 365) with the official icon
- compose: pass OUTLOOK_CLIENT_ID/OUTLOOK_TENANT/GITEA_TOKEN from .env
- README: Entra ID app registration steps and the tenant-ID hint for
  directories not resolvable via the organizations endpoint
2026-09-04 17:38:17 +02:00
fegger c15cfc51a9 Fall back to public Gitea stats when the API token is rejected
Tokens without scopes (Gitea >= 1.19) or revoked tokens get 403 on
/api/v1/user/repos; catch that and retry anonymously via /repos/search
so the Git widget keeps showing public stats instead of an error.
2026-09-04 17:38:13 +02:00
fegger 012eee6c45 Add server-side health checks for service online status
- update-health.js: pings every service URL from script.js (single
  source of truth) in parallel every minute via cron and writes
  health.json; any HTTP response below 500 counts as online, 5xx as
  error, timeouts/DNS failures as offline; TLS validity ignored
- Card badges now show real state instead of a static Online label:
  grey Checking, green Online (with latency tooltip), amber Error
  (HTTP code), red Offline (reason); refreshed every 30 s
- Entrypoint runs a first sweep at boot; nginx serves /health.json
  with no-cache; README documents the behavior
2026-09-04 14:15:08 +02:00
fegger 55e871bd4f Add backend data aggregator and API proxy services
- update-data.js: cron job that aggregates Google Calendar ICS feeds
  (today + upcoming, node-ical), Netbird reachability, Gitea/GitLab
  commit stats and Open WebUI models into data.json
- server.js: small Node proxy behind nginx exposing /api/chat
  (Open WebUI completions), /api/gpu-stats and /api/ollama
- gitlab-relay.js: prepared HTTP relay for GitLab over a Netbird VPN
  (not wired up yet; the setup key was rejected by vpn.ixsol.at)
- docker-entrypoint.sh: starts updater in the background, API proxy,
  cron (15 min refresh) and nginx without blocking startup
- nginx: proxy locations + no-cache for data.json
- compose: TZ, token env wiring from .env, gpu-stats service
  (python + rocm-smi with device passthrough)
- dockerignore: keep .env out of the build context
2026-09-04 14:07:01 +02:00