api.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package api
  2. import (
  3. "context"
  4. "fmt"
  5. "moutai/conf"
  6. "moutai/db"
  7. "moutai/db/repo"
  8. "moutai/middleware"
  9. "os"
  10. "github.com/casdoor/casdoor-go-sdk/casdoorsdk"
  11. "github.com/gin-contrib/cors"
  12. "github.com/gin-gonic/gin"
  13. "github.com/go-redis/redis/v8"
  14. )
  15. type Service struct {
  16. Gin *gin.Engine
  17. Mongo *db.MongoDB
  18. Redis *redis.Client
  19. Port int32
  20. JWT *UtilsJwt
  21. Conf *conf.AppConf
  22. }
  23. func (svc *Service) Run() {
  24. svc.Gin.Run(fmt.Sprintf(":%d", svc.Port))
  25. }
  26. type ApiSession struct {
  27. Svc *Service
  28. // User *JWTUser
  29. User *casdoorsdk.Claims
  30. }
  31. func (api *ApiSession) CreateRepoCtx() *repo.RepoSession {
  32. return &repo.RepoSession{
  33. Ctx: context.Background(),
  34. Client: api.Svc.Mongo,
  35. }
  36. }
  37. func NewHttpService(app *conf.AppConf, dbMongo *db.MongoDB, redisClient *redis.Client) *Service {
  38. authConf := app.Auth
  39. pemByte, err := os.ReadFile(authConf.Certificate)
  40. if err != nil {
  41. panic(err)
  42. }
  43. casdoorsdk.InitConfig(authConf.Endpoint, authConf.ClientId, authConf.ClientSecret, string(pemByte), authConf.OrganizationName, authConf.ApplicationName)
  44. engine := gin.Default()
  45. // store := cookie.NewStore([]byte("spu3d-server"))
  46. // engine.Use(sessions.Sessions("dcsession", store))
  47. engine.Static("/crsvc/pkg", "package")
  48. config := cors.DefaultConfig()
  49. // config.AllowOrigins == []string{"http://google.com", "http://facebook.com"}
  50. config.AllowAllOrigins = true
  51. config.AllowHeaders = append(config.AllowHeaders, "authorization")
  52. engine.Use(cors.New(config))
  53. jwt := NewUitlsJwt(app)
  54. s := &Service{Conf: app, Redis: redisClient, JWT: jwt, Gin: engine, Mongo: dbMongo, Port: app.Port}
  55. RegRouters(s)
  56. return s
  57. }
  58. // GinRouter 路由
  59. type GinRouter struct {
  60. group *gin.RouterGroup
  61. svc *Service
  62. }
  63. func (svc *Service) NewGinRouter(path string) *GinRouter {
  64. return &GinRouter{group: svc.Gin.Group(path), svc: svc}
  65. }
  66. // RouterInterface 路由接口
  67. type RouterInterface interface {
  68. GET(path string, httpHandler Handler)
  69. POST(path string, httpHandler Handler)
  70. }
  71. // GET http Get 请求
  72. func (g GinRouter) GET(path string, httpHandler Handler) {
  73. g.group.GET(path, ResultWrapper(httpHandler, g.svc))
  74. }
  75. // POST http POST 请求
  76. func (g GinRouter) POST(path string, httpHandler Handler) {
  77. g.group.POST(path, ResultWrapper(httpHandler, g.svc))
  78. }
  79. // GETJWT http Get 请求
  80. func (g GinRouter) GETJWT(path string, httpHandler JWTHander) {
  81. g.group.GET(path, middleware.CasdoorAuthMiddleware(), ResultJWTWrapper(httpHandler, g.svc))
  82. }
  83. // POSTJWT http POST 请求
  84. func (g GinRouter) POSTJWT(path string, httpHandler JWTHander) {
  85. g.group.POST(path, middleware.CasdoorAuthMiddleware(), ResultJWTWrapper(httpHandler, g.svc))
  86. }
  87. // DeleteJWT http POST 请求
  88. func (g GinRouter) DeleteJWT(path string, httpHandler JWTHander) {
  89. g.group.DELETE(path, g.svc.JWT.MiddleFunc(), ResultJWTWrapper(httpHandler, g.svc))
  90. }
  91. // 代参数判断权限
  92. func (g GinRouter) GETJWTKEY(path string, httpHandler JWTHander, keys ...string) {
  93. g.group.GET(path, g.svc.JWT.MiddleFunc(), ResultJWTWrapperKey(httpHandler, g.svc, keys))
  94. }
  95. func (g GinRouter) POSTJWTKEY(path string, httpHandler JWTHander, keys ...string) {
  96. g.group.POST(path, g.svc.JWT.MiddleFunc(), ResultJWTWrapperKey(httpHandler, g.svc, keys))
  97. }