2025-06-10 17:50:46 +08:00
|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
|
|
|
"ifms/internal/mods/rbac/biz"
|
|
|
|
"ifms/internal/mods/rbac/schema"
|
|
|
|
"ifms/pkg/util"
|
2025-06-11 00:12:16 +08:00
|
|
|
|
2025-06-10 17:50:46 +08:00
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Login struct {
|
|
|
|
LoginBIZ *biz.Login
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Tags LoginAPI
|
|
|
|
// @Summary Get captcha ID
|
|
|
|
// @Success 200 {object} util.ResponseResult{data=schema.Captcha}
|
|
|
|
// @Router /api/v1/captcha/id [get]
|
|
|
|
func (a *Login) GetCaptcha(c *gin.Context) {
|
|
|
|
ctx := c.Request.Context()
|
|
|
|
data, err := a.LoginBIZ.GetCaptcha(ctx)
|
|
|
|
if err != nil {
|
|
|
|
util.ResError(c, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
util.ResSuccess(c, data)
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Tags LoginAPI
|
|
|
|
// @Summary Response captcha image
|
|
|
|
// @Param id query string true "Captcha ID"
|
|
|
|
// @Param reload query number false "Reload captcha image (reload=1)"
|
|
|
|
// @Produce image/png
|
|
|
|
// @Success 200 "Captcha image"
|
|
|
|
// @Failure 404 {object} util.ResponseResult
|
|
|
|
// @Router /api/v1/captcha/image [get]
|
|
|
|
func (a *Login) ResponseCaptcha(c *gin.Context) {
|
|
|
|
ctx := c.Request.Context()
|
|
|
|
err := a.LoginBIZ.ResponseCaptcha(ctx, c.Writer, c.Query("id"), c.Query("reload") == "1")
|
|
|
|
if err != nil {
|
|
|
|
util.ResError(c, err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Tags LoginAPI
|
|
|
|
// @Summary Login system with username and password
|
|
|
|
// @Param body body schema.LoginForm true "Request body"
|
|
|
|
// @Success 200 {object} util.ResponseResult{data=schema.LoginToken}
|
|
|
|
// @Failure 400 {object} util.ResponseResult
|
|
|
|
// @Failure 500 {object} util.ResponseResult
|
|
|
|
// @Router /api/v1/login [post]
|
|
|
|
func (a *Login) Login(c *gin.Context) {
|
|
|
|
ctx := c.Request.Context()
|
|
|
|
item := new(schema.LoginForm)
|
|
|
|
if err := util.ParseJSON(c, item); err != nil {
|
|
|
|
util.ResError(c, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
data, err := a.LoginBIZ.Login(ctx, item.Trim())
|
|
|
|
if err != nil {
|
|
|
|
util.ResError(c, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
util.ResSuccess(c, data)
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Tags LoginAPI
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Summary Logout system
|
|
|
|
// @Success 200 {object} util.ResponseResult
|
|
|
|
// @Failure 500 {object} util.ResponseResult
|
|
|
|
// @Router /api/v1/current/logout [post]
|
|
|
|
func (a *Login) Logout(c *gin.Context) {
|
|
|
|
ctx := c.Request.Context()
|
|
|
|
err := a.LoginBIZ.Logout(ctx)
|
|
|
|
if err != nil {
|
|
|
|
util.ResError(c, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
util.ResOK(c)
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Tags LoginAPI
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Summary Refresh current access token
|
|
|
|
// @Success 200 {object} util.ResponseResult{data=schema.LoginToken}
|
|
|
|
// @Failure 401 {object} util.ResponseResult
|
|
|
|
// @Failure 500 {object} util.ResponseResult
|
|
|
|
// @Router /api/v1/current/refresh-token [post]
|
|
|
|
func (a *Login) RefreshToken(c *gin.Context) {
|
|
|
|
ctx := c.Request.Context()
|
|
|
|
data, err := a.LoginBIZ.RefreshToken(ctx)
|
|
|
|
if err != nil {
|
|
|
|
util.ResError(c, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
util.ResSuccess(c, data)
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Tags LoginAPI
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Summary Get current user info
|
|
|
|
// @Success 200 {object} util.ResponseResult{data=schema.User}
|
|
|
|
// @Failure 401 {object} util.ResponseResult
|
|
|
|
// @Failure 500 {object} util.ResponseResult
|
|
|
|
// @Router /api/v1/current/user [get]
|
|
|
|
func (a *Login) GetUserInfo(c *gin.Context) {
|
|
|
|
ctx := c.Request.Context()
|
|
|
|
data, err := a.LoginBIZ.GetUserInfo(ctx)
|
|
|
|
if err != nil {
|
|
|
|
util.ResError(c, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
util.ResSuccess(c, data)
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Tags LoginAPI
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Summary Change current user password
|
|
|
|
// @Param body body schema.UpdateLoginPassword true "Request body"
|
|
|
|
// @Success 200 {object} util.ResponseResult
|
|
|
|
// @Failure 400 {object} util.ResponseResult
|
|
|
|
// @Failure 401 {object} util.ResponseResult
|
|
|
|
// @Failure 500 {object} util.ResponseResult
|
|
|
|
// @Router /api/v1/current/password [put]
|
|
|
|
func (a *Login) UpdatePassword(c *gin.Context) {
|
|
|
|
ctx := c.Request.Context()
|
|
|
|
item := new(schema.UpdateLoginPassword)
|
|
|
|
if err := util.ParseJSON(c, item); err != nil {
|
|
|
|
util.ResError(c, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
err := a.LoginBIZ.UpdatePassword(ctx, item)
|
|
|
|
if err != nil {
|
|
|
|
util.ResError(c, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
util.ResOK(c)
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Tags LoginAPI
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Summary Query current user menus based on the current user role
|
|
|
|
// @Success 200 {object} util.ResponseResult{data=[]schema.Menu}
|
|
|
|
// @Failure 401 {object} util.ResponseResult
|
|
|
|
// @Failure 500 {object} util.ResponseResult
|
|
|
|
// @Router /api/v1/current/menus [get]
|
|
|
|
func (a *Login) QueryMenus(c *gin.Context) {
|
|
|
|
ctx := c.Request.Context()
|
|
|
|
data, err := a.LoginBIZ.QueryMenus(ctx)
|
|
|
|
if err != nil {
|
|
|
|
util.ResError(c, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
util.ResSuccess(c, data)
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Tags LoginAPI
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Summary Update current user info
|
|
|
|
// @Param body body schema.UpdateCurrentUser true "Request body"
|
|
|
|
// @Success 200 {object} util.ResponseResult
|
|
|
|
// @Failure 400 {object} util.ResponseResult
|
|
|
|
// @Failure 401 {object} util.ResponseResult
|
|
|
|
// @Failure 500 {object} util.ResponseResult
|
|
|
|
// @Router /api/v1/current/user [put]
|
|
|
|
func (a *Login) UpdateUser(c *gin.Context) {
|
|
|
|
ctx := c.Request.Context()
|
|
|
|
item := new(schema.UpdateCurrentUser)
|
|
|
|
if err := util.ParseJSON(c, item); err != nil {
|
|
|
|
util.ResError(c, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
err := a.LoginBIZ.UpdateUser(ctx, item)
|
|
|
|
if err != nil {
|
|
|
|
util.ResError(c, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
util.ResOK(c)
|
|
|
|
}
|