MCPcopy Create free account
hub / github.com/PatchMon/PatchMon / ImportFromEnv

Method ImportFromEnv

server-source-code/internal/handler/oidc.go:326–387  ·  view source on GitHub ↗

ImportFromEnv handles POST /api/v1/auth/oidc/settings/import-from-env. Copies OIDC config from env vars to the database.

(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

324// ImportFromEnv handles POST /api/v1/auth/oidc/settings/import-from-env.
325// Copies OIDC config from env vars to the database.
326func (h *OidcHandler) ImportFromEnv(w http.ResponseWriter, r *http.Request) {
327 if h.settings == nil {
328 Error(w, http.StatusServiceUnavailable, "Settings not available")
329 return
330 }
331 if !config.ConfiguredViaEnv(h.cfg) {
332 Error(w, http.StatusBadRequest, "OIDC is not configured via .env")
333 return
334 }
335 s, err := h.settings.GetFirst(r.Context())
336 if err != nil {
337 Error(w, http.StatusInternalServerError, "Failed to load settings")
338 return
339 }
340 // Copy env values to settings
341 s.OidcEnabled = h.cfg.OidcEnabled
342 s.OidcIssuerURL = strOrNil(strings.TrimSpace(h.cfg.OidcIssuerURL))
343 s.OidcClientID = strOrNil(strings.TrimSpace(h.cfg.OidcClientID))
344 s.OidcRedirectURI = strOrNil(strings.TrimSpace(h.cfg.OidcRedirectURI))
345 scopes := strings.TrimSpace(h.cfg.OidcScopes)
346 if scopes == "" {
347 scopes = "openid email profile groups"
348 }
349 s.OidcScopes = &scopes
350 s.OidcButtonText = strPtr(strings.TrimSpace(h.cfg.OidcButtonText))
351 if s.OidcButtonText == nil || *s.OidcButtonText == "" {
352 t := "Login with SSO"
353 s.OidcButtonText = &t
354 }
355 s.OidcAutoCreateUsers = h.cfg.OidcAutoCreateUsers
356 defRole := strings.TrimSpace(h.cfg.OidcDefaultRole)
357 if defRole == "" {
358 defRole = "user"
359 }
360 s.OidcDefaultRole = &defRole
361 s.OidcDisableLocalAuth = h.cfg.OidcDisableLocalAuth
362 s.OidcSyncRoles = h.cfg.OidcSyncRoles
363 s.OidcAdminGroup = strOrNil(strings.TrimSpace(h.cfg.OidcAdminGroup))
364 s.OidcSuperadminGroup = strOrNil(strings.TrimSpace(h.cfg.OidcSuperadminGroup))
365 s.OidcHostManagerGroup = strOrNil(strings.TrimSpace(h.cfg.OidcHostManagerGroup))
366 s.OidcReadonlyGroup = strOrNil(strings.TrimSpace(h.cfg.OidcReadonlyGroup))
367 s.OidcUserGroup = strOrNil(strings.TrimSpace(h.cfg.OidcUserGroup))
368 s.OidcEnforceHTTPS = h.cfg.OidcEnforceHTTPS
369 if secret := strings.TrimSpace(h.cfg.OidcClientSecret); secret != "" && h.enc != nil {
370 encrypted, err := h.enc.Encrypt(secret)
371 if err == nil {
372 s.OidcClientSecret = &encrypted
373 }
374 }
375 if err := h.settings.Update(r.Context(), s); err != nil {
376 Error(w, http.StatusInternalServerError, "Failed to import OIDC settings")
377 return
378 }
379 h.reinitOidcClient(r.Context())
380 secretSet := false
381 if s.OidcClientSecret != nil && *s.OidcClientSecret != "" && h.enc != nil {
382 _, err := h.enc.Decrypt(*s.OidcClientSecret)
383 secretSet = err == nil

Callers

nothing calls this directly

Calls 11

reinitOidcClientMethod · 0.95
ErrorFunction · 0.85
strOrNilFunction · 0.85
buildOidcCallbackURLFunction · 0.85
oidcSettingsResponseFunction · 0.85
GetFirstMethod · 0.80
EncryptMethod · 0.80
DecryptMethod · 0.80
strPtrFunction · 0.70
JSONFunction · 0.70
UpdateMethod · 0.45

Tested by

no test coverage detected