You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.0 KiB
110 lines
3.0 KiB
package handler
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"laic-backend/common"
|
|
"laic-backend/service"
|
|
"laic-backend/vo"
|
|
)
|
|
|
|
func Captcha(c *gin.Context) {
|
|
id, image, err := service.NewCaptcha()
|
|
if err != nil {
|
|
common.FailWithBusiErrorByServer(c, common.ErrInternal)
|
|
return
|
|
}
|
|
c.SetCookie(service.CaptchaCookieName(), id, int(service.CaptchaTTL().Seconds()), "/", "", false, true)
|
|
c.Header("Cache-Control", "no-store")
|
|
c.Data(200, "image/png", image)
|
|
}
|
|
|
|
// SmsCode 发送短信验证码
|
|
func SmsCode(c *gin.Context) {
|
|
var req vo.SmsCodeReq
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
common.FailWithBindError(c, common.ErrParam, err)
|
|
return
|
|
}
|
|
if _, busiErr := service.DefaultUserService.SendSmsCode(req.Phone, req.Scene); busiErr != nil {
|
|
common.FailWithBusiError(c, busiErr)
|
|
return
|
|
}
|
|
common.OK(c)
|
|
}
|
|
|
|
// Register 用户注册
|
|
func Register(c *gin.Context) {
|
|
var req vo.RegisterReq
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
common.FailWithBindError(c, common.ErrParam, err)
|
|
return
|
|
}
|
|
resp, busiErr := service.DefaultUserService.Register(req.Name, req.Phone, req.Email, req.Password, req.SmsCode, c.GetHeader("User-Agent"), c.ClientIP())
|
|
if busiErr != nil {
|
|
common.FailWithBusiError(c, busiErr)
|
|
return
|
|
}
|
|
common.OKWithData(c, resp)
|
|
}
|
|
|
|
// Login 用户登录
|
|
func Login(c *gin.Context) {
|
|
var req vo.UserLoginReq
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
common.FailWithBindError(c, common.ErrParam, err)
|
|
return
|
|
}
|
|
captchaID, _ := c.Cookie(service.CaptchaCookieName())
|
|
resp, busiErr := service.DefaultUserService.Login(req.Phone, req.Password, req.Captcha, captchaID, req.SmsCode, c.GetHeader("User-Agent"), c.ClientIP())
|
|
if busiErr != nil {
|
|
common.FailWithBusiError(c, busiErr)
|
|
return
|
|
}
|
|
common.OKWithData(c, resp)
|
|
}
|
|
|
|
// Refresh 刷新令牌
|
|
func Refresh(c *gin.Context) {
|
|
var req vo.RefreshReq
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
common.FailWithBindError(c, common.ErrParam, err)
|
|
return
|
|
}
|
|
resp, busiErr := service.DefaultUserService.Refresh(req.RefreshToken, c.GetHeader("User-Agent"), c.ClientIP())
|
|
if busiErr != nil {
|
|
common.FailWithBusiError(c, busiErr)
|
|
return
|
|
}
|
|
common.OKWithData(c, resp)
|
|
}
|
|
|
|
// Logout 登出
|
|
func Logout(c *gin.Context) {
|
|
var req vo.LogoutReq
|
|
_ = c.ShouldBindJSON(&req) // refreshToken 可选,忽略绑定错误
|
|
|
|
accessToken := strings.TrimPrefix(c.GetHeader("Authorization"), "Bearer ")
|
|
userID := common.GetUserId(c)
|
|
if busiErr := service.DefaultUserService.Logout(userID, c.GetInt64("session_id"), accessToken, req.RefreshToken); busiErr != nil {
|
|
common.FailWithBusiError(c, busiErr)
|
|
return
|
|
}
|
|
common.OK(c)
|
|
}
|
|
|
|
// ResetPassword 重置密码
|
|
func ResetPassword(c *gin.Context) {
|
|
var req vo.ResetPasswordReq
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
common.FailWithBindError(c, common.ErrParam, err)
|
|
return
|
|
}
|
|
if busiErr := service.DefaultUserService.ResetPassword(req.Phone, req.SmsCode, req.NewPassword); busiErr != nil {
|
|
common.FailWithBusiError(c, busiErr)
|
|
return
|
|
}
|
|
common.OK(c)
|
|
}
|
|
|