1
0
mirror of https://github.com/juanfont/headscale.git synced 2025-09-25 17:51:11 +02:00

Fix: Populate user name from email prefix if OIDC username is invalid

This commit is contained in:
Sirius 2025-05-28 18:51:32 +09:00
parent b8044c29dd
commit 243112bc6e
No known key found for this signature in database

View File

@ -314,15 +314,32 @@ type OIDCUserInfo struct {
// FromClaim overrides a User from OIDC claims.
// All fields will be updated, except for the ID.
func (u *User) FromClaim(claims *OIDCClaims) {
err := util.ValidateUsername(claims.Username)
if err == nil {
u.Name = claims.Username
} else {
log.Debug().Err(err).Msgf("Username %s is not valid", claims.Username)
var assignedName bool
if claims.Username != "" {
err := util.ValidateUsername(claims.Username)
if err == nil {
u.Name = claims.Username
assignedName = true
} else {
log.Debug().Err(err).Msgf("OIDC claims.Username %s is not valid", claims.Username)
}
}
if !assignedName && claims.Email != "" {
emailPrefix := strings.Split(claims.Email, "@")[0]
if emailPrefix != "" {
err := util.ValidateUsername(emailPrefix)
if err == nil {
// Ensure uniqueness of the extracted email prefix if it's to be used as a primary username.
u.Name = emailPrefix
} else {
log.Debug().Err(err).Msgf("Extracted email prefix %s is not a valid username", emailPrefix)
}
}
}
if claims.EmailVerified {
_, err = mail.ParseAddress(claims.Email)
_, err := mail.ParseAddress(claims.Email)
if err == nil {
u.Email = claims.Email
}