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)
| 324 | // ImportFromEnv handles POST /api/v1/auth/oidc/settings/import-from-env. |
| 325 | // Copies OIDC config from env vars to the database. |
| 326 | func (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 |
nothing calls this directly
no test coverage detected