2025-03-07 17:23:50 +08:00

141 lines
3.0 KiB
Go

package controller
import (
"case-admin-api/api/dao"
"case-admin-api/api/dto"
"case-admin-api/api/requests"
"case-admin-api/api/responses"
"case-admin-api/config"
"case-admin-api/extend/aliyun"
"case-admin-api/global"
"case-admin-api/utils"
"crypto/md5"
"encoding/hex"
"fmt"
"github.com/gin-gonic/gin"
)
type Public struct{}
// GetCaptcha 获取验证码
func (b *Public) GetCaptcha(c *gin.Context) {
id, b64s, err := utils.GenerateCaptcha()
if err != nil {
responses.FailWithMessage("验证码获取失败", c)
}
responses.OkWithData(gin.H{
"id": id,
"b64s": b64s,
}, c)
}
// Login 登陆
func (b *Public) Login(c *gin.Context) {
publicRequest := requests.PublicRequest{}
req := publicRequest.Login
if err := c.ShouldBind(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
// 验证验证码
if config.C.Env == "prod" {
isValid := utils.VerifyCaptcha(req.CaptchaId, req.Captcha)
if !isValid {
// 验证码错误
responses.FailWithMessage("验证码错误", c)
return
}
}
// 获取用户信息
AdminUserDao := dao.AdminUserDao{}
maps := make(map[string]interface{})
maps["access"] = req.Access
adminUser, err := AdminUserDao.GetAdminUser(maps)
if err != nil || adminUser == nil {
responses.FailWithMessage("用户名或密码错误", c)
return
}
// 检测用户密码
password := md5.Sum([]byte(req.Password + adminUser.Salt))
// 将哈希值转换为16进制字符串
passwordString := hex.EncodeToString(password[:])
fmt.Println(passwordString)
if passwordString != adminUser.Password {
responses.FailWithMessage("用户名或密码错误", c)
return
}
// 检测用户状态
if adminUser.IsDeleted == 1 {
responses.FailWithMessage("非法用户", c)
return
}
if adminUser.IsDisabled == 1 {
responses.FailWithMessage("您的账号已被禁用,请联系管理员处理", c)
return
}
// 下发token
token := &utils.Token{
UserId: fmt.Sprintf("%d", adminUser.UserId),
}
// 生成jwt
jwt, err := token.NewJWT()
if err != nil || jwt == "" {
responses.FailWithMessage("登陆失败", c)
return
}
g := dto.AdminLoginDto(adminUser)
g.LoadToken(jwt)
responses.OkWithData(g, c)
}
// GetOssSign 获取oss签名
func (b *Public) GetOssSign(c *gin.Context) {
publicRequest := requests.PublicRequest{}
req := publicRequest.GetOssSign
if err := c.ShouldBind(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
// 获取oss签名
ossPath := "dev/"
if config.C.Env == "prod" {
ossPath = "prod/"
}
ossPath = ossPath + "static/images/"
// 生成签名
ossSign, err := aliyun.GetOssSign(ossPath)
if err != nil {
responses.FailWithMessage("获取签名失败", c)
return
}
responses.OkWithData(ossSign, c)
}