|
8 | 8 | "github.com/eryajf/go-ldap-admin/model"
|
9 | 9 | "github.com/eryajf/go-ldap-admin/model/request"
|
10 | 10 | "github.com/eryajf/go-ldap-admin/model/response"
|
| 11 | + "github.com/eryajf/go-ldap-admin/public/common" |
11 | 12 | "github.com/eryajf/go-ldap-admin/public/tools"
|
12 | 13 | "github.com/eryajf/go-ldap-admin/service/ildap"
|
13 | 14 | "github.com/eryajf/go-ldap-admin/service/isql"
|
@@ -371,6 +372,49 @@ func (l UserLogic) ChangePwd(c *gin.Context, req any) (data any, rspError any) {
|
371 | 372 | return nil, nil
|
372 | 373 | }
|
373 | 374 |
|
| 375 | +// ResetPassword 重置用户密码 |
| 376 | +func (l UserLogic) ResetPassword(c *gin.Context, req any) (data any, rspError any) { |
| 377 | + r, ok := req.(*request.UserResetPasswordReq) |
| 378 | + if !ok { |
| 379 | + return nil, ReqAssertErr |
| 380 | + } |
| 381 | + _ = c |
| 382 | + |
| 383 | + // 检查用户是否存在 |
| 384 | + if !isql.User.Exist(tools.H{"username": r.Username}) { |
| 385 | + return nil, tools.NewValidatorError(fmt.Errorf("用户不存在")) |
| 386 | + } |
| 387 | + |
| 388 | + // 获取用户信息 |
| 389 | + user := new(model.User) |
| 390 | + err := isql.User.Find(tools.H{"username": r.Username}, user) |
| 391 | + if err != nil { |
| 392 | + return nil, tools.NewMySqlError(fmt.Errorf("获取用户信息失败: %s", err.Error())) |
| 393 | + } |
| 394 | + |
| 395 | + // 生成随机密码 |
| 396 | + newPassword := tools.GenerateRandomPassword() |
| 397 | + |
| 398 | + // 在LDAP中更新密码 |
| 399 | + err = ildap.User.ChangePwd(user.UserDN, "", newPassword) |
| 400 | + if err != nil { |
| 401 | + return nil, tools.NewLdapError(fmt.Errorf("在LDAP更新密码失败: %s", err.Error())) |
| 402 | + } |
| 403 | + |
| 404 | + // 在MySQL中更新密码 |
| 405 | + err = isql.User.ChangePwd(user.Username, tools.NewGenPasswd(newPassword)) |
| 406 | + if err != nil { |
| 407 | + return nil, tools.NewMySqlError(fmt.Errorf("在MySQL更新密码失败: %s", err.Error())) |
| 408 | + } |
| 409 | + |
| 410 | + // 发送密码重置通知邮件 |
| 411 | + if err := tools.SendPasswordResetNotification(user.Username, user.Nickname, user.Mail, newPassword); err != nil { |
| 412 | + common.Log.Warnf("发送密码重置通知邮件失败,用户: %s, 邮箱: %s, 错误: %v", user.Username, user.Mail, err) |
| 413 | + } |
| 414 | + |
| 415 | + return map[string]string{"newPassword": newPassword}, nil |
| 416 | +} |
| 417 | + |
374 | 418 | // ChangeUserStatus 修改用户状态
|
375 | 419 | func (l UserLogic) ChangeUserStatus(c *gin.Context, req any) (data any, rspError any) {
|
376 | 420 | r, ok := req.(*request.UserChangeUserStatusReq)
|
|
0 commit comments