(ctx context.Context, req *schema.UserVerifyEmailReq)
| 584 | } |
| 585 | |
| 586 | func (us *UserService) UserVerifyEmail(ctx context.Context, req *schema.UserVerifyEmailReq) (resp *schema.UserLoginResp, err error) { |
| 587 | data := &schema.EmailCodeContent{} |
| 588 | err = data.FromJSONString(req.Content) |
| 589 | if err != nil { |
| 590 | return nil, errors.BadRequest(reason.EmailVerifyURLExpired) |
| 591 | } |
| 592 | |
| 593 | userInfo, has, err := us.userRepo.GetByEmail(ctx, data.Email) |
| 594 | if err != nil { |
| 595 | return nil, err |
| 596 | } |
| 597 | if !has { |
| 598 | return nil, errors.BadRequest(reason.UserNotFound) |
| 599 | } |
| 600 | if userInfo.MailStatus == entity.EmailStatusToBeVerified { |
| 601 | userInfo.MailStatus = entity.EmailStatusAvailable |
| 602 | err = us.userRepo.UpdateEmailStatus(ctx, userInfo.ID, userInfo.MailStatus) |
| 603 | if err != nil { |
| 604 | return nil, err |
| 605 | } |
| 606 | } |
| 607 | if err = us.userActivity.UserActive(ctx, userInfo.ID); err != nil { |
| 608 | log.Error(err) |
| 609 | return nil, err |
| 610 | } |
| 611 | |
| 612 | // In the case of three-party login, the associated users are bound |
| 613 | if len(data.BindingKey) > 0 { |
| 614 | err = us.userExternalLoginService.ExternalLoginBindingUser(ctx, data.BindingKey, userInfo) |
| 615 | if err != nil { |
| 616 | return nil, err |
| 617 | } |
| 618 | } |
| 619 | |
| 620 | accessToken, userCacheInfo, err := us.userCommonService.CacheLoginUserInfo( |
| 621 | ctx, userInfo.ID, userInfo.MailStatus, userInfo.Status, "") |
| 622 | if err != nil { |
| 623 | return nil, err |
| 624 | } |
| 625 | |
| 626 | resp = &schema.UserLoginResp{} |
| 627 | resp.ConvertFromUserEntity(userInfo) |
| 628 | resp.Avatar = us.siteInfoService.FormatAvatar(ctx, userInfo.Avatar, userInfo.EMail, userInfo.Status).GetURL() |
| 629 | resp.AccessToken = accessToken |
| 630 | // User verified email will update user email status. So user status cache should be updated. |
| 631 | if err = us.authService.SetUserStatus(ctx, userCacheInfo); err != nil { |
| 632 | return nil, err |
| 633 | } |
| 634 | return resp, nil |
| 635 | } |
| 636 | |
| 637 | // verifyPassword |
| 638 | // Compare whether the password is correct |
nothing calls this directly
no test coverage detected