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:
parent
b8044c29dd
commit
243112bc6e
@ -314,15 +314,32 @@ type OIDCUserInfo struct {
|
|||||||
// FromClaim overrides a User from OIDC claims.
|
// FromClaim overrides a User from OIDC claims.
|
||||||
// All fields will be updated, except for the ID.
|
// All fields will be updated, except for the ID.
|
||||||
func (u *User) FromClaim(claims *OIDCClaims) {
|
func (u *User) FromClaim(claims *OIDCClaims) {
|
||||||
|
var assignedName bool
|
||||||
|
if claims.Username != "" {
|
||||||
err := util.ValidateUsername(claims.Username)
|
err := util.ValidateUsername(claims.Username)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
u.Name = claims.Username
|
u.Name = claims.Username
|
||||||
|
assignedName = true
|
||||||
} else {
|
} else {
|
||||||
log.Debug().Err(err).Msgf("Username %s is not valid", claims.Username)
|
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 {
|
if claims.EmailVerified {
|
||||||
_, err = mail.ParseAddress(claims.Email)
|
_, err := mail.ParseAddress(claims.Email)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
u.Email = claims.Email
|
u.Email = claims.Email
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user