package handler import ( "net/http" "management/assets" "management/internal/erpserver/handler/captcha" "management/internal/erpserver/handler/system/audit" "management/internal/erpserver/handler/system/auth" configapp "management/internal/erpserver/handler/system/config" "management/internal/erpserver/handler/system/department" "management/internal/erpserver/handler/system/home" "management/internal/erpserver/handler/system/loginlog" "management/internal/erpserver/handler/system/menu" "management/internal/erpserver/handler/system/role" "management/internal/erpserver/handler/system/user" "management/internal/erpserver/handler/upload" v1 "management/internal/erpserver/service/v1" "management/internal/pkg/config" "management/internal/pkg/mid" "management/internal/pkg/render" "management/internal/pkg/session" "github.com/drhin/logger" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" ) type Config struct { Conf *config.Config Log *logger.Logger Sm session.Manager Render render.Renderer CaptchaService v1.CaptchaService UserService v1.UserService RoleService v1.RoleService DepartmentService v1.DepartmentService MenuService v1.MenuService ConfigService v1.ConfigService AuditLogService v1.AuditLogService LoginLogService v1.LoginLogService } func WebApp(cfg Config) http.Handler { app := chi.NewRouter() app.Use(middleware.RequestID) app.Use(middleware.RealIP) // r.Use(mid.Logger) app.Use(middleware.Recoverer) staticServer := http.FileServer(http.FS(assets.FS)) app.Handle("/assets/*", http.StripPrefix("/assets", staticServer)) uploadServer := http.FileServer(http.Dir("./public/")) app.Handle("/public/*", http.StripPrefix("/public", uploadServer)) app.Group(func(r chi.Router) { r.Use(mid.NoSurf) // CSRF r.Use(mid.NoSurfContext) // CSRF Store Context r.Use(mid.LoadSession(cfg.Sm)) // Session captcha.Routes(r, captcha.Config{ Conf: cfg.Conf, Render: cfg.Render, CaptchaService: cfg.CaptchaService, }) upload.Routes(r, upload.Config{ Conf: cfg.Conf, Log: cfg.Log, Sm: cfg.Sm, Render: cfg.Render, MenuService: cfg.MenuService, }) home.Routes(r, home.Config{ Sm: cfg.Sm, Render: cfg.Render, UserService: cfg.UserService, MenuService: cfg.MenuService, LoginLogService: cfg.LoginLogService, }) auth.Routes(r, auth.Config{ Log: cfg.Log, Sm: cfg.Sm, Render: cfg.Render, CaptchaService: cfg.CaptchaService, UserService: cfg.UserService, MenuService: cfg.MenuService, }) r.Route("/system", func(r chi.Router) { r.Use(mid.Authorize(cfg.Sm, cfg.MenuService)) user.Routes(r, user.Config{ Log: cfg.Log, Sm: cfg.Sm, Render: cfg.Render, UserService: cfg.UserService, RoleService: cfg.RoleService, MenuService: cfg.MenuService, DepartmentService: cfg.DepartmentService, }) role.Routes(r, role.Config{ Log: cfg.Log, Sm: cfg.Sm, Render: cfg.Render, RoleService: cfg.RoleService, MenuService: cfg.MenuService, }) menu.Routes(r, menu.Config{ Log: cfg.Log, Sm: cfg.Sm, Render: cfg.Render, MenuService: cfg.MenuService, }) department.Routes(r, department.Config{ Log: cfg.Log, Sm: cfg.Sm, Render: cfg.Render, MenuService: cfg.MenuService, DepartmentService: cfg.DepartmentService, }) configapp.Routes(r, configapp.Config{ Log: cfg.Log, Sm: cfg.Sm, Render: cfg.Render, MenuService: cfg.MenuService, ConfigService: cfg.ConfigService, }) loginlog.Routes(r, loginlog.Config{ Sm: cfg.Sm, Render: cfg.Render, MenuService: cfg.MenuService, LoginLogService: cfg.LoginLogService, }) audit.Routes(r, audit.Config{ Sm: cfg.Sm, Render: cfg.Render, MenuService: cfg.MenuService, AuditLogService: cfg.AuditLogService, }) }) }) return app }