feat(gitsync): webhook-triggad synk + helt manuellt läge
All checks were successful
build-and-push / build (push) Successful in 1m7s

- POST /api/git-hook: HMAC-SHA256-verifierad (X-Gitea-Signature),
  reagerar bara på pushar till live-grenen, svarar 202 och synkar async
- webhook-hemlighet genereras server-side (headless via config.json),
  roteras med gitRegenerateWebhookSecret
- auto_sync_minutes=0 + webhook av ⇒ ingen automatisk hämtning alls;
  webhook på ⇒ catch-up-synk vid uppstart (missade event)
- admin-UI: webhook-toggle, target-URL + secret med copy/rotate

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-02 23:52:01 +02:00
parent 9854d85237
commit 5819a6bdce
7 changed files with 236 additions and 7 deletions

View File

@@ -279,6 +279,14 @@ ticker). Admin-UI: `frontend/src/components/GitSyncSection.vue` med
- **Reset från remote:** tvingar lokala grenen att matcha remoten; lokalt
läge sparas alltid först i en backup-gren (`backup/<timestamp>`). Används
också för bootstrap när historikerna är orelaterade (`UNRELATED_HISTORIES`).
- **Webhook** (`webhook_enabled`/`webhook_secret`): git-värden kan trigga
synk direkt vid push via `POST /api/git-hook` i stället för (eller utöver)
intervall-pollning. Anropet verifieras med HMAC-SHA256 över råa bodyn
(Giteas `X-Gitea-Signature`); hemligheten genereras server-side och roteras
med `gitRegenerateWebhookSecret`. Endast pushar till live-grenen triggar;
vid uppstart görs en catch-up-synk (event som missats medan servern var
nere). Med `auto_sync_minutes: 0` **och** webhook av sker ingen automatisk
hämtning alls.
- **Headless-konfiguration:** allt kan sättas via `config.json`-sektionen
`git_sync` + omstart, eller via GraphQL-mutationen `updateGitSync` — inget
webbgui krävs.
@@ -293,7 +301,7 @@ ticker). Admin-UI: `frontend/src/components/GitSyncSection.vue` med
- `public_url` — extern bas-URL (t.ex. `https://archivum.brasse-pc.eu`), används
för att härleda OIDC-redirect-URI
- `git_sync` — se avsnittet ovan: `enabled`, `remote_url`, `live_branch`,
`read_only`, `auto_sync_minutes`
`read_only`, `auto_sync_minutes`, `webhook_enabled`, `webhook_secret`
- `oidc` — valfri OIDC/SSO-konfiguration (Authentik):
- `enabled`, `issuer`, `client_id`, `client_secret`, `redirect_url`
- `groups_claim` (default `groups`), `username_claim` (default `preferred_username`)