feat(gitea): require sign-in to read anything; Flux and CI authenticate first #175
Open
gitea-admin
wants to merge 1 commits from
feat/gitea-require-signin into main
pull from: feat/gitea-require-signin
merge into: Home-Network:main
Home-Network:main
Home-Network:fix/bound-var-ephemeral-caches
Home-Network:renovate/ghcr.io-renovatebot-renovate-44.x
Home-Network:feat/vuln-visibility
Home-Network:chore/adopt-spec-sync
Home-Network:fix/wg-client-mtu-docs
Home-Network:fix/wg-home-peer-pihole-sources
Home-Network:feat/pihole-explicit-lan-names
Home-Network:feat/dns-via-cloudflare-tunnel
Home-Network:feature/cloudflare-tunnel-config
Home-Network:chore/rotate-cloudflared-tunnel
Home-Network:fix/cloudflared-creds-permission
Home-Network:feat/cloudflare-tunnel
Home-Network:feat/parallel-l0-checks
Home-Network:feat/gate-toolbox-container
Home-Network:fix/keycloak-servicemonitor-owner
Home-Network:feat/runner-capacity-2
Home-Network:chore/renovate-config-cleanup
Home-Network:fix/keycloak-operator-crds
Home-Network:feat/devcontainer-velero-cli
Home-Network:feat/gitea-28
Home-Network:feat/l0-externaldns-annotation-prefix
Home-Network:fix/public-dns-wan-a-record
Home-Network:feat/pm-agent-pr-mentions
Home-Network:docs/source-comment-audit
Home-Network:chore/pm-agent-digest-99
Home-Network:fix/pm-agent-triage-exit
Home-Network:chore/pm-agent-go-live
Home-Network:chore/pm-agent-runner-digest
Home-Network:feature/pm-agent-credentials
Home-Network:feat/pm-agent-registry-pull-secret
Home-Network:feat/pin-pihole-jackett-plex
Home-Network:fix/renovate-hold-auth-and-self
Home-Network:feat/renovate-track-keycloak-operator
Home-Network:fix/renovate-run-hygiene
Home-Network:fix/renovate-auth
Home-Network:fix/renovate-first-run
Home-Network:feat/keycloak-passkey-reconcile
Home-Network:fix/gitea-admit-buildkit
Home-Network:feat/image-pipeline
Home-Network:fix/renovate-config-filename
Home-Network:fix/vpn-ingress-l2-lease-collision
Home-Network:fix/renovate-cron-window
Home-Network:fix/renovate-invalid-config
Home-Network:fix/pihole-local-ttl
Home-Network:fix/unattended-upgrades-debian-sentinel
Home-Network:fix/ha-check-catastrophic-regex
Home-Network:feat/automated-upgrades
Home-Network:fix/coredns-ha
Home-Network:feat/keycloak-passkeys
Home-Network:fix/oauth2-proxy-oidc-startup-race
Home-Network:feat/graceful-cluster-shutdown
Home-Network:plex/volume-expamsion
Home-Network:fix/bulk-nfs-truenas
Home-Network:fix/peers-configmap-content-hash
Home-Network:vpn/add-keith-phone
Home-Network:fix/new-peer-ignores-template-comments
Home-Network:fix/vpn-ingress-ip-forward
Home-Network:feature/add-private-key-for-wireguard
Home-Network:fix/vpn-server-key-in-sops
Home-Network:docs/pm-agent-registry-pull-prereq
Home-Network:fix/vpn-runbook-ansible-command
Home-Network:feat/pm-agent-issue-to-pr
Home-Network:docs/agents-work-in-their-own-workspace
Home-Network:feat/vpn-remote-access-wireguard
Home-Network:feat/cilium-roll-out-on-config-change
Home-Network:docs/oauth2-sidecar-scrape-verified
Home-Network:fix/plex-resolver-independent-advertise
Home-Network:fix/plex-unblock-app-tier
Home-Network:feat/hubble-flow-export-plex
Home-Network:fix/oauth2-sidecar-metrics-scrape-netpol
Home-Network:feat/plex-vip-hostname-and-lan-networks
Home-Network:fix/plex-advertise-plexdirect
Home-Network:docs/pihole-ha-verified
Home-Network:feat/pihole-multi-replica
Home-Network:feat/pihole-declare-state
Home-Network:feat/plex-remote-access-l4
Home-Network:fix/cilium-cgroup-hostroot
Home-Network:fix/node-keycloak-hosts-pin
Home-Network:feat/public-dns-wan-target
Home-Network:fix/plex-quicksync-verification
Home-Network:sync-39-onto-main
Home-Network:fix/admin-approval-override
Home-Network:feat/quicksync-via-device-plugin
Home-Network:bugfix/arr-to-plex
Home-Network:feat/oauth2-proxy-api-route-per-app
Home-Network:feat/intel-gpu-device-plugin
Home-Network:feat/oauth2-proxy-auth-failure-visible
Home-Network:fix/render-selftest-runs-in-gate
Home-Network:feat/plex-quicksync
Home-Network:feat/sd-hardware-capability
Home-Network:fix/jackett-oauth2-proxy-session
Home-Network:feat/node-health-render-device
Home-Network:fix/oauth2-proxy-cookie-collision-fleet
Home-Network:fix/flux-deploy-notification-inhibited
Home-Network:feat/flux-deploy-notifications
Home-Network:feat/conformance-job-template
Home-Network:feat/conformance-trigger-kubeconfig
Home-Network:feat/conformance-runner-image
Home-Network:fix/crafty-oauth2-proxy-signin
Home-Network:chore/decisions-log-conflict-free
Home-Network:fix/crafty-bedrock-19132
Home-Network:fix/gitea-settings-comment-names-impossible-secret
Home-Network:feat/ci-is-the-approver
Home-Network:fix/kyverno-policy-was-never-applied
Home-Network:docs/handoff-2026-09-29
Home-Network:fix/secret-name-and-require-gitea-settings
Home-Network:feat/conformance-trigger-admission-boundary
Home-Network:fix/cluster-available-would-fake-a-green
Home-Network:feat/gitea-settings-drift-check
Home-Network:fix/gitea-admins-could-override-the-gate
Home-Network:docs/close-out-ci-hardening
Home-Network:docs/ci-reality-vs-phase-0
Home-Network:docs/runbooks-pr-flow
Home-Network:fix/dind-native-sidecar
Home-Network:fix/gate-push-trigger-matches-feat-prefix
Home-Network:feat/plex-claim-token-013124
Home-Network:fix/conformance-context-is-fail-open
Home-Network:docs/ci-delivery-flow-for-agents
Home-Network:feat/plex-claim-sops-secret
Home-Network:feat/prod-hardening
Home-Network:prod/deliver-fixes
Home-Network:docs/memattr-6-12-backport
Home-Network:migration/dns-apex-inversion
Home-Network:feat/prod-memattr-and-nodes
Home-Network:docs/node2-memory-refine
Home-Network:feat/prod-node-2
Home-Network:feat/r-state-03-proven
Home-Network:feat/ledger-section-parsing
Home-Network:feat/conformance-run-ledger
Home-Network:chore/cilium-split-merge2
Home-Network:feat/cilium-own-kustomization
Home-Network:docs/poststart-incident
Home-Network:fix/poststart-exit-status
Home-Network:fix/strict-postbuild-substitutions
Home-Network:docs/phase-7-open-prod-node-1
Home-Network:rescued/fix/act-runner-dind-readiness
Home-Network:rescued/fix/node-dns-resilient-upstream
Home-Network:docs/reconcile-with-reality
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
DO NOT MERGE until operator steps 1–3 below are done
This PR makes
gitea.<domain>require a login to read anything. The operator decided this on2026-11-14. Gitea stays public, but anonymous crawlers have kept the pod at 2–6 cores since #156.
Mechanism. The fix uses Gitea's own setting rather than an oauth2-proxy gate.
GITEA__service__REQUIRE_SIGNIN_VIEW=trueis the strict mode. It refuses anonymous web pages, APIcalls, git clone/fetch and container-registry pulls. People sign in through the existing Keycloak
OIDC source. An oauth2-proxy gate would break git, API, registry and runner clients, which need a
401 rather than a 302.
robots.txt(Disallow: /) is written by the postStart hook as defence indepth.
Files
catalog/gitea.yamland the re-renderedapps/wave-0/gitea.yaml: the env var and the robots.txtwrite.
clusters/prod/kustomization.yaml: theflux-systemGitRepository getssecretRef: flux-gitea-read. This Secret is out-of-band, likesops-age..gitea/workflows/gate.ymland.gitea/workflows/cve-triage.yaml: the toolbox job image waspulled anonymously from the Gitea registry. It now uses
container.credentialswith theexisting
RENOVATE_TOKEN, whoseread:packagescope renovate.yaml's preflight proves.decisions/2026-11-14-gitea-require-signin.md: the full anonymous-reader inventory, operatorsteps and gaps.
Anonymous readers found (live, read-only)
secretRef. Needs a NEW read token (operator)credentials:RENOVATE_TOKEN (this PR)credentials:RENOVATE_TOKEN (this PR)conformance-git-readonlySecret becomes mandatory once wiredAlready authenticated, so unaffected: Renovate, pm-agent (token and pull secret), images.yaml
(push token; PRs build the base in-run), the actions/checkout job token, the act_runner
registration, and workstations. vuln-scanner treats the Gitea registry as private and never pulls
from it. There are zero image-automation objects, no
registries.yaml, and no probes orServiceMonitor on Gitea.
Operator steps, in order
read:repositoryonly, on a non-admin account (a dedicatedflux-reader, orrenovate-bot).flux-system/flux-gitea-readwith keysusernameandpassword(the token), out-of-band.The exact commands are in the handoff file.
git ls-remote, and check the Secret's key names (commands in the handoff)./approve-override <reason>as a PR review. This PR touches the sensitive pathsclusters/**and.gitea/**. The agent did not and will not post it.get 401/403, and
/robots.txtshould return 200.If step 2 is missed, the source stalls with "secret not found", and that blocks any revert too.
Recovery is step 2 itself.
Spec conflicts (the spec repo was not modified)
premise is now false for anonymous readers.
auth.groups: [platform-admins]is not required by the Gitea auth source.It only maps that group to admin. Any homelab-realm user can sign in and read. This matches the
operator's "Keycloak login", but enforcing the group would need
--required-claim-*on thesource. Not done here (lock-out risk). It is the architect's or operator's call.
Gate (toolbox, from the worktree, on committed HEAD
b855b6b)rc 3, UNDETERMINED. The gate printed:
Stages that did not run: gitea-settings.spec-immutability, lint, l0, render-golden, l1 and decisions-log passed. L2/L3 conformance SKIPPED
(no cluster). approval-policy is N/A offline and will be red in CI until the override is
posted.
Not verified
Nothing is deployed. The Gitea behaviour was checked against upstream
mainsource, not the 28.3.0tag. Two auth paths are unproven. On a warm DinD cache the job-image
credentialsauth is notexercised. The Flux token does not exist yet. Whether the robots.txt write succeeds is not observed.
Whether crawler CPU actually drops is not observed. Details are in the handoff.
🤖 Generated with Claude Code
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.