106 lines
2.0 KiB
Go
106 lines
2.0 KiB
Go
package initialize
|
|
|
|
import (
|
|
"net/http"
|
|
"os"
|
|
|
|
"kra/internal/conf"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// justFilesFilesystem 只允许访问文件的文件系统
|
|
type justFilesFilesystem struct {
|
|
fs http.FileSystem
|
|
}
|
|
|
|
func (fs justFilesFilesystem) Open(name string) (http.File, error) {
|
|
f, err := fs.fs.Open(name)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
stat, err := f.Stat()
|
|
if err != nil {
|
|
f.Close()
|
|
return nil, err
|
|
}
|
|
|
|
if stat.IsDir() {
|
|
f.Close()
|
|
return nil, os.ErrPermission
|
|
}
|
|
|
|
return f, nil
|
|
}
|
|
|
|
// RouterConfig 路由配置
|
|
type RouterConfig struct {
|
|
RouterPrefix string
|
|
StorePath string
|
|
SwaggerPath string
|
|
}
|
|
|
|
// NewRouterConfig 创建路由配置
|
|
func NewRouterConfig(system *conf.System, local *conf.Local) *RouterConfig {
|
|
cfg := &RouterConfig{
|
|
RouterPrefix: "",
|
|
StorePath: "uploads/file",
|
|
SwaggerPath: "/swagger/*any",
|
|
}
|
|
|
|
if system != nil {
|
|
cfg.RouterPrefix = system.RouterPrefix
|
|
}
|
|
|
|
if local != nil && local.StorePath != "" {
|
|
cfg.StorePath = local.StorePath
|
|
}
|
|
|
|
return cfg
|
|
}
|
|
|
|
// SetupStaticFiles 设置静态文件服务
|
|
func SetupStaticFiles(engine *gin.Engine, storePath string) {
|
|
if storePath != "" {
|
|
engine.StaticFS(storePath, justFilesFilesystem{http.Dir(storePath)})
|
|
}
|
|
}
|
|
|
|
// SetupHealthCheck 设置健康检查端点
|
|
func SetupHealthCheck(group *gin.RouterGroup) {
|
|
group.GET("/health", func(c *gin.Context) {
|
|
c.JSON(http.StatusOK, "ok")
|
|
})
|
|
}
|
|
|
|
// RouterGroups 路由组集合
|
|
type RouterGroups struct {
|
|
Public *gin.RouterGroup
|
|
Private *gin.RouterGroup
|
|
}
|
|
|
|
// NewRouterGroups 创建路由组
|
|
func NewRouterGroups(engine *gin.Engine, prefix string) *RouterGroups {
|
|
return &RouterGroups{
|
|
Public: engine.Group(prefix),
|
|
Private: engine.Group(prefix),
|
|
}
|
|
}
|
|
|
|
// RouteInfo 路由信息
|
|
type RouteInfo struct {
|
|
Method string
|
|
Path string
|
|
Handler string
|
|
HandlerFunc gin.HandlerFunc
|
|
}
|
|
|
|
// Routes 路由列表
|
|
type Routes []RouteInfo
|
|
|
|
// GetRoutes 获取所有路由信息
|
|
func GetRoutes(engine *gin.Engine) gin.RoutesInfo {
|
|
return engine.Routes()
|
|
}
|