routers.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package router
  2. import (
  3. "encoding/base64"
  4. "github.com/0xJacky/Nginx-UI/server/api"
  5. "github.com/0xJacky/Nginx-UI/server/model"
  6. "github.com/gin-gonic/gin"
  7. "github.com/gin-gonic/gin/binding"
  8. "github.com/go-playground/locales/en"
  9. "github.com/go-playground/locales/zh"
  10. ut "github.com/go-playground/universal-translator"
  11. "github.com/go-playground/validator/v10"
  12. en_translations "github.com/go-playground/validator/v10/translations/en"
  13. zh_translations "github.com/go-playground/validator/v10/translations/zh"
  14. "net/http"
  15. )
  16. func authRequired() gin.HandlerFunc {
  17. return func(c *gin.Context) {
  18. token := c.GetHeader("Authorization")
  19. if token == "" {
  20. tmp, _ := base64.StdEncoding.DecodeString(c.Query("token"))
  21. token = string(tmp)
  22. if token == "" {
  23. c.JSON(http.StatusForbidden, gin.H{
  24. "message": "auth fail",
  25. })
  26. c.Abort()
  27. return
  28. }
  29. }
  30. n := model.CheckToken(token)
  31. if n < 1 {
  32. c.JSON(http.StatusForbidden, gin.H{
  33. "message": "auth fail",
  34. })
  35. c.Abort()
  36. return
  37. }
  38. c.Next()
  39. }
  40. }
  41. func Translations() gin.HandlerFunc {
  42. return func(c *gin.Context) {
  43. uni := ut.New(en.New(), zh.New())
  44. locale := c.GetHeader("locale")
  45. trans, _ := uni.GetTranslator(locale)
  46. v, ok := binding.Validator.Engine().(*validator.Validate)
  47. if ok {
  48. switch locale {
  49. case "zh":
  50. _ = zh_translations.RegisterDefaultTranslations(v, trans)
  51. break
  52. case "en":
  53. _ = en_translations.RegisterDefaultTranslations(v, trans)
  54. break
  55. default:
  56. _ = zh_translations.RegisterDefaultTranslations(v, trans)
  57. break
  58. }
  59. c.Set("trans", trans)
  60. }
  61. c.Next()
  62. }
  63. }
  64. func InitRouter() *gin.Engine {
  65. r := gin.New()
  66. r.Use(gin.Logger())
  67. r.Use(gin.Recovery())
  68. r.Use(Translations())
  69. r.GET("/", func(c *gin.Context) {
  70. c.JSON(http.StatusOK, gin.H{
  71. "message": "Hello World",
  72. })
  73. })
  74. r.GET("install", api.InstallLockCheck)
  75. r.POST("install", api.InstallNginxUI)
  76. r.POST("/login", api.Login)
  77. r.DELETE("/logout", api.Logout)
  78. g := r.Group("/", authRequired())
  79. {
  80. r.GET("/analytic", api.Analytic)
  81. g.GET("/users", api.GetUsers)
  82. g.GET("/user/:id", api.GetUser)
  83. g.POST("/user", api.AddUser)
  84. g.POST("/user/:id", api.EditUser)
  85. g.DELETE("/user/:id", api.DeleteUser)
  86. g.GET("domains", api.GetDomains)
  87. g.GET("domain/:name", api.GetDomain)
  88. g.POST("domain/:name", api.EditDomain)
  89. g.POST("domain/:name/enable", api.EnableDomain)
  90. g.POST("domain/:name/disable", api.DisableDomain)
  91. g.DELETE("domain/:name", api.DeleteDomain)
  92. g.GET("configs", api.GetConfigs)
  93. g.GET("config/:name", api.GetConfig)
  94. g.POST("config", api.AddConfig)
  95. g.POST("config/:name", api.EditConfig)
  96. g.GET("backups", api.GetFileBackupList)
  97. g.GET("backup/:id", api.GetFileBackup)
  98. g.GET("template/:name", api.GetTemplate)
  99. g.GET("cert/issue/:domain", api.IssueCert)
  100. g.GET("cert/:domain/info", api.CertInfo)
  101. }
  102. return r
  103. }