http.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package server
  2. import (
  3. "github.com/gin-gonic/gin"
  4. apiV1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
  5. "github.com/go-nunu/nunu-layout-advanced/docs"
  6. "github.com/go-nunu/nunu-layout-advanced/internal/handler"
  7. "github.com/go-nunu/nunu-layout-advanced/internal/middleware"
  8. "github.com/go-nunu/nunu-layout-advanced/pkg/jwt"
  9. "github.com/go-nunu/nunu-layout-advanced/pkg/limiter"
  10. "github.com/go-nunu/nunu-layout-advanced/pkg/log"
  11. "github.com/go-nunu/nunu-layout-advanced/pkg/server/http"
  12. "github.com/spf13/viper"
  13. swaggerfiles "github.com/swaggo/files"
  14. ginSwagger "github.com/swaggo/gin-swagger"
  15. )
  16. func NewHTTPServer(
  17. logger *log.Logger,
  18. conf *viper.Viper,
  19. jwt *jwt.JWT,
  20. limiterInstance *limiter.Limiter,
  21. rateLimitMiddleware gin.HandlerFunc,
  22. userHandler *handler.UserHandler,
  23. gameShieldHandler *handler.GameShieldHandler,
  24. webForwardingHandler *handler.WebForwardingHandler,
  25. weblimitHandler *handler.WebLimitHandler,
  26. tcpForwardingHandler *handler.TcpforwardingHandler,
  27. udpForwardingHandler *handler.UdpForWardingHandler,
  28. tcpLimitHandler *handler.TcpLimitHandler,
  29. udpLimitHandler *handler.UdpLimitHandler,
  30. ) *http.Server {
  31. gin.SetMode(gin.DebugMode)
  32. s := http.NewServer(
  33. gin.Default(),
  34. logger,
  35. http.WithServerHost(conf.GetString("http.host")),
  36. http.WithServerPort(conf.GetInt("http.port")),
  37. )
  38. // swagger doc
  39. docs.SwaggerInfo.BasePath = "/v1"
  40. s.GET("/swagger/*any", ginSwagger.WrapHandler(
  41. swaggerfiles.Handler,
  42. //ginSwagger.URL(fmt.Sprintf("http://localhost:%d/swagger/doc.json", conf.GetInt("app.http.port"))),
  43. ginSwagger.DefaultModelsExpandDepth(-1),
  44. ginSwagger.PersistAuthorization(true),
  45. ))
  46. s.Use(
  47. middleware.CORSMiddleware(),
  48. middleware.ResponseLogMiddleware(logger),
  49. middleware.RequestLogMiddleware(logger),
  50. //middleware.SignMiddleware(log),
  51. rateLimitMiddleware,
  52. )
  53. s.GET("/", func(ctx *gin.Context) {
  54. logger.WithContext(ctx).Info("hello")
  55. apiV1.HandleSuccess(ctx, map[string]interface{}{
  56. ":)": "Thank you for using nunu!",
  57. })
  58. })
  59. v1 := s.Group("/v1")
  60. {
  61. // No route group has permission
  62. noAuthRouter := v1.Group("/")
  63. {
  64. // 使用增强的Limiter.GetAPIConfig方法获取特定API的限流配置
  65. // 登录API限流
  66. loginConfig := limiterInstance.GetAPIConfig("login")
  67. noAuthRouter.POST("/login", middleware.IPRateLimitMiddleware(loginConfig), userHandler.Login)
  68. // 注册API限流
  69. registerConfig := limiterInstance.GetAPIConfig("register")
  70. noAuthRouter.POST("/register", middleware.IPRateLimitMiddleware(registerConfig), userHandler.Register)
  71. noAuthRouter.POST("/gameShield/add", gameShieldHandler.SubmitGameShield)
  72. noAuthRouter.POST("/gameShield/getField", gameShieldHandler.GetGameShieldField)
  73. noAuthRouter.POST("/gameShield/getKey", gameShieldHandler.GetGameShieldKey)
  74. noAuthRouter.POST("/gameShield/edit", gameShieldHandler.EditGameShield)
  75. noAuthRouter.POST("/gameShield/delete", gameShieldHandler.DeleteGameShield)
  76. noAuthRouter.POST("/webForward/add", webForwardingHandler.AddWebForwarding)
  77. noAuthRouter.POST("/webForward/edit", webForwardingHandler.EditWebForwarding)
  78. noAuthRouter.POST("/webForward/delete", webForwardingHandler.DeleteWebForwarding)
  79. noAuthRouter.POST("/webLimit/add", weblimitHandler.AddWebLimit)
  80. noAuthRouter.POST("/webLimit/edit", weblimitHandler.EditWebLimit)
  81. noAuthRouter.POST("/webLimit/delete", weblimitHandler.DeleteWebLimit)
  82. noAuthRouter.POST("/tcpForward/add", tcpForwardingHandler.AddTcpForwarding)
  83. noAuthRouter.POST("/tcpForward/edit", tcpForwardingHandler.EditTcpForwarding)
  84. noAuthRouter.POST("/tcpForward/delete", tcpForwardingHandler.DeleteTcpForwarding)
  85. noAuthRouter.POST("/udpForward/add", udpForwardingHandler.AddUdpForWarding)
  86. noAuthRouter.POST("/udpForward/edit", udpForwardingHandler.EditUdpForWarding)
  87. noAuthRouter.POST("/udpForward/delete", udpForwardingHandler.DeleteUdpForWarding)
  88. noAuthRouter.POST("/tcpLimit/add", tcpLimitHandler.AddTcpLimit)
  89. noAuthRouter.POST("/tcpLimit/edit", tcpLimitHandler.EditTcpLimit)
  90. noAuthRouter.POST("/tcpLimit/delete", tcpLimitHandler.DeleteTcpLimit)
  91. noAuthRouter.POST("/udpLimit/add", udpLimitHandler.AddUdpLimit)
  92. noAuthRouter.POST("/udpLimit/edit", udpLimitHandler.EditUdpLimit)
  93. noAuthRouter.POST("/udpLimit/delete", udpLimitHandler.DeleteUdpLimit)
  94. }
  95. // Non-strict permission routing group
  96. noStrictAuthRouter := v1.Group("/").Use(middleware.NoStrictAuth(jwt, logger))
  97. {
  98. noStrictAuthRouter.GET("/user", userHandler.GetProfile)
  99. }
  100. // Strict permission routing group
  101. strictAuthRouter := v1.Group("/").Use(middleware.StrictAuth(jwt, logger))
  102. {
  103. strictAuthRouter.PUT("/user", userHandler.UpdateProfile)
  104. }
  105. }
  106. return s
  107. }