更新前后端代码
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"filestoragesystem/internal/middleware"
|
||||
"filestoragesystem/internal/utils"
|
||||
)
|
||||
|
||||
// AuthController 认证控制器
|
||||
type AuthController struct {
|
||||
*Base
|
||||
}
|
||||
|
||||
// NewAuthController 创建认证控制器
|
||||
func NewAuthController(b *Base) *AuthController { return &AuthController{Base: b} }
|
||||
|
||||
type registerReq struct {
|
||||
Username string `json:"username" binding:"required"`
|
||||
Email string `json:"email" binding:"required"`
|
||||
Password string `json:"password" binding:"required"`
|
||||
}
|
||||
|
||||
// Register 用户注册
|
||||
func (ctl *AuthController) Register(c *gin.Context) {
|
||||
var req registerReq
|
||||
if !bindJSON(c, &req) {
|
||||
return
|
||||
}
|
||||
u, err := ctl.svc.Auth.Register(req.Username, req.Email, req.Password)
|
||||
if err != nil {
|
||||
ctl.svc.RecordOpLog(ctl.opCtx(c), "create", "user", 0, req.Username, false, err.Error())
|
||||
utils.FailMsg(c, err.Error())
|
||||
return
|
||||
}
|
||||
ctl.svc.RecordOpLog(ctl.opCtx(c), "create", "user", u.ID, u.Username, true, "")
|
||||
utils.OK(c, gin.H{"id": u.ID, "username": u.Username, "email": u.Email})
|
||||
}
|
||||
|
||||
type loginReq struct {
|
||||
Account string `json:"account" binding:"required"` // 用户名或邮箱
|
||||
Password string `json:"password" binding:"required"`
|
||||
}
|
||||
|
||||
// Login 用户登录
|
||||
func (ctl *AuthController) Login(c *gin.Context) {
|
||||
var req loginReq
|
||||
if !bindJSON(c, &req) {
|
||||
return
|
||||
}
|
||||
ip := utils.ClientIP(c)
|
||||
u, token, err := ctl.svc.Auth.Login(req.Account, req.Password, ip)
|
||||
if err != nil {
|
||||
ctl.svc.RecordOpLog(ctl.opCtx(c), "login", "user", 0, req.Account, false, err.Error())
|
||||
utils.Unauthorized(c, err.Error())
|
||||
return
|
||||
}
|
||||
oc := ctl.opCtx(c)
|
||||
uid := u.ID
|
||||
oc.UserID = &uid
|
||||
oc.Username = u.Username
|
||||
ctl.svc.RecordOpLog(oc, "login", "user", u.ID, u.Username, true, "")
|
||||
|
||||
utils.OK(c, gin.H{
|
||||
"token": token,
|
||||
"user": gin.H{
|
||||
"id": u.ID,
|
||||
"username": u.Username,
|
||||
"email": u.Email,
|
||||
"role": u.Role,
|
||||
"storage_used": u.StorageUsed,
|
||||
"storage_limit": u.StorageLimit,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
type createAPIKeyReq struct {
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
// CreateAPIKey 生成API密钥
|
||||
func (ctl *AuthController) CreateAPIKey(c *gin.Context) {
|
||||
var req createAPIKeyReq
|
||||
if !bindJSON(c, &req) {
|
||||
return
|
||||
}
|
||||
userID := middleware.CurrentUserID(c)
|
||||
key, secret, err := ctl.svc.Auth.CreateAPIKey(userID, req.Name)
|
||||
if err != nil {
|
||||
utils.FailMsg(c, err.Error())
|
||||
return
|
||||
}
|
||||
ctl.svc.RecordOpLog(ctl.opCtx(c), "create", "apikey", key.ID, key.Name, true, "")
|
||||
utils.OK(c, gin.H{
|
||||
"id": key.ID,
|
||||
"access_key": key.AccessKey,
|
||||
"secret_key": secret, // 仅创建时返回一次
|
||||
"name": key.Name,
|
||||
"notice": "secret_key仅在创建时展示,请妥善保存",
|
||||
})
|
||||
}
|
||||
|
||||
// ListAPIKeys 密钥列表
|
||||
func (ctl *AuthController) ListAPIKeys(c *gin.Context) {
|
||||
userID := middleware.CurrentUserID(c)
|
||||
keys, err := ctl.svc.Auth.ListAPIKeys(userID)
|
||||
if err != nil {
|
||||
utils.ServerError(c, err.Error())
|
||||
return
|
||||
}
|
||||
utils.OK(c, keys)
|
||||
}
|
||||
|
||||
// DeleteAPIKey 删除密钥
|
||||
func (ctl *AuthController) DeleteAPIKey(c *gin.Context) {
|
||||
id, ok := paramID(c)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
userID := middleware.CurrentUserID(c)
|
||||
if err := ctl.svc.Auth.DeleteAPIKey(userID, id); err != nil {
|
||||
utils.FailMsg(c, err.Error())
|
||||
return
|
||||
}
|
||||
ctl.svc.RecordOpLog(ctl.opCtx(c), "delete", "apikey", id, "", true, "")
|
||||
utils.OKMsg(c, "密钥已删除")
|
||||
}
|
||||
Reference in New Issue
Block a user