Commit Graph

44 Commits

Author SHA1 Message Date
b56f8253d9 Harden backend against critical and high security vulnerabilities
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 3m51s
- Fix WebSocket CheckOrigin to use proper url.Parse instead of string stripping
- Add admin auth checks to Users/User GraphQL queries
- Remove GraphQL GET transport to prevent CSRF via cross-site links
- Add application-level IP-based login rate limiting (5 attempts/min)
- Add path traversal bounds check on radio file upload
- Require DEV_MODE for GraphQL introspection and playground
- Move notes backend endpoint behind admin middleware
- Add dedicated Nginx rate limit zone for GraphQL (10r/s)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 13:27:33 +01:00
390f69858c Redirect to original URL after admin login
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 3m49s
Pass the requested URI as ?redirect= when nginx denies access, so the
login page can forward the user to their intended destination on success.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 11:55:42 +01:00
18b50f1ce6 Split admin login into its own route and add auth guard to /admin
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 28s
- Add /admin/login route for Login.vue as a standalone page
- Add requiresAdmin guard to /admin route
- Update auth guard redirect to /admin/login with redirect query param
- Update nginx @auth_denied to redirect to /admin/login
- Remove Login component from Admin.vue; drop v-if auth checks (guard handles access)
- Remove stale view files from old views/ structure (moved in prior commit)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 11:19:10 +01:00
81f5fafb61 Redirect auth-denied users to /admin login page instead of homepage
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 23s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 22:05:22 +01:00
d344497393 Gate searxng, notes, and hasura behind admin auth via nginx auth_request
Some checks failed
Deploy with Docker Compose / deploy (push) Has been cancelled
Add ValidateAdmin endpoint that checks JWT admin claim for use as an
nginx auth_request subrequest. Widen cookie path from backend endpoint
to "/" so the access_token is sent on all paths. Extend access token
lifetime from 24h to 7 days. Disable hasura service by default via
Docker profile.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 21:33:41 +01:00
4edc5b1b22 Remove uptime-kuma and wallabag services, fix searxng base URL
Some checks failed
Deploy with Docker Compose / deploy (push) Failing after 1s
Remove unused uptime-kuma and wallabag services from docker-compose,
nginx configs, and vite proxy. Use BASE_URL env var in searxng
settings template instead of hardcoded URL.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 13:37:24 +01:00
6edca785ff Fix proxy_pass path stripping for wallabag and uptime-kuma
Add trailing slash to proxy_pass so nginx strips the subpath prefix
before forwarding requests to the upstream containers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 13:10:41 +01:00
a967a249c2 Add base url to new containers
Some checks failed
Deploy with Docker Compose / deploy (push) Failing after 0s
2026-04-07 12:57:16 +01:00
108f58e527 Add UptimeKuma, Searxng, Wallabag services
Some checks failed
CI/CD / Deploy (push) Has been cancelled
CI/CD / Build Frontend (push) Has been cancelled
CI/CD / Build & Test Backend (push) Has been cancelled
Deploy with Docker Compose / deploy (push) Has been cancelled
- Add uptime-kuma, searxng, and wallabag Docker services with Postgres integration for wallabag
- Add nginx reverse proxy location blocks for /uptime-kuma/, /searxng/, /wallabag/ in both prod and dev templates
- Update entrypoint.sh envsubst to include new HOST/PORT vars
- Add Vite dev proxy entries for all three services
- Update gitea-runner config: add self-hosted label and allow all volumes
- Add Gitea CI/CD workflow

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 12:14:56 +01:00
b6623de23a Add Quartz service for serving Obsidian notes at /notes/
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 2m28s
Replaces the custom Go/Vue notes system with Quartz v4, a polished
static site generator for Obsidian vaults. Mounts OBSIDIAN_DIR as the
Quartz content directory and serves it at /notes/ with hot-reload via
`npx quartz build --serve`.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 13:27:10 +01:00
d215333128 Add admin UI for managing radio fallback music
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 3m44s
Upload, list, and delete fallback music files from the admin page.
Backend handlers validate file type/size and prevent path traversal.
Nginx max body size increased to 50M to support large audio files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 16:19:10 +01:00
75cede3b1b Fix security vulnerabilities across backend, frontend, and infra
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 4m44s
- Fix auth bypass in UpdatePost/DeletePost (missing return after auth check)
- Remove Spotify access token from callback response
- Replace internal error messages with generic responses in all handlers
- Harden GraphQL: complexity limit, disable playground/introspection in prod
- Add security headers (X-Frame-Options, HSTS, etc.) to nginx
- Disable Hasura console/dev mode in production
- Add DOMPurify sanitization to Markdown component
- Fix cookie removal to use correct domain/path from auth config
- Fix nil dereference in rowing handler when Claude API errors
- Fix wildcard CORS on stamp endpoint
- Pin nginx and certbot Docker image versions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 23:59:10 +01:00
091bfcaef6 Add Hasura GraphQL Engine container with nginx proxy
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 1m31s
Adds Hasura v2.44.0 service connected to the existing Postgres database,
proxied through nginx at /hasura/ with WebSocket support for the console.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 20:06:19 +01:00
3c9d19d185 Improve PageSpeed accessibility, SEO, and performance scores
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 34s
Add alt attributes, width/height for CLS, aria-labels, meta description,
preconnect hints, LCP fetchpriority, and sound/stamp cache headers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 02:38:08 +00:00
474f14b1e5 Add performance optimizations: gzip, cache headers, WOFF2 fonts, lazy loading
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 38s
Enable gzip compression in nginx, add cache-control headers for static assets,
convert fonts to WOFF2 with font-display swap, preload fonts, add lazy loading
to below-fold images, and remove unused font files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 02:29:37 +00:00
8e50537333 Get AI to fix vunerabilities in site
Some checks failed
Deploy with Docker Compose / deploy (push) Has been cancelled
2026-03-09 14:12:29 +00:00
4c396ef30f Add file upload to website and integrate into chat
Some checks failed
Deploy with Docker Compose / deploy (push) Has been cancelled
2026-03-09 13:47:38 +00:00
4a65836210 Make chat component look nicer and upgrade websocket connection
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 1m47s
2026-03-05 19:51:33 +00:00
b506bae515 fix gitea 2026-02-16 13:57:28 +00:00
11ad0b5a83 reverse proxy to gitea 2026-02-16 13:21:11 +00:00
13dbe43c78 cheaper logging 2026-01-25 16:09:25 +00:00
96455968a6 cheaper logging 2026-01-25 16:08:41 +00:00
cd53ea3544 cheaper logging 2026-01-25 16:07:43 +00:00
edfaf304cf fix nginx logs 2026-01-25 16:03:53 +00:00
605ac37b8a fix access log nginx 2026-01-25 15:59:20 +00:00
6ebb9982e4 exact match 2026-01-20 20:51:06 +00:00
8bcd37cf68 adding robots.txt 2026-01-20 20:43:36 +00:00
54e78076a8 allow gif sharing 2026-01-18 13:45:27 +00:00
75d1d259a4 remove = idk if this is a bad idea 2026-01-18 13:26:42 +00:00
bf574fa34f adding endpoint reference 2025-11-30 01:40:32 +00:00
d448eeff90 404 page 2025-11-25 22:41:29 +00:00
4b91dd27ce remove rerouting 2025-11-25 17:57:23 +00:00
a851897a62 moving fonts 2025-11-25 17:51:34 +00:00
ee9dab77ea fix proxy 2025-11-24 16:59:03 +00:00
5589bf60ab adding icecast reverse proxy 2025-11-24 14:13:10 +00:00
491c591c3c rerouting api 2025-11-22 11:28:56 +00:00
2ddc3a6084 adding mjs mime support 2025-11-21 22:59:43 +00:00
d05951c267 added cert to other https 2025-11-21 12:46:08 +00:00
841fcb6be3 redirect to www. https 2025-11-21 12:39:36 +00:00
df2beb7b1d adding backend port env var to nginx 2025-11-20 22:13:58 +00:00
d8aa357414 multiple configs depending on wether or not we have cert 2025-11-20 21:46:20 +00:00
635dca16b9 reshuffle, not a big deal 2025-11-20 20:43:13 +00:00
6eeee752d3 fixed routing behaviour 2025-11-20 20:39:21 +00:00
9534678dba moving to environment variables 2025-11-20 19:51:15 +00:00