feat: Redis cluster support + version auto-detect + metrics API
This commit is contained in:
1 parent
8384006ae9
commit
3af65f2350
10 files changed
+485
-66
No files matched your search
@@ -67,9 +67,12 @@ func Login(c *gin.Context) {
|
||||
c.JSON(http.StatusUnauthorized, gin.H{"detail": "Invalid username or password"})
|
||||
return
|
||||
}
|
||||
// LDAP 认证成功,自动创建本地用户
|
||||
// LDAP 认证成功,自动创建或恢复本地用户
|
||||
isActive := true
|
||||
defaultRole := "developer"
|
||||
if ldapInfo.DisplayName == "" {
|
||||
ldapInfo.DisplayName = ldapInfo.Username
|
||||
}
|
||||
newUser := model.User{
|
||||
Username: ldapInfo.Username,
|
||||
DisplayName: ldapInfo.DisplayName,
|
||||
@@ -79,20 +82,25 @@ func Login(c *gin.Context) {
|
||||
Role: defaultRole,
|
||||
IsActive: &isActive,
|
||||
}
|
||||
if newUser.DisplayName == "" {
|
||||
newUser.DisplayName = newUser.Username
|
||||
// FirstOrCreate: 不存在则创建,已存在则获取(避免 uniqueIndex 冲突)
|
||||
result := model.DB.Where("username = ?", ldapInfo.Username).FirstOrCreate(&newUser)
|
||||
if result.Error != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"detail": "Failed to create LDAP user: " + result.Error.Error()})
|
||||
return
|
||||
}
|
||||
if createErr := model.DB.Create(&newUser).Error; createErr != nil {
|
||||
// 可能并发创建冲突,再查一次
|
||||
model.DB.Where("username = ?", ldapInfo.Username).First(&user)
|
||||
if user.ID == 0 {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"detail": "Failed to create LDAP user"})
|
||||
return
|
||||
// 更新已有用户的 display_name / email(LDAP 信息可能变更)
|
||||
if newUser.ID != 0 {
|
||||
updates := map[string]interface{}{
|
||||
"display_name": ldapInfo.DisplayName,
|
||||
"auth_source": "ldap",
|
||||
"is_active": true,
|
||||
}
|
||||
} else {
|
||||
user = newUser
|
||||
if ldapInfo.Email != nil {
|
||||
updates["email"] = *ldapInfo.Email
|
||||
}
|
||||
model.DB.Model(&newUser).Updates(updates)
|
||||
}
|
||||
// 记录 auth_source
|
||||
user = newUser
|
||||
} else {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"detail": "Database error"})
|
||||
return
|
||||
|
||||
Reference in new issue
Block a user