2025-07-02 14:51:23 +08:00

171 lines
3.0 KiB
Go

package auth
import (
"log"
"management/internal/erpserver/model/system/request"
v1 "management/internal/erpserver/service/v1"
authv1 "management/internal/erpserver/service/v1/auth"
"management/internal/pkg/gin/gu"
"management/internal/pkg/mid"
"github.com/gin-gonic/gin"
"github.com/zhang2092/browser"
)
type app struct {
captchaService v1.CaptchaService
userService v1.UserService
authService *authv1.Auth
}
func newApp(
captchaService v1.CaptchaService,
userService v1.UserService,
authService *authv1.Auth,
) *app {
return &app{
captchaService: captchaService,
userService: userService,
authService: authService,
}
}
func (a *app) login(c *gin.Context) {
var req request.Login
if err := c.ShouldBindJSON(&req); err != nil {
log.Println("captchaID: ", req.CaptchaID)
gu.ValidatorErrors(c, err)
return
}
if !a.captchaService.Verify(req.CaptchaID, req.Captcha, true) {
gu.Failed(c, "验证码错误")
return
}
req.Ip = c.ClientIP()
req.Url = c.Request.URL.String()
req.Referrer = c.Request.Referer()
br, err := browser.NewBrowser(c.Request.UserAgent())
if err == nil && br != nil {
req.Os = br.Platform().Name()
req.Browser = br.Name()
}
risk, err := a.authService.Authenticate(c, req)
if err != nil {
gu.Failed(c, err.Error())
return
}
gu.Ok(c, risk)
}
type Menu struct {
ID int `json:"id"`
Name string `json:"name"`
Url string `json:"url"`
Icon string `json:"icon"`
Child []Menu `json:"child"`
}
type User struct {
Name string `json:"name"`
Avatar string `json:"avatar"`
RoleID int32 `json:"role_id"`
}
type UserInfo struct {
User User `json:"user"`
Menus []Menu `json:"menus"`
}
func (a *app) getInfo(c *gin.Context) {
auth := mid.GetUser(c)
if auth == nil {
gu.Failed(c, "用户未登录")
return
}
user, err := a.userService.GetByUuid(c, auth.ID)
if err != nil {
gu.Failed(c, err.Error())
return
}
menus := []Menu{
{
ID: 1,
Name: "控制台",
Icon: "house",
Url: "",
Child: []Menu{
{
ID: 21,
Name: "后台首页",
Icon: "aim",
Url: "/",
},
},
},
{
ID: 1,
Name: "系统管理",
Icon: "setting",
Url: "",
Child: []Menu{
{
ID: 11,
Name: "菜单管理",
Icon: "menu",
Url: "/system/menu",
},
{
ID: 12,
Name: "角色管理",
Icon: "star",
Url: "/system/role",
},
{
ID: 12,
Name: "部门管理",
Icon: "clock",
Url: "/system/department",
},
{
ID: 13,
Name: "用户管理",
Icon: "user",
Url: "/system/user",
},
{
ID: 14,
Name: "登录日志",
Icon: "lock",
Url: "/loginlog/list",
},
{
ID: 15,
Name: "操作日志",
Icon: "lock",
Url: "/audit/list",
},
},
},
}
gu.Ok(c, UserInfo{
User: User{
Name: user.Username,
Avatar: user.Avatar,
RoleID: user.RoleID,
},
Menus: menus,
})
}
func (a *app) logout(c *gin.Context) {
gu.Ok(c, nil)
}