51 lines
1.0 KiB
Go
51 lines
1.0 KiB
Go
package handlers
|
|
|
|
import (
|
|
"errors"
|
|
"platform/web/auth"
|
|
"platform/web/services"
|
|
"regexp"
|
|
"strconv"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
type VerifierReq struct {
|
|
Purpose services.VerifierSmsPurpose `json:"purpose"`
|
|
Phone string `json:"phone"`
|
|
}
|
|
|
|
func SmsCode(c *fiber.Ctx) error {
|
|
|
|
_, err := auth.Protect(c, []auth.PayloadType{auth.PayloadSecuredServer}, []string{})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 解析请求参数
|
|
req := new(VerifierReq)
|
|
if err := c.BodyParser(req); err != nil {
|
|
return err
|
|
}
|
|
match, err := regexp.MatchString(`^1[3-9]\d{9}$`, req.Phone)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !match {
|
|
return fiber.NewError(fiber.StatusBadRequest, "手机号格式错误")
|
|
}
|
|
|
|
// 发送身份验证码
|
|
err = services.Verifier.SendSms(c.Context(), req.Phone, req.Purpose)
|
|
if err != nil {
|
|
var sErr services.VerifierServiceSendLimitErr
|
|
if errors.As(err, &sErr) {
|
|
return fiber.NewError(fiber.StatusTooManyRequests, strconv.Itoa(int(sErr)))
|
|
}
|
|
return err
|
|
}
|
|
|
|
// 发送成功
|
|
return nil
|
|
}
|