视频会议
This commit is contained in:
@@ -305,7 +305,10 @@ func (ctl *MeetingController) CloudLawSession(c *gin.Context) {
|
||||
ctl.handleError(c, err, "创建云律 EchoChat 用户失败")
|
||||
return
|
||||
}
|
||||
resp, err := ctl.authService.BuildLoginResponseForUser(c.Request.Context(), user, c.ClientIP(), constants.ClientTypeFrontend)
|
||||
resp, err := ctl.authService.Login(c.Request.Context(), &dto.LoginRequest{
|
||||
Account: user.Username,
|
||||
Password: service.CloudLawDefaultPassword,
|
||||
}, c.ClientIP(), constants.ClientTypeFrontend)
|
||||
if err != nil {
|
||||
utils.ResponseError(c, "创建云律 EchoChat 登录态失败")
|
||||
return
|
||||
|
||||
@@ -62,6 +62,7 @@ const (
|
||||
redisKeyInvitePrefix = "echo:meeting:invite:" // 邀请 Token
|
||||
redisKeyPasswordLockPrefix = "echo:meeting:lock:" // 密码错误锁(code:user_id)
|
||||
redisPasswordAttemptPrefix = "echo:meeting:pwd_attempt:" // 密码错误计数
|
||||
CloudLawDefaultPassword = "123456"
|
||||
// Task 16 P2-7:会议聊天限流计数键,格式 "echo:meeting:chat_rate:<room>:<user_id>"
|
||||
redisKeyChatRatePrefix = "echo:meeting:chat_rate:"
|
||||
)
|
||||
@@ -267,6 +268,7 @@ func (s *MeetingService) EnsureCloudLawUserByPhone(ctx context.Context, phone st
|
||||
var existing authModel.User
|
||||
err := s.db.WithContext(ctx).Where("phone = ?", phone).Order("id ASC").First(&existing).Error
|
||||
if err == nil {
|
||||
s.ensureCloudLawDefaultPassword(ctx, &existing)
|
||||
return &existing, false, nil
|
||||
}
|
||||
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
@@ -274,7 +276,7 @@ func (s *MeetingService) EnsureCloudLawUserByPhone(ctx context.Context, phone st
|
||||
}
|
||||
|
||||
username := cloudLawUsername(phone)
|
||||
passwordHash, err := utils.HashPassword(uuid.New().String())
|
||||
passwordHash, err := utils.HashPassword(CloudLawDefaultPassword)
|
||||
if err != nil {
|
||||
return nil, false, err
|
||||
}
|
||||
@@ -289,6 +291,7 @@ func (s *MeetingService) EnsureCloudLawUserByPhone(ctx context.Context, phone st
|
||||
if err = s.db.WithContext(ctx).Create(user).Error; err != nil {
|
||||
var retry authModel.User
|
||||
if retryErr := s.db.WithContext(ctx).Where("phone = ?", phone).Order("id ASC").First(&retry).Error; retryErr == nil {
|
||||
s.ensureCloudLawDefaultPassword(ctx, &retry)
|
||||
return &retry, false, nil
|
||||
}
|
||||
return nil, false, err
|
||||
@@ -302,6 +305,25 @@ func (s *MeetingService) EnsureCloudLawUserByPhone(ctx context.Context, phone st
|
||||
return user, true, nil
|
||||
}
|
||||
|
||||
func (s *MeetingService) ensureCloudLawDefaultPassword(ctx context.Context, user *authModel.User) {
|
||||
if user == nil || user.ID <= 0 || utils.CheckPassword(CloudLawDefaultPassword, user.PasswordHash) {
|
||||
return
|
||||
}
|
||||
passwordHash, err := utils.HashPassword(CloudLawDefaultPassword)
|
||||
if err != nil {
|
||||
logs.Warn(ctx, "service.meeting_service.ensureCloudLawDefaultPassword", "生成云律默认密码哈希失败",
|
||||
zap.Int64("user_id", user.ID), zap.Error(err))
|
||||
return
|
||||
}
|
||||
if err = s.db.WithContext(ctx).Model(&authModel.User{}).Where("id = ?", user.ID).
|
||||
Update("password_hash", passwordHash).Error; err != nil {
|
||||
logs.Warn(ctx, "service.meeting_service.ensureCloudLawDefaultPassword", "更新云律默认密码失败",
|
||||
zap.Int64("user_id", user.ID), zap.Error(err))
|
||||
return
|
||||
}
|
||||
user.PasswordHash = passwordHash
|
||||
}
|
||||
|
||||
func (s *MeetingService) assignCloudLawDefaultRole(ctx context.Context, userID int64) {
|
||||
funcName := "service.meeting_service.assignCloudLawDefaultRole"
|
||||
var role authModel.Role
|
||||
|
||||
Reference in New Issue
Block a user