update auth app

This commit is contained in:
ivamp 2024-06-16 14:00:31 +08:00
parent 5dc1df3e2f
commit 3422f450f1
10 changed files with 31 additions and 69 deletions

View File

@ -1,4 +1,4 @@
package user package auth
type UserTokenInfo struct { type UserTokenInfo struct {
Exp int `json:"exp"` Exp int `json:"exp"`
@ -26,5 +26,3 @@ type UserTokenInfo struct {
type User struct { type User struct {
Token UserTokenInfo Token UserTokenInfo
} }
const UserTokenInfoKey = "user.jwt"

View File

@ -2,36 +2,15 @@ package gin
import ( import (
"fmt" "fmt"
"framework_v2/internal/app/auth"
"framework_v2/internal/app/facades" "framework_v2/internal/app/facades"
"framework_v2/internal/app/helpers" "framework_v2/internal/app/helpers"
"framework_v2/internal/app/user"
http2 "framework_v2/internal/middleware/http" http2 "framework_v2/internal/middleware/http"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"net/http" "net/http"
"reflect" "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{}) { func GET(relativePath string, handlers ...interface{}) {
facades.Router.GET(relativePath, func(c *gin.Context) { facades.Router.GET(relativePath, func(c *gin.Context) {
doHandler(c, handlers...) doHandler(c, handlers...)
@ -92,7 +71,7 @@ func wrapHandler(c *gin.Context, f interface{}) {
switch argType { switch argType {
case reflect.TypeOf((*gin.Context)(nil)): case reflect.TypeOf((*gin.Context)(nil)):
argValue = reflect.ValueOf(c) argValue = reflect.ValueOf(c)
case reflect.TypeOf((*user.User)(nil)): case reflect.TypeOf((*auth.User)(nil)):
userInfo := http2.DIJWTAuth(c) userInfo := http2.DIJWTAuth(c)
if userInfo == nil { if userInfo == nil {
helpers.ResponseError(c, http.StatusUnauthorized, http2.ErrNotValidToken) helpers.ResponseError(c, http.StatusUnauthorized, http2.ErrNotValidToken)

View File

@ -2,6 +2,8 @@ package gin
import ( import (
"framework_v2/internal/app/facades" "framework_v2/internal/app/facades"
"framework_v2/internal/http/controllers/user"
"framework_v2/internal/middleware/http"
ginzap "github.com/gin-contrib/zap" ginzap "github.com/gin-contrib/zap"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"time" "time"
@ -13,4 +15,10 @@ func InitGin() {
facades.Router = gin.New() facades.Router = gin.New()
facades.Router.Use(ginzap.Ginzap(facades.Logger, time.RFC3339, true)) facades.Router.Use(ginzap.Ginzap(facades.Logger, time.RFC3339, true))
InitApiRoutes()
}
func InitApiRoutes() {
GET("/", http.MiddlewareJSONResponse, user.CurrentUser)
} }

View File

@ -7,7 +7,6 @@ import (
"framework_v2/internal/app/jobs" "framework_v2/internal/app/jobs"
"framework_v2/internal/app/jwks" "framework_v2/internal/app/jwks"
"framework_v2/internal/app/logger" "framework_v2/internal/app/logger"
"framework_v2/internal/routes"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -23,7 +22,6 @@ var httpCommand = &cobra.Command{
jwks.InitJwksRefresh() jwks.InitJwksRefresh()
jobs.InitAsynQClient() jobs.InitAsynQClient()
gin.InitGin() gin.InitGin()
routes.InitHttp()
StartHttp() StartHttp()
}, },

View File

@ -2,7 +2,7 @@ package user
import ( import (
"fmt" "fmt"
"framework_v2/internal/app/user" "framework_v2/internal/app/auth"
"github.com/gin-gonic/gin" "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) fmt.Println("CurrentUser", user)
c.JSON(200, gin.H{ c.JSON(200, gin.H{
"IP": c.ClientIP(), "IP": c.ClientIP(),

View File

@ -2,10 +2,10 @@ package grpc
import ( import (
"context" "context"
auth2 "framework_v2/internal/app/auth"
"framework_v2/internal/app/config" "framework_v2/internal/app/config"
"framework_v2/internal/app/jwks" "framework_v2/internal/app/jwks"
"framework_v2/internal/app/logger" "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/auth"
"github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging" "github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging"
"github.com/mitchellh/mapstructure" "github.com/mitchellh/mapstructure"
@ -20,12 +20,10 @@ func JwtAuth(ctx context.Context) (context.Context, error) {
} }
sub := "anonymous" sub := "anonymous"
var jwtIdToken *user.UserTokenInfo var jwtIdToken *auth2.User
if config.Config.DebugMode.Enable { if config.Config.DebugMode.Enable {
jwtIdToken = &user.UserTokenInfo{ jwtIdToken.Token.Sub = sub
Sub: sub,
}
} else { } else {
token, err := jwks.ParseJWT(tokenString) token, err := jwks.ParseJWT(tokenString)
if err != nil { if err != nil {

View File

@ -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()
}

View File

@ -2,17 +2,19 @@ package http
import ( import (
"errors" "errors"
"framework_v2/internal/app/auth"
"framework_v2/internal/app/config" "framework_v2/internal/app/config"
"framework_v2/internal/app/facades" "framework_v2/internal/app/facades"
"framework_v2/internal/app/helpers" "framework_v2/internal/app/helpers"
"framework_v2/internal/app/jwks" "framework_v2/internal/app/jwks"
"framework_v2/internal/app/user"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/mitchellh/mapstructure" "github.com/mitchellh/mapstructure"
"net/http" "net/http"
"strings" "strings"
) )
const AnonymousUser = "anonymous"
var ( var (
ErrNotValidToken = errors.New("无效的 JWT 令牌。") ErrNotValidToken = errors.New("无效的 JWT 令牌。")
ErrJWTFormatError = errors.New("JWT 格式错误。") ErrJWTFormatError = errors.New("JWT 格式错误。")
@ -20,12 +22,10 @@ var (
ErrEmptyResponse = errors.New("我们的服务器返回了空请求,可能某些环节出了问题。") ErrEmptyResponse = errors.New("我们的服务器返回了空请求,可能某些环节出了问题。")
) )
const AnonymousUser = "anonymous"
// DIJWTAuth 用于注入到方法签名中。我觉得下面的代码以后可以优化。 // DIJWTAuth 用于注入到方法签名中。我觉得下面的代码以后可以优化。
func DIJWTAuth(c *gin.Context) *user.User { func DIJWTAuth(c *gin.Context) *auth.User {
var sub = AnonymousUser var sub = AnonymousUser
var jwtIdToken = &user.User{} var jwtIdToken = &auth.User{}
if config.Config.DebugMode.Enable { if config.Config.DebugMode.Enable {
jwtIdToken.Token.Sub = sub jwtIdToken.Token.Sub = sub
@ -70,8 +70,3 @@ func DIJWTAuth(c *gin.Context) *user.User {
return jwtIdToken return jwtIdToken
} }
func MiddlewareJSONResponse(c *gin.Context) {
c.Header("Content-Type", "application/json; charset=utf-8")
c.Next()
}

View File

@ -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)
}

View File

@ -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()
}