http.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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/log"
  10. "github.com/go-nunu/nunu-layout-advanced/pkg/server/http"
  11. "github.com/spf13/viper"
  12. swaggerfiles "github.com/swaggo/files"
  13. ginSwagger "github.com/swaggo/gin-swagger"
  14. )
  15. func NewHTTPServer(
  16. logger *log.Logger,
  17. conf *viper.Viper,
  18. jwt *jwt.JWT,
  19. userHandler *handler.UserHandler,
  20. gameShieldHandler *handler.GameShieldHandler,
  21. webForwardingHandler *handler.WebForwardingHandler,
  22. weblimitHandler *handler.WebLimitHandler,
  23. tcpForwardingHandler *handler.TcpforwardingHandler,
  24. udpForwardingHandler *handler.UdpForWardingHandler,
  25. tcpLimitHandler *handler.TcpLimitHandler,
  26. ) *http.Server {
  27. gin.SetMode(gin.DebugMode)
  28. s := http.NewServer(
  29. gin.Default(),
  30. logger,
  31. http.WithServerHost(conf.GetString("http.host")),
  32. http.WithServerPort(conf.GetInt("http.port")),
  33. )
  34. // swagger doc
  35. docs.SwaggerInfo.BasePath = "/v1"
  36. s.GET("/swagger/*any", ginSwagger.WrapHandler(
  37. swaggerfiles.Handler,
  38. //ginSwagger.URL(fmt.Sprintf("http://localhost:%d/swagger/doc.json", conf.GetInt("app.http.port"))),
  39. ginSwagger.DefaultModelsExpandDepth(-1),
  40. ginSwagger.PersistAuthorization(true),
  41. ))
  42. s.Use(
  43. middleware.CORSMiddleware(),
  44. middleware.ResponseLogMiddleware(logger),
  45. middleware.RequestLogMiddleware(logger),
  46. //middleware.SignMiddleware(log),
  47. )
  48. s.GET("/", func(ctx *gin.Context) {
  49. logger.WithContext(ctx).Info("hello")
  50. apiV1.HandleSuccess(ctx, map[string]interface{}{
  51. ":)": "Thank you for using nunu!",
  52. })
  53. })
  54. v1 := s.Group("/v1")
  55. {
  56. // No route group has permission
  57. noAuthRouter := v1.Group("/")
  58. {
  59. noAuthRouter.POST("/register", userHandler.Register)
  60. noAuthRouter.POST("/login", userHandler.Login)
  61. noAuthRouter.POST("/gameShield/add", gameShieldHandler.SubmitGameShield)
  62. noAuthRouter.POST("/gameShield/getField", gameShieldHandler.GetGameShieldField)
  63. noAuthRouter.POST("/gameShield/getKey", gameShieldHandler.GetGameShieldKey)
  64. noAuthRouter.POST("/gameShield/edit", gameShieldHandler.EditGameShield)
  65. noAuthRouter.POST("/gameShield/delete", gameShieldHandler.DeleteGameShield)
  66. noAuthRouter.POST("/webForward/add", webForwardingHandler.AddWebForwarding)
  67. noAuthRouter.POST("/webForward/edit", webForwardingHandler.EditWebForwarding)
  68. noAuthRouter.POST("/webForward/delete", webForwardingHandler.DeleteWebForwarding)
  69. noAuthRouter.POST("/webLimit/add", weblimitHandler.AddWebLimit)
  70. noAuthRouter.POST("/webLimit/edit", weblimitHandler.EditWebLimit)
  71. noAuthRouter.POST("/webLimit/delete", weblimitHandler.DeleteWebLimit)
  72. noAuthRouter.POST("/tcpForward/add", tcpForwardingHandler.AddTcpForwarding)
  73. noAuthRouter.POST("/tcpForward/edit", tcpForwardingHandler.EditTcpForwarding)
  74. noAuthRouter.POST("/tcpForward/delete", tcpForwardingHandler.DeleteTcpForwarding)
  75. noAuthRouter.POST("/udpForward/add", udpForwardingHandler.AddUdpForWarding)
  76. noAuthRouter.POST("/udpForward/edit", udpForwardingHandler.EditUdpForWarding)
  77. noAuthRouter.POST("/udpForward/delete", udpForwardingHandler.DeleteUdpForWarding)
  78. noAuthRouter.POST("/tcpLimit/add", tcpLimitHandler.AddTcpLimit)
  79. noAuthRouter.POST("/tcpLimit/edit", tcpLimitHandler.EditTcpLimit)
  80. noAuthRouter.POST("/tcpLimit/delete", tcpLimitHandler.DeleteTcpLimit)
  81. }
  82. // Non-strict permission routing group
  83. noStrictAuthRouter := v1.Group("/").Use(middleware.NoStrictAuth(jwt, logger))
  84. {
  85. noStrictAuthRouter.GET("/user", userHandler.GetProfile)
  86. }
  87. // Strict permission routing group
  88. strictAuthRouter := v1.Group("/").Use(middleware.StrictAuth(jwt, logger))
  89. {
  90. strictAuthRouter.PUT("/user", userHandler.UpdateProfile)
  91. }
  92. }
  93. return s
  94. }