http.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. tcpForwardingHandler *handler.TcpforwardingHandler,
  23. udpForwardingHandler *handler.UdpForWardingHandler,
  24. ) *http.Server {
  25. gin.SetMode(gin.DebugMode)
  26. s := http.NewServer(
  27. gin.Default(),
  28. logger,
  29. http.WithServerHost(conf.GetString("http.host")),
  30. http.WithServerPort(conf.GetInt("http.port")),
  31. )
  32. // swagger doc
  33. docs.SwaggerInfo.BasePath = "/v1"
  34. s.GET("/swagger/*any", ginSwagger.WrapHandler(
  35. swaggerfiles.Handler,
  36. //ginSwagger.URL(fmt.Sprintf("http://localhost:%d/swagger/doc.json", conf.GetInt("app.http.port"))),
  37. ginSwagger.DefaultModelsExpandDepth(-1),
  38. ginSwagger.PersistAuthorization(true),
  39. ))
  40. s.Use(
  41. middleware.CORSMiddleware(),
  42. middleware.ResponseLogMiddleware(logger),
  43. middleware.RequestLogMiddleware(logger),
  44. //middleware.SignMiddleware(log),
  45. )
  46. s.GET("/", func(ctx *gin.Context) {
  47. logger.WithContext(ctx).Info("hello")
  48. apiV1.HandleSuccess(ctx, map[string]interface{}{
  49. ":)": "Thank you for using nunu!",
  50. })
  51. })
  52. v1 := s.Group("/v1")
  53. {
  54. // No route group has permission
  55. noAuthRouter := v1.Group("/")
  56. {
  57. noAuthRouter.POST("/register", userHandler.Register)
  58. noAuthRouter.POST("/login", userHandler.Login)
  59. noAuthRouter.POST("/gameShield/add", gameShieldHandler.SubmitGameShield)
  60. noAuthRouter.POST("/gameShield/getField", gameShieldHandler.GetGameShieldField)
  61. noAuthRouter.POST("/gameShield/getKey", gameShieldHandler.GetGameShieldKey)
  62. noAuthRouter.POST("/gameShield/edit", gameShieldHandler.EditGameShield)
  63. noAuthRouter.POST("/gameShield/delete", gameShieldHandler.DeleteGameShield)
  64. noAuthRouter.POST("/webForward/add", webForwardingHandler.AddWebForwarding)
  65. noAuthRouter.POST("/webForward/edit", webForwardingHandler.EditWebForwarding)
  66. noAuthRouter.POST("/webForward/delete", webForwardingHandler.DeleteWebForwarding)
  67. noAuthRouter.POST("/tcpForward/add", tcpForwardingHandler.AddTcpForwarding)
  68. noAuthRouter.POST("/tcpForward/edit", tcpForwardingHandler.EditTcpForwarding)
  69. noAuthRouter.POST("/tcpForward/delete", tcpForwardingHandler.DeleteTcpForwarding)
  70. noAuthRouter.POST("/udpForward/add", udpForwardingHandler.AddUdpForWarding)
  71. noAuthRouter.POST("/udpForward/edit", udpForwardingHandler.EditUdpForWarding)
  72. noAuthRouter.POST("/udpForward/delete", udpForwardingHandler.DeleteUdpForWarding)
  73. }
  74. // Non-strict permission routing group
  75. noStrictAuthRouter := v1.Group("/").Use(middleware.NoStrictAuth(jwt, logger))
  76. {
  77. noStrictAuthRouter.GET("/user", userHandler.GetProfile)
  78. }
  79. // Strict permission routing group
  80. strictAuthRouter := v1.Group("/").Use(middleware.StrictAuth(jwt, logger))
  81. {
  82. strictAuthRouter.PUT("/user", userHandler.UpdateProfile)
  83. }
  84. }
  85. return s
  86. }