Files
photoprism/internal/auth/oidc/username.go
Michael Mayer c970511c82 OIDC: Upgrade "zitadel/oidc" from v1 to v2 #782
Signed-off-by: Michael Mayer <michael@photoprism.app>
2024-07-06 11:15:23 +02:00

57 lines
1.9 KiB
Go

package oidc
import (
"github.com/zitadel/oidc/v2/pkg/oidc"
"github.com/photoprism/photoprism/pkg/authn"
"github.com/photoprism/photoprism/pkg/clean"
)
// Username returns the preferred username based on the userinfo and the preferred username OIDC claim.
func Username(userInfo *oidc.UserInfo, preferredClaim string) (userName string) {
switch preferredClaim {
case authn.ClaimName:
if name := clean.Handle(userInfo.Name); len(name) > 0 {
userName = name
} else if name = clean.Handle(userInfo.PreferredUsername); len(name) > 0 {
userName = name
} else if name = clean.Handle(userInfo.Nickname); len(name) > 0 {
userName = name
} else if name = clean.Email(userInfo.Email); userInfo.EmailVerified && len(name) > 4 {
userName = name
}
case authn.ClaimNickname:
if name := clean.Handle(userInfo.Nickname); len(name) > 0 {
userName = name
} else if name = clean.Handle(userInfo.PreferredUsername); len(name) > 0 {
userName = name
} else if name = clean.Handle(userInfo.Name); len(name) > 0 {
userName = name
} else if name = clean.Email(userInfo.Email); userInfo.EmailVerified && len(name) > 4 {
userName = name
}
case authn.ClaimEmail:
if name := clean.Email(userInfo.Email); userInfo.EmailVerified && len(name) > 4 {
userName = name
} else if name = clean.Handle(userInfo.PreferredUsername); len(name) > 0 {
userName = name
} else if name = clean.Handle(userInfo.Name); len(name) > 0 {
userName = name
} else if name = clean.Handle(userInfo.Nickname); len(name) > 0 {
userName = name
}
default:
if name := clean.Handle(userInfo.PreferredUsername); len(name) > 0 {
userName = name
} else if name = clean.Handle(userInfo.Name); len(name) > 0 {
userName = name
} else if name = clean.Handle(userInfo.Nickname); len(name) > 0 {
userName = name
} else if name = clean.Email(userInfo.Email); userInfo.EmailVerified && len(name) > 4 {
userName = name
}
}
return userName
}