package api import ( "context" "fmt" "moutai/conf" "moutai/db" "moutai/db/repo" "moutai/middleware" "os" "github.com/casdoor/casdoor-go-sdk/casdoorsdk" "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" "github.com/go-redis/redis/v8" ) type Service struct { Gin *gin.Engine Mongo *db.MongoDB Redis *redis.Client Port int32 JWT *UtilsJwt Conf *conf.AppConf } func (svc *Service) Run() { svc.Gin.Run(fmt.Sprintf(":%d", svc.Port)) } type ApiSession struct { Svc *Service // User *JWTUser User *casdoorsdk.Claims } func (api *ApiSession) CreateRepoCtx() *repo.RepoSession { return &repo.RepoSession{ Ctx: context.Background(), Client: api.Svc.Mongo, } } func NewHttpService(app *conf.AppConf, dbMongo *db.MongoDB, redisClient *redis.Client) *Service { authConf := app.Auth pemByte, err := os.ReadFile(authConf.Certificate) if err != nil { panic(err) } casdoorsdk.InitConfig(authConf.Endpoint, authConf.ClientId, authConf.ClientSecret, string(pemByte), authConf.OrganizationName, authConf.ApplicationName) engine := gin.Default() // store := cookie.NewStore([]byte("spu3d-server")) // engine.Use(sessions.Sessions("dcsession", store)) engine.Static("/crsvc/pkg", "package") config := cors.DefaultConfig() // config.AllowOrigins == []string{"http://google.com", "http://facebook.com"} config.AllowAllOrigins = true config.AllowHeaders = append(config.AllowHeaders, "authorization") engine.Use(cors.New(config)) jwt := NewUitlsJwt(app) s := &Service{Conf: app, Redis: redisClient, JWT: jwt, Gin: engine, Mongo: dbMongo, Port: app.Port} RegRouters(s) return s } // GinRouter 路由 type GinRouter struct { group *gin.RouterGroup svc *Service } func (svc *Service) NewGinRouter(path string) *GinRouter { return &GinRouter{group: svc.Gin.Group(path), svc: svc} } // RouterInterface 路由接口 type RouterInterface interface { GET(path string, httpHandler Handler) POST(path string, httpHandler Handler) } // GET http Get 请求 func (g GinRouter) GET(path string, httpHandler Handler) { g.group.GET(path, ResultWrapper(httpHandler, g.svc)) } // POST http POST 请求 func (g GinRouter) POST(path string, httpHandler Handler) { g.group.POST(path, ResultWrapper(httpHandler, g.svc)) } // GETJWT http Get 请求 func (g GinRouter) GETJWT(path string, httpHandler JWTHander) { g.group.GET(path, middleware.CasdoorAuthMiddleware(), ResultJWTWrapper(httpHandler, g.svc)) } // POSTJWT http POST 请求 func (g GinRouter) POSTJWT(path string, httpHandler JWTHander) { g.group.POST(path, middleware.CasdoorAuthMiddleware(), ResultJWTWrapper(httpHandler, g.svc)) } // DeleteJWT http POST 请求 func (g GinRouter) DeleteJWT(path string, httpHandler JWTHander) { g.group.DELETE(path, g.svc.JWT.MiddleFunc(), ResultJWTWrapper(httpHandler, g.svc)) } // 代参数判断权限 func (g GinRouter) GETJWTKEY(path string, httpHandler JWTHander, keys ...string) { g.group.GET(path, g.svc.JWT.MiddleFunc(), ResultJWTWrapperKey(httpHandler, g.svc, keys)) } func (g GinRouter) POSTJWTKEY(path string, httpHandler JWTHander, keys ...string) { g.group.POST(path, g.svc.JWT.MiddleFunc(), ResultJWTWrapperKey(httpHandler, g.svc, keys)) }