nunu-layout-admin/internal/server/http.go

102 lines
3.4 KiB
Go

package server
import (
"github.com/casbin/casbin/v2"
"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
"github.com/spf13/viper"
swaggerfiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
nethttp "net/http"
"nunu-layout-admin/docs"
"nunu-layout-admin/internal/handler"
"nunu-layout-admin/internal/middleware"
"nunu-layout-admin/pkg/jwt"
"nunu-layout-admin/pkg/log"
"nunu-layout-admin/pkg/server/http"
"nunu-layout-admin/web"
)
func NewHTTPServer(
logger *log.Logger,
conf *viper.Viper,
jwt *jwt.JWT,
e *casbin.SyncedEnforcer,
adminHandler *handler.AdminHandler,
userHandler *handler.UserHandler,
) *http.Server {
gin.SetMode(gin.DebugMode)
s := http.NewServer(
gin.Default(),
logger,
http.WithServerHost(conf.GetString("http.host")),
http.WithServerPort(conf.GetInt("http.port")),
)
// 设置前端静态资源
s.Use(static.Serve("/", static.EmbedFolder(web.Assets(), "dist")))
s.NoRoute(func(c *gin.Context) {
indexPageData, err := web.Assets().ReadFile("dist/index.html")
if err != nil {
c.String(nethttp.StatusNotFound, "404 page not found")
return
}
c.Data(nethttp.StatusOK, "text/html; charset=utf-8", indexPageData)
})
// swagger doc
docs.SwaggerInfo.BasePath = "/"
s.GET("/swagger/*any", ginSwagger.WrapHandler(
swaggerfiles.Handler,
//ginSwagger.URL(fmt.Sprintf("http://localhost:%d/swagger/doc.json", conf.GetInt("app.http.port"))),
ginSwagger.DefaultModelsExpandDepth(-1),
ginSwagger.PersistAuthorization(true),
))
s.Use(
middleware.CORSMiddleware(),
middleware.ResponseLogMiddleware(logger),
middleware.RequestLogMiddleware(logger),
//middleware.SignMiddleware(log),
)
v1 := s.Group("/v1")
{
// No route group has permission
noAuthRouter := v1.Group("/")
{
noAuthRouter.POST("/login", adminHandler.Login)
}
// Strict permission routing group
strictAuthRouter := v1.Group("/").Use(middleware.StrictAuth(jwt, logger), middleware.AuthMiddleware(e))
{
strictAuthRouter.GET("/users", userHandler.GetUsers)
strictAuthRouter.GET("/menus", adminHandler.GetMenus)
strictAuthRouter.GET("/admin/menus", adminHandler.GetAdminMenus)
strictAuthRouter.POST("/admin/menu", adminHandler.MenuCreate)
strictAuthRouter.PUT("/admin/menu", adminHandler.MenuUpdate)
strictAuthRouter.DELETE("/admin/menu", adminHandler.MenuDelete)
strictAuthRouter.GET("/admin/users", adminHandler.GetAdminUsers)
strictAuthRouter.GET("/admin/user", adminHandler.GetAdminUser)
strictAuthRouter.PUT("/admin/user", adminHandler.AdminUserUpdate)
strictAuthRouter.POST("/admin/user", adminHandler.AdminUserCreate)
strictAuthRouter.DELETE("/admin/user", adminHandler.AdminUserDelete)
strictAuthRouter.GET("/admin/user/permissions", adminHandler.GetUserPermissions)
strictAuthRouter.GET("/admin/role/permissions", adminHandler.GetRolePermissions)
strictAuthRouter.PUT("/admin/role/permission", adminHandler.UpdateRolePermission)
strictAuthRouter.GET("/admin/roles", adminHandler.GetRoles)
strictAuthRouter.POST("/admin/role", adminHandler.RoleCreate)
strictAuthRouter.PUT("/admin/role", adminHandler.RoleUpdate)
strictAuthRouter.DELETE("/admin/role", adminHandler.RoleDelete)
strictAuthRouter.GET("/admin/apis", adminHandler.GetApis)
strictAuthRouter.POST("/admin/api", adminHandler.ApiCreate)
strictAuthRouter.PUT("/admin/api", adminHandler.ApiUpdate)
strictAuthRouter.DELETE("/admin/api", adminHandler.ApiDelete)
}
}
return s
}