@@ -0,0 +1,54 @@
|
||||
package emailser
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"91porn-server/app/appg"
|
||||
"91porn-server/common/constant/redisconst"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/common/stderr"
|
||||
|
||||
"github.com/badoux/checkmail"
|
||||
)
|
||||
|
||||
// CheckEmail 校验邮件地址是否合法
|
||||
func CheckEmail(ctx context.Context, emailStr string) stderr.Code {
|
||||
if emailStr == "" {
|
||||
return stderr.ErrInvalidEmail
|
||||
}
|
||||
if err := checkmail.ValidateFormat(emailStr); err != nil {
|
||||
log.ErrorX(ctx, "invalid email", log.Any("email", emailStr), log.E(err))
|
||||
return stderr.ErrInvalidEmail
|
||||
}
|
||||
return stderr.Success
|
||||
}
|
||||
|
||||
// VerifyCaptchaCode 核对验证码
|
||||
func VerifyCaptchaCode(ctx context.Context, emailAddr, code string) stderr.Code {
|
||||
emailAddr = strings.TrimSpace(emailAddr)
|
||||
if strings.HasSuffix(emailAddr, "@dsp.xyz") { // pass the test email
|
||||
log.InfoX(ctx, "VerifyCaptchaCode dismiss test email", log.Any("email", emailAddr))
|
||||
return stderr.Success
|
||||
}
|
||||
if code := CheckEmail(ctx, emailAddr); code != stderr.Success {
|
||||
return code
|
||||
}
|
||||
redisKey := redisconst.GetEmailCaptchaKey(emailAddr)
|
||||
redisCode, err := appg.Redis.Get(redisKey)
|
||||
if err != nil {
|
||||
log.ErrorX(ctx, "VerifyCaptchaCode redis get err", log.Any("emailAddr", emailAddr),
|
||||
log.Any("redisKey", redisKey), log.E(err))
|
||||
return stderr.ErrNetWorkBusy
|
||||
}
|
||||
if redisCode == nil {
|
||||
log.InfoX(ctx, "VerifyCaptchaCode nil code in redis", log.Any("emailAddr", emailAddr), log.Any("code", code))
|
||||
return stderr.ErrCaptcha
|
||||
}
|
||||
if *redisCode != code {
|
||||
log.InfoX(ctx, "VerifyCaptchaCode invalid", log.Any("emailAddr", emailAddr), log.Any("code", code),
|
||||
log.Any("redisCode", redisCode))
|
||||
return stderr.ErrCaptchaInvalid
|
||||
}
|
||||
return stderr.Success
|
||||
}
|
||||
Reference in New Issue
Block a user