feat(oidc): show profile pic if present (#2006)

* feat(oidc): fetch profile picture

* small imprvements

* Add link to provider

* fix(rightnav): add cursor-pointer on hover

* adjust picture border and layout in RightNav and Account components

* cleanup

* oidc claims struct

* check if profile_picture exists

* simplify profile picture error handling

* adhere to autobrr log style

* fix: remove unused imports

---------

Co-authored-by: ze0s <43699394+zze0s@users.noreply.github.com>
This commit is contained in:
soup 2025-04-13 17:45:30 +02:00 committed by GitHub
parent a8c4114d6d
commit 1c23b5df57
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 147 additions and 48 deletions

View file

@ -217,6 +217,10 @@ func (h authHandler) validate(w http.ResponseWriter, r *http.Request) {
"auth_method": session.Values["auth_method"],
}
if profilePicture, ok := session.Values["profile_picture"].(string); ok && profilePicture != "" {
response["profile_picture"] = profilePicture
}
h.encoder.StatusResponse(w, http.StatusOK, response)
return
}
@ -279,7 +283,7 @@ func (h authHandler) handleOIDCCallback(w http.ResponseWriter, r *http.Request)
return
}
username, err := h.oidcHandler.HandleCallback(w, r)
claims, err := h.oidcHandler.HandleCallback(w, r)
if err != nil {
h.encoder.StatusError(w, http.StatusUnauthorized, errors.Wrap(err, "OIDC authentication failed"))
return
@ -288,7 +292,7 @@ func (h authHandler) handleOIDCCallback(w http.ResponseWriter, r *http.Request)
// Create new session
session, err := h.cookieStore.Get(r, "user_session")
if err != nil {
h.log.Error().Err(err).Msgf("Auth: Failed to create cookies with attempt username: [%s] ip: %s", username, r.RemoteAddr)
h.log.Error().Err(err).Msgf("Auth: Failed to create cookies with attempt username: [%s] ip: %s", claims.Username, r.RemoteAddr)
h.encoder.StatusError(w, http.StatusInternalServerError, errors.New("could not create cookies"))
return
}
@ -296,8 +300,12 @@ func (h authHandler) handleOIDCCallback(w http.ResponseWriter, r *http.Request)
// Set user as authenticated
session.Values["authenticated"] = true
session.Values["created"] = time.Now().Unix()
session.Values["username"] = username
session.Values["username"] = claims.Username
session.Values["auth_method"] = "oidc"
if claims.Picture != "" {
session.Values["profile_picture"] = claims.Picture
h.log.Debug().Str("profile_picture", claims.Picture).Msg("storing profile picture URL in session")
}
// Set cookie options
session.Options.HttpOnly = true