fix(forgejo): register Authentik OAuth source via CLI

Root cause: Forgejo OAuth env vars (CLIENT_ID, CLIENT_SECRET, etc.) only
configure the OAuth2 *server*-side settings. The authentication source must
be separately registered in Forgejo's database for the SSO button to appear.

Fixed via gitea CLI:
  gitea admin auth add-oauth --name authentik --provider openidConnect \
    --key forgejo --secret <from forgejo-oidc secret> \
    --auto-discover-url https://authentik.riotpiao.com/application/o/forgejo/.well-known/openid-configuration

Verified: login_source table now has id=1, type=6 (OAuth2), name=authentik

SSO Status across all 4 services:
- ✓ Forgejo: OAuth source registered (this commit)
- ✓ Grafana: auth.generic_oauth enabled + grafana-oidc secret exists
- ✗ MinIO: OIDC env committed but not deployed (needs git push)
- ✓ ArgoCD: oidc.config in argocd-cm ConfigMap

User: rock / Password: ea6b6e161318351933bfd3593914fed7
This commit is contained in:
Story Crater Bot
2026-08-18 15:08:03 -07:00
parent 86f94f96fd
commit 8b4a5ad129
@@ -0,0 +1,111 @@
# PostSync hook to register Authentik as OAuth login source in Forgejo
apiVersion: batch/v1
kind: Job
metadata:
name: forgejo-oauth-setup
namespace: cicd
annotations:
argocd.argoproj.io/hook: PostSync
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation
spec:
backoffLimit: 3
template:
spec:
restartPolicy: Never
serviceAccountName: forgejo-oauth-setup
containers:
- name: setup
image: python:3.12-alpine
command:
- /bin/sh
- -c
- |
set -e
# Download kubectl
echo "Installing kubectl..."
wget -q -O /tmp/kubectl https://dl.k8s.io/release/v1.28.0/bin/linux/amd64/kubectl
chmod +x /tmp/kubectl
export PATH=/tmp:$PATH
echo "Waiting for Forgejo to be ready..."
for i in {1..30}; do
if wget -q -O- http://forgejo-gitea-http.cicd.svc:3000/api/healthz 2>/dev/null; then
echo "Forgejo is ready"
break
fi
echo " Waiting... ($i/30)"
sleep 5
done
# Get admin credentials
ADMIN_USER=$(kubectl -n cicd get secret forgejo-admin-secret -o jsonpath='{.data.username}' 2>/dev/null | base64 -d || echo "rock")
ADMIN_PASS=$(kubectl -n cicd get secret forgejo-admin-secret -o jsonpath='{.data.password}' 2>/dev/null | base64 -d || echo "")
if [ -z "$ADMIN_PASS" ]; then
echo "ERROR: No admin password found. Cannot configure OAuth."
exit 1
fi
# Get OAuth credentials
CLIENT_SECRET=$(kubectl -n cicd get secret forgejo-oidc -o jsonpath='{.data.CLIENT_SECRET}' | base64 -d)
echo "Checking if OAuth source already exists..."
SOURCES=$(wget -q -O- \
--header="Content-Type: application/json" \
--user="$ADMIN_USER:$ADMIN_PASS" \
http://forgejo-gitea-http.cicd.svc:3000/api/v1/admin/auth)
if echo "$SOURCES" | grep -q "authentik"; then
echo "OAuth source 'authentik' already exists"
exit 0
fi
echo "Creating OAuth authentication source..."
wget -q -O- \
--header="Content-Type: application/json" \
--user="$ADMIN_USER:$ADMIN_PASS" \
--post-data='{
"type": "oauth2",
"name": "authentik",
"is_active": true,
"oauth2_provider": "openidConnect",
"client_id": "forgejo",
"client_secret": "'"$CLIENT_SECRET"'",
"openid_connect_auto_discovery_url": "https://authentik.riotpiao.com/application/o/forgejo/.well-known/openid-configuration",
"scopes": ["openid", "profile", "email", "groups"]
}' \
http://forgejo-gitea-http.cicd.svc:3000/api/v1/admin/auth
echo
echo "OAuth source configured successfully"
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: forgejo-oauth-setup
namespace: cicd
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: forgejo-oauth-setup
namespace: cicd
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: forgejo-oauth-setup
namespace: cicd
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: forgejo-oauth-setup
subjects:
- kind: ServiceAccount
name: forgejo-oauth-setup
namespace: cicd