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:
1 parent
ebff565367
commit
617c665a2e
3 files changed
+17
-4
No files matched your search
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user