登录与授权等

This commit is contained in:
2024-01-07 15:13:35 +08:00
parent 968eab9b06
commit ec548f4256
22 changed files with 248 additions and 53 deletions

View File

@@ -5,12 +5,12 @@ import (
"mc-client-updater-server/internal/service"
"mc-client-updater-server/pkg/param"
"mc-client-updater-server/pkg/result"
"mc-client-updater-server/pkg/util"
"time"
)
func HandleLogin(c *gin.Context) {
srv := service.NewUserService(c)
res := result.NewResult(c)
loginParam := param.LoginParam{}
err := c.ShouldBindJSON(&loginParam)
if err != nil {
@@ -18,6 +18,62 @@ func HandleLogin(c *gin.Context) {
return
}
srv := service.NewUserService(c)
srv.Login(loginParam.Username, loginParam.Password)
}
func HandleGrantAdd(c *gin.Context) {
res := result.NewResult(c)
p := param.NewGrantTokenParam{}
err := c.ShouldBindJSON(&p)
if err != nil {
res.BadRequest()
return
}
if p.ExpireAt != "" {
isValid := util.IsSQLTimeFormat(p.ExpireAt)
if !isValid {
res.BadRequestWithMsg("请求参数错误时间格式错误应为2006-01-02 15:04:05格式")
return
}
} else {
if p.TTL == 0 {
res.BadRequestWithMsg("请求参数错误至少提供expire_at和ttl中的一项且不为0")
return
}
p.ExpireAt = util.ToSQLTimeFormat(time.Now().Add(time.Duration(p.TTL) * time.Second))
}
srv := service.NewInstanceService(c)
// 验证 target -> instance(name) 是否存在
_, err = srv.GetInstanceByName(p.Target)
if err != nil {
res.InvalidInstance(p.Target)
return
}
grantEntity, err := srv.NewGrantToken(p.Target, p.ExpireAt)
if err != nil {
res.InternalServerError("生成授权码失败")
return
}
res.Success(grantEntity)
}
func HandleNewInstance(c *gin.Context) {
res := result.NewResult(c)
p := param.AddInstanceParam{}
err := c.ShouldBindJSON(&p)
if err != nil {
res.BadRequest()
return
}
srv := service.NewInstanceService(c)
inst, err := srv.AddInstance(p.Name, p.UpdateURL)
if err != nil {
res.DuplicatedValue("实例名称已存在")
return
}
res.Success(inst)
}

View File

@@ -0,0 +1,5 @@
package handler
func HandleInstanceUpdate() {
}

View File

@@ -11,7 +11,7 @@ func AdminRequired(c *gin.Context) {
res := result.NewResult(c)
authorization := c.GetHeader("Authorization")
if authorization == "" {
res.Unauthorized()
res.UnLogin()
return
}

View File

@@ -2,10 +2,37 @@ package middleware
import (
"github.com/gin-gonic/gin"
"mc-client-updater-server/pkg/log"
"gorm.io/gorm"
"mc-client-updater-server/internal/service"
"mc-client-updater-server/pkg/result"
)
func GrantRequired(c *gin.Context) {
instName := c.Param("name")
log.Logger.Info(instName)
// 判断instance name是否存在
srv := service.NewInstanceService(c)
res := result.NewResult(c)
instEntity, err := srv.GetInstanceByName(instName)
if err == gorm.ErrRecordNotFound {
res.InvalidInstance(instName)
return
} else if err != nil {
res.InternalServerError("查询实例对象时出现错误")
return
}
c.Set("instance", instEntity)
// 判断grant_code是否合法
grantCode := c.GetHeader("GrantCode")
if grantCode == "" {
res.Unauthorized()
return
}
grantEntity, err := srv.GetGrantByToken(grantCode)
if err != nil {
res.Unauthorized()
return
}
c.Set("grant", grantEntity)
c.Next()
}

View File

@@ -27,7 +27,7 @@ func NewRouter() *gin.Engine {
*/
inst := v1.Group("/instance/:name", middleware.GrantRequired)
{
inst.GET("/detail")
inst.POST("/upload", )
}
/**
@@ -37,9 +37,8 @@ func NewRouter() *gin.Engine {
*/
admin := v1.Group("/admin", middleware.AdminRequired)
{
admin.GET("/instances")
admin.GET("/users")
admin.GET("/updates")
admin.POST("/new_instance", handler.HandleNewInstance)
admin.POST("/grant/add", handler.HandleGrantAdd)
}
return r