fix: tighten pending oauth email routing and binding state
This commit is contained in:
@@ -240,7 +240,7 @@ func (s *UserService) GetProfileIdentitySummaries(ctx context.Context, userID in
|
||||
}
|
||||
|
||||
return UserIdentitySummarySet{
|
||||
Email: s.buildEmailIdentitySummary(user),
|
||||
Email: s.buildEmailIdentitySummary(user, records),
|
||||
LinuxDo: s.buildProviderIdentitySummary("linuxdo", records),
|
||||
OIDC: s.buildProviderIdentitySummary("oidc", records),
|
||||
WeChat: s.buildProviderIdentitySummary("wechat", records),
|
||||
@@ -497,7 +497,7 @@ func compressInlineAvatar(decoded []byte) ([]byte, string, error) {
|
||||
return nil, "", ErrAvatarTooLarge
|
||||
}
|
||||
|
||||
func (s *UserService) buildEmailIdentitySummary(user *User) UserIdentitySummary {
|
||||
func (s *UserService) buildEmailIdentitySummary(user *User, records []UserAuthIdentityRecord) UserIdentitySummary {
|
||||
summary := UserIdentitySummary{
|
||||
Provider: "email",
|
||||
CanBind: false,
|
||||
@@ -508,11 +508,34 @@ func (s *UserService) buildEmailIdentitySummary(user *User) UserIdentitySummary
|
||||
return summary
|
||||
}
|
||||
|
||||
filtered := filterUserAuthIdentities(records, "email")
|
||||
if len(filtered) > 0 {
|
||||
primary := selectPrimaryUserAuthIdentity(filtered)
|
||||
email := strings.TrimSpace(firstStringIdentityValue(primary.Metadata, "email"))
|
||||
if email == "" {
|
||||
email = strings.TrimSpace(primary.ProviderSubject)
|
||||
}
|
||||
if email == "" || isReservedEmail(email) {
|
||||
email = strings.TrimSpace(user.Email)
|
||||
}
|
||||
if email == "" || isReservedEmail(email) {
|
||||
email = strings.TrimSpace(primary.ProviderKey)
|
||||
}
|
||||
|
||||
summary.Bound = true
|
||||
summary.BoundCount = len(filtered)
|
||||
summary.DisplayName = email
|
||||
summary.SubjectHint = maskEmailIdentity(email)
|
||||
summary.ProviderKey = strings.TrimSpace(primary.ProviderKey)
|
||||
summary.VerifiedAt = primary.VerifiedAt
|
||||
return summary
|
||||
}
|
||||
|
||||
// Compatibility fallback for legacy normal-email users that predate auth_identities backfill.
|
||||
email := strings.TrimSpace(user.Email)
|
||||
if email == "" || isReservedEmail(email) {
|
||||
return summary
|
||||
}
|
||||
|
||||
summary.Bound = true
|
||||
summary.BoundCount = 1
|
||||
summary.DisplayName = email
|
||||
|
||||
Reference in New Issue
Block a user