diff --git a/internal/app/user/user.go b/internal/app/auth/user.go similarity index 95% rename from internal/app/user/user.go rename to internal/app/auth/user.go index e0b9899..a822ce1 100644 --- a/internal/app/user/user.go +++ b/internal/app/auth/user.go @@ -1,4 +1,4 @@ -package user +package auth type UserTokenInfo struct { Exp int `json:"exp"` @@ -26,5 +26,3 @@ type UserTokenInfo struct { type User struct { Token UserTokenInfo } - -const UserTokenInfoKey = "user.jwt" diff --git a/internal/app/gin/route.go b/internal/app/gin/gin.go similarity index 76% rename from internal/app/gin/route.go rename to internal/app/gin/gin.go index 212aa59..e177ef6 100644 --- a/internal/app/gin/route.go +++ b/internal/app/gin/gin.go @@ -2,36 +2,15 @@ package gin import ( "fmt" + "framework_v2/internal/app/auth" "framework_v2/internal/app/facades" "framework_v2/internal/app/helpers" - "framework_v2/internal/app/user" http2 "framework_v2/internal/middleware/http" "github.com/gin-gonic/gin" "net/http" "reflect" ) -//func HandleRoute(method httpMethod, relativePath string, controller HandlerFunc, middlewares ...gin.HandlerFunc) { -// access.Router.Handle(method.String(), relativePath, func(c *gin.Context) { -// for _, middleware := range middlewares { -// middleware(c) -// } -// -// if !c.IsAborted() { -// handleWithMetadata(c, controller) -// } -// }) -//} - -//func handleWithMetadata(c *gin.Context, controller HandlerFunc) { -// var metadata = &consts.Request{ -// Http: c, -// User: GetAuthFromCtx(c), -// } -// -// controller(metadata) -//} - func GET(relativePath string, handlers ...interface{}) { facades.Router.GET(relativePath, func(c *gin.Context) { doHandler(c, handlers...) @@ -92,7 +71,7 @@ func wrapHandler(c *gin.Context, f interface{}) { switch argType { case reflect.TypeOf((*gin.Context)(nil)): argValue = reflect.ValueOf(c) - case reflect.TypeOf((*user.User)(nil)): + case reflect.TypeOf((*auth.User)(nil)): userInfo := http2.DIJWTAuth(c) if userInfo == nil { helpers.ResponseError(c, http.StatusUnauthorized, http2.ErrNotValidToken) diff --git a/internal/app/gin/init.go b/internal/app/gin/init.go index 129c2e9..3bb0f6b 100644 --- a/internal/app/gin/init.go +++ b/internal/app/gin/init.go @@ -2,6 +2,8 @@ package gin import ( "framework_v2/internal/app/facades" + "framework_v2/internal/http/controllers/user" + "framework_v2/internal/middleware/http" ginzap "github.com/gin-contrib/zap" "github.com/gin-gonic/gin" "time" @@ -13,4 +15,10 @@ func InitGin() { facades.Router = gin.New() facades.Router.Use(ginzap.Ginzap(facades.Logger, time.RFC3339, true)) + + InitApiRoutes() +} + +func InitApiRoutes() { + GET("/", http.MiddlewareJSONResponse, user.CurrentUser) } diff --git a/internal/cmd/http.go b/internal/cmd/http.go index 604054b..df32b09 100644 --- a/internal/cmd/http.go +++ b/internal/cmd/http.go @@ -7,7 +7,6 @@ import ( "framework_v2/internal/app/jobs" "framework_v2/internal/app/jwks" "framework_v2/internal/app/logger" - "framework_v2/internal/routes" "github.com/spf13/cobra" ) @@ -23,7 +22,6 @@ var httpCommand = &cobra.Command{ jwks.InitJwksRefresh() jobs.InitAsynQClient() gin.InitGin() - routes.InitHttp() StartHttp() }, diff --git a/internal/http/controllers/user/main.go b/internal/http/controllers/user/main.go index e76aef0..7e53f26 100644 --- a/internal/http/controllers/user/main.go +++ b/internal/http/controllers/user/main.go @@ -2,7 +2,7 @@ package user import ( "fmt" - "framework_v2/internal/app/user" + "framework_v2/internal/app/auth" "github.com/gin-gonic/gin" ) @@ -13,7 +13,7 @@ import ( // //} -func CurrentUser(c *gin.Context, user *user.User) { +func CurrentUser(c *gin.Context, user *auth.User) { fmt.Println("CurrentUser", user) c.JSON(200, gin.H{ "IP": c.ClientIP(), diff --git a/internal/middleware/grpc/auth.go b/internal/middleware/grpc/auth.go index 8c5b492..e8a88f3 100644 --- a/internal/middleware/grpc/auth.go +++ b/internal/middleware/grpc/auth.go @@ -2,10 +2,10 @@ package grpc import ( "context" + auth2 "framework_v2/internal/app/auth" "framework_v2/internal/app/config" "framework_v2/internal/app/jwks" "framework_v2/internal/app/logger" - "framework_v2/internal/app/user" "github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/auth" "github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging" "github.com/mitchellh/mapstructure" @@ -20,12 +20,10 @@ func JwtAuth(ctx context.Context) (context.Context, error) { } sub := "anonymous" - var jwtIdToken *user.UserTokenInfo + var jwtIdToken *auth2.User if config.Config.DebugMode.Enable { - jwtIdToken = &user.UserTokenInfo{ - Sub: sub, - } + jwtIdToken.Token.Sub = sub } else { token, err := jwks.ParseJWT(tokenString) if err != nil { diff --git a/internal/middleware/http/json_response.go b/internal/middleware/http/json_response.go new file mode 100644 index 0000000..58dd601 --- /dev/null +++ b/internal/middleware/http/json_response.go @@ -0,0 +1,10 @@ +package http + +import ( + "github.com/gin-gonic/gin" +) + +func MiddlewareJSONResponse(c *gin.Context) { + c.Header("Content-Type", "application/json; charset=utf-8") + c.Next() +} diff --git a/internal/middleware/http/gin_middleware.go b/internal/middleware/http/jwt.go similarity index 89% rename from internal/middleware/http/gin_middleware.go rename to internal/middleware/http/jwt.go index 776ef76..5df7dc1 100644 --- a/internal/middleware/http/gin_middleware.go +++ b/internal/middleware/http/jwt.go @@ -2,17 +2,19 @@ package http import ( "errors" + "framework_v2/internal/app/auth" "framework_v2/internal/app/config" "framework_v2/internal/app/facades" "framework_v2/internal/app/helpers" "framework_v2/internal/app/jwks" - "framework_v2/internal/app/user" "github.com/gin-gonic/gin" "github.com/mitchellh/mapstructure" "net/http" "strings" ) +const AnonymousUser = "anonymous" + var ( ErrNotValidToken = errors.New("无效的 JWT 令牌。") ErrJWTFormatError = errors.New("JWT 格式错误。") @@ -20,12 +22,10 @@ var ( ErrEmptyResponse = errors.New("我们的服务器返回了空请求,可能某些环节出了问题。") ) -const AnonymousUser = "anonymous" - // DIJWTAuth 用于注入到方法签名中。我觉得下面的代码以后可以优化。 -func DIJWTAuth(c *gin.Context) *user.User { +func DIJWTAuth(c *gin.Context) *auth.User { var sub = AnonymousUser - var jwtIdToken = &user.User{} + var jwtIdToken = &auth.User{} if config.Config.DebugMode.Enable { jwtIdToken.Token.Sub = sub @@ -70,8 +70,3 @@ func DIJWTAuth(c *gin.Context) *user.User { return jwtIdToken } - -func MiddlewareJSONResponse(c *gin.Context) { - c.Header("Content-Type", "application/json; charset=utf-8") - c.Next() -} diff --git a/internal/routes/api_routes.go b/internal/routes/api_routes.go deleted file mode 100644 index 2b5bc7f..0000000 --- a/internal/routes/api_routes.go +++ /dev/null @@ -1,11 +0,0 @@ -package routes - -import ( - "framework_v2/internal/app/gin" - "framework_v2/internal/http/controllers/user" - "framework_v2/internal/middleware/http" -) - -func InitApiRoutes() { - gin.GET("/", http.MiddlewareJSONResponse, user.CurrentUser) -} diff --git a/internal/routes/init.go b/internal/routes/init.go deleted file mode 100644 index 7901490..0000000 --- a/internal/routes/init.go +++ /dev/null @@ -1,13 +0,0 @@ -package routes - -import ( - "framework_v2/internal/app/facades" -) - -func InitHttp() { - if facades.Router == nil { - panic("You must call InitGin() before InitHttp()") - } - - InitApiRoutes() -}