fix(oidc): klare Meldung bei einem OIDC_ISSUER ohne Schema

OIDC_ISSUER=PocketID (der Name statt der Adresse) endete in
unsupported protocol scheme "" – tief aus der Bibliothek, ohne Hinweis
auf die Ursache. Und weil ein Fehlschlag hier den Start abbricht, stand
die ganze Cloud wegen einer Zeile in der .env.

Jetzt wird vorher geprueft und die Zeile beim Namen genannt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
HoneyandClaude Opus 5 committed 2026-08-24 13:01:21 +02:00
1 parent ebff565367
commit 617c665a2e
3 files changed
+17 -4

No files matched your search

+3 -2
View File
@@ -44,8 +44,9 @@ ADMIN_USERNAME=admin
ADMIN_PASSWORD=
# ── Anmeldung über einen Identitätsanbieter (optional) ───────────────────────
# Leerer OIDC_ISSUER = aus.
OIDC_ISSUER=
# Leerer OIDC_ISSUER = aus. Sonst die vollständige Adresse des Anbieters –
# nicht seinen Namen. Falsch gesetzt bricht der Start ab.
OIDC_ISSUER= # z. B. https://id.example.com
OIDC_CLIENT_ID=aether
OIDC_CLIENT_SECRET=
# Muss exakt <PUBLIC_URL>/api/v1/auth/oidc/callback sein.
+13 -1
View File
@@ -7,6 +7,7 @@ import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"strings"
gooidc "github.com/coreos/go-oidc/v3/oidc"
@@ -46,9 +47,20 @@ func New(ctx context.Context, cfg Config, authStore *auth.Store, sessions *auth.
if cfg.Issuer == "" {
return nil, nil
}
// Erst prüfen, ob überhaupt eine Adresse dasteht. Sonst hängt der Fehler
// tief in der Bibliothek: `unsupported protocol scheme ""` sagt nicht,
// dass jemand den *Namen* des Anbieters eingetragen hat statt seiner URL.
// Und weil ein Fehlschlag hier den Start abbricht, steht die ganze Cloud
// wegen einer Zeile in der .env – dann soll die Zeile wenigstens genannt
// werden. (Gemessen mit OIDC_ISSUER=PocketID.)
if u, uerr := url.Parse(cfg.Issuer); uerr != nil || u.Scheme == "" || u.Host == "" {
return nil, fmt.Errorf(
"OIDC_ISSUER muss die vollstaendige Adresse des Anbieters sein, "+
"z. B. https://id.example.com – gefunden: %q", cfg.Issuer)
}
provider, err := gooidc.NewProvider(ctx, cfg.Issuer)
if err != nil {
return nil, fmt.Errorf("oidc provider: %w", err)
return nil, fmt.Errorf("oidc provider %q nicht erreichbar: %w", cfg.Issuer, err)
}
oauthCfg := &oauth2.Config{
ClientID: cfg.ClientID,
+1 -1
View File
@@ -50,7 +50,7 @@ ADMIN_PASSWORD=changeme_strong_admin_password
# ── OIDC (optional) ───────────────────────────────────────────────────────────
# Leerer OIDC_ISSUER = aus. OIDC_REDIRECT_URL muss exakt
# <PUBLIC_URL>/api/v1/auth/oidc/callback sein und beim Anbieter eingetragen.
# OIDC_ISSUER=https://your-idp.example.com
# OIDC_ISSUER=https://your-idp.example.com # Adresse, nicht der Name
# OIDC_CLIENT_ID=aether
# OIDC_CLIENT_SECRET=
# OIDC_REDIRECT_URL=https://cloud.example.com/api/v1/auth/oidc/callback