92 lines
2.0 KiB
Go
92 lines
2.0 KiB
Go
package api
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"wireguard-dashboard/compoment"
|
|
"wireguard-dashboard/constant"
|
|
"wireguard-dashboard/http/param"
|
|
"wireguard-dashboard/model/entity"
|
|
"wireguard-dashboard/model/vo"
|
|
"wireguard-dashboard/repository"
|
|
"wireguard-dashboard/utils"
|
|
)
|
|
|
|
type user struct{}
|
|
|
|
func UserApi() user {
|
|
return user{}
|
|
}
|
|
|
|
// Login
|
|
// @description: 登陆
|
|
// @receiver u
|
|
// @param c
|
|
func (u user) Login(c *gin.Context) {
|
|
var p param.Login
|
|
if err := c.ShouldBind(&p); err != nil {
|
|
utils.GinResponse(c).FailedWithErr("参数错误", err)
|
|
return
|
|
}
|
|
|
|
// 校验验证码
|
|
pass := compoment.CaptchaStore{}.Verify(p.CaptchaId, p.CaptchaAnswer, true)
|
|
if !pass {
|
|
utils.GinResponse(c).FailedWithMsg("验证码错误")
|
|
return
|
|
}
|
|
|
|
// 校验用户是否存在
|
|
user, err := repository.User().GetUserByAccount(p.Account)
|
|
if err != nil {
|
|
utils.GinResponse(c).FailedWithMsg("账户不存在")
|
|
return
|
|
}
|
|
|
|
if user.Status != constant.Normal {
|
|
utils.GinResponse(c).FailedWithMsg("账户状态异常")
|
|
return
|
|
}
|
|
|
|
// 校验密码
|
|
if !utils.Password().ComparePassword(user.Password, p.Password) {
|
|
utils.GinResponse(c).FailedWithMsg("密码错误")
|
|
return
|
|
}
|
|
|
|
// 生成token
|
|
token, err := compoment.JWT().GenerateToken(user.Id)
|
|
if err != nil {
|
|
utils.GinResponse(c).FailedWithMsg("登陆失败")
|
|
return
|
|
}
|
|
|
|
utils.GinResponse(c).OKWithData(map[string]any{
|
|
"token": token,
|
|
"type": "Bearer",
|
|
})
|
|
}
|
|
|
|
// GetUser
|
|
// @description: 获取登陆用户信息
|
|
// @receiver u
|
|
// @param c
|
|
func (u user) GetUser(c *gin.Context) {
|
|
user, ok := c.Get("user")
|
|
if !ok {
|
|
utils.GinResponse(c).FailedWithMsg("获取信息失败")
|
|
return
|
|
}
|
|
data := &vo.User{
|
|
Id: user.(*entity.User).Id,
|
|
Name: user.(*entity.User).Name,
|
|
Avatar: user.(*entity.User).Avatar,
|
|
Account: user.(*entity.User).Account,
|
|
Email: user.(*entity.User).Email,
|
|
IsAdmin: user.(*entity.User).IsAdmin,
|
|
Status: user.(*entity.User).Status,
|
|
CreatedAt: user.(*entity.User).CreatedAt,
|
|
UpdatedAt: user.(*entity.User).UpdatedAt,
|
|
}
|
|
utils.GinResponse(c).OKWithData(data)
|
|
}
|