Fix response structure error and router error
Signed-off-by: Asai Neko <sugar@sne.moe>
This commit is contained in:
@@ -1,12 +1,16 @@
|
||||
package middleware
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
import (
|
||||
"nixcn-cms/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func ApiVersionCheck() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
apiVersion := c.GetHeader("X-Api-Version")
|
||||
if apiVersion == "" {
|
||||
c.Abort()
|
||||
utils.HttpAbort(c, 400, "", "Api Version Not Found")
|
||||
return
|
||||
}
|
||||
c.Next()
|
||||
|
||||
@@ -11,8 +11,8 @@ import (
|
||||
|
||||
func Router(e *gin.Engine) {
|
||||
// API Services
|
||||
api := e.Group("/api/v1", middleware.ApiVersionCheck())
|
||||
api := e.Group("/api/v1")
|
||||
auth.Handler(api.Group("/auth"))
|
||||
user.Handler(api.Group("/user"))
|
||||
event.Handler(api.Group("/event"))
|
||||
user.Handler(api.Group("/user", middleware.ApiVersionCheck()))
|
||||
event.Handler(api.Group("/event", middleware.ApiVersionCheck()))
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@ import (
|
||||
)
|
||||
|
||||
func Handler(r *gin.RouterGroup) {
|
||||
r.GET("/redirect", Redirect, middleware.JWTAuth(false))
|
||||
r.POST("/magic", Magic)
|
||||
r.POST("/token", Token)
|
||||
r.POST("/refresh", Refresh)
|
||||
r.GET("/redirect", middleware.JWTAuth(false), Redirect)
|
||||
r.POST("/magic", middleware.ApiVersionCheck(), Magic)
|
||||
r.POST("/token", middleware.ApiVersionCheck(), Token)
|
||||
r.POST("/refresh", middleware.ApiVersionCheck(), Refresh)
|
||||
}
|
||||
|
||||
@@ -60,7 +60,6 @@ func Magic(c *gin.Context) {
|
||||
uriData := struct {
|
||||
Uri string `json:"uri"`
|
||||
}{url.String()}
|
||||
|
||||
utils.HttpResponse(c, 200, "", "magiclink sent", uriData)
|
||||
return
|
||||
} else {
|
||||
|
||||
@@ -11,5 +11,5 @@ func Handler(r *gin.RouterGroup) {
|
||||
r.GET("/info", Info)
|
||||
r.GET("/checkin", Checkin)
|
||||
r.GET("/checkin/query", CheckinQuery)
|
||||
r.POST("/checkin/submit", CheckinSubmit, middleware.Permission(20))
|
||||
r.POST("/checkin/submit", middleware.Permission(20), CheckinSubmit)
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ func Handler(r *gin.RouterGroup) {
|
||||
r.Use(middleware.JWTAuth(true), middleware.Permission(5))
|
||||
r.GET("/info", Info)
|
||||
r.PATCH("/update", Update)
|
||||
r.GET("/list", List, middleware.Permission(20))
|
||||
r.POST("/full", Full, middleware.Permission(40))
|
||||
r.POST("/create", Create, middleware.Permission(50))
|
||||
r.GET("/list", middleware.Permission(20), List)
|
||||
r.POST("/full", middleware.Permission(40), Full)
|
||||
r.POST("/create", middleware.Permission(50), Create)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
package utils
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/goccy/go-json"
|
||||
)
|
||||
|
||||
type RespStatus struct {
|
||||
Code int `json:"code"`
|
||||
@@ -9,22 +14,41 @@ type RespStatus struct {
|
||||
Data any `json:"data"`
|
||||
}
|
||||
|
||||
func HttpResponse(c *gin.Context, code int, errorId string, status string, data ...any) {
|
||||
var resp = RespStatus{
|
||||
func render(c *gin.Context, code int, id string, status string, data []any, abort bool) {
|
||||
resp := RespStatus{
|
||||
Code: code,
|
||||
ErrorId: errorId,
|
||||
ErrorId: id,
|
||||
Status: status,
|
||||
Data: data,
|
||||
}
|
||||
c.JSON(code, resp)
|
||||
|
||||
switch len(data) {
|
||||
case 0:
|
||||
resp.Data = nil
|
||||
case 1:
|
||||
resp.Data = data[0]
|
||||
default:
|
||||
resp.Data = data
|
||||
}
|
||||
|
||||
jsonBytes, err := json.Marshal(resp)
|
||||
if err != nil {
|
||||
c.Status(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
c.Header("Content-Type", "application/json; charset=utf-8")
|
||||
if abort {
|
||||
c.AbortWithStatus(code)
|
||||
} else {
|
||||
c.Status(code)
|
||||
}
|
||||
_, _ = c.Writer.Write(jsonBytes)
|
||||
}
|
||||
|
||||
func HttpAbort(c *gin.Context, code int, errorId string, status string, data ...any) {
|
||||
var resp = RespStatus{
|
||||
Code: code,
|
||||
ErrorId: errorId,
|
||||
Status: status,
|
||||
Data: data,
|
||||
}
|
||||
c.AbortWithStatusJSON(code, resp)
|
||||
func HttpResponse(c *gin.Context, code int, id string, status string, data ...any) {
|
||||
render(c, code, id, status, data, false)
|
||||
}
|
||||
|
||||
func HttpAbort(c *gin.Context, code int, id string, status string, data ...any) {
|
||||
render(c, code, id, status, data, true)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user