u
This commit is contained in:
1 parent
7c8e2906bc
commit
72a1a9184a
25 files changed
+744
-125
No files matched your search
Whitespace-only changes.
@@ -0,0 +1,55 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"base-framework/pkg/router"
|
||||
"base-framework/pkg/utils"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func Auth() router.HandlerFunc {
|
||||
return func(c *router.Context) {
|
||||
tokenHeader := c.Header("Authorization")
|
||||
userIdHeader := c.Header("user_id")
|
||||
orgIDHeader := c.Header("org_id")
|
||||
|
||||
if tokenHeader == "" {
|
||||
c.JSON(http.StatusUnauthorized, map[string]string{"error": "Authorization header missing"})
|
||||
return
|
||||
}
|
||||
if userIdHeader == "" {
|
||||
c.JSON(http.StatusUnauthorized, map[string]string{"error": "user_id header missing"})
|
||||
return
|
||||
}
|
||||
if orgIDHeader == "" {
|
||||
c.JSON(http.StatusUnauthorized, map[string]string{"error": "org_id header missing"})
|
||||
return
|
||||
}
|
||||
|
||||
parts := strings.Fields(tokenHeader)
|
||||
if len(parts) != 2 || strings.ToLower(parts[0]) != "bearer" {
|
||||
c.JSON(http.StatusUnauthorized, map[string]string{"error": "Authorization header format must be Bearer {token}"})
|
||||
return
|
||||
}
|
||||
|
||||
tokenStr := parts[1]
|
||||
claims, err := utils.VerifyToken(tokenStr)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusUnauthorized, map[string]string{"error": "Invalid token: " + err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if claims.UserID != userIdHeader {
|
||||
c.JSON(http.StatusUnauthorized, map[string]string{"error": "user_id does not match token"})
|
||||
return
|
||||
}
|
||||
|
||||
if claims.OrgID != orgIDHeader {
|
||||
c.JSON(http.StatusUnauthorized, map[string]string{"error": "org_id does not match token"})
|
||||
return
|
||||
}
|
||||
|
||||
// 认证通过,继续执行后续中间件或处理器
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"base-framework/pkg/router"
|
||||
"log"
|
||||
"time"
|
||||
)
|
||||
|
||||
func Logger() router.HandlerFunc {
|
||||
return func(c *router.Context) {
|
||||
start := time.Now()
|
||||
c.Next()
|
||||
log.Printf("[%s] %s in %v", c.Request.Method, c.Request.URL.Path, time.Since(start))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"base-framework/pkg/router"
|
||||
"log"
|
||||
"net/http"
|
||||
"runtime/debug"
|
||||
)
|
||||
|
||||
func Recover() router.HandlerFunc {
|
||||
return func(c *router.Context) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Printf("[PANIC] %v\n%s", err, debug.Stack())
|
||||
c.JSON(http.StatusInternalServerError, map[string]string{
|
||||
"error": "Internal Server Error",
|
||||
})
|
||||
}
|
||||
}()
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user