diff --git a/.gitignore b/.gitignore index 15dc0333d..96976303e 100644 --- a/.gitignore +++ b/.gitignore @@ -21,13 +21,6 @@ build/1panel *.iml *.ipr -# NetBeans -nbproject/private/ -build/ -nbbuild/ -dist/ -nbdist/ -.nb-gradle/ # Test binary, built with `go test -c` *.test @@ -44,6 +37,8 @@ cmd/server/web/monacoeditorwork cmd/server/web/index.html frontend/auto-imports.d.ts frontend/components.d.ts +frontend/src/xpack +backend/xpack .history/ dist/ diff --git a/backend/init/router/router.go b/backend/init/router/router.go index b83726d67..4ff0a80ed 100644 --- a/backend/init/router/router.go +++ b/backend/init/router/router.go @@ -2,20 +2,23 @@ package router import ( "fmt" - "github.com/gin-contrib/gzip" - "html/template" - "net/http" - "github.com/1Panel-dev/1Panel/backend/global" "github.com/1Panel-dev/1Panel/backend/i18n" "github.com/1Panel-dev/1Panel/backend/middleware" rou "github.com/1Panel-dev/1Panel/backend/router" "github.com/1Panel-dev/1Panel/cmd/server/docs" "github.com/1Panel-dev/1Panel/cmd/server/web" + "github.com/gin-contrib/gzip" ginI18n "github.com/gin-contrib/i18n" "github.com/gin-gonic/gin" swaggerfiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" + "html/template" + "net/http" +) + +var ( + Router *gin.Engine ) func setWebStatic(rootRouter *gin.RouterGroup) { @@ -35,7 +38,7 @@ func setWebStatic(rootRouter *gin.RouterGroup) { } func Routers() *gin.Engine { - Router := gin.Default() + Router = gin.Default() Router.Use(middleware.OperationLog()) // Router.Use(middleware.CSRF()) // Router.Use(middleware.LoadCsrfToken()) @@ -55,7 +58,6 @@ func Routers() *gin.Engine { "Localize": ginI18n.GetMessage, }) - systemRouter := rou.RouterGroupApp swaggerRouter := Router.Group("1panel") docs.SwaggerInfo.BasePath = "/api/v1" swaggerRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler)) @@ -71,29 +73,8 @@ func Routers() *gin.Engine { PrivateGroup.Use(middleware.WhiteAllow()) PrivateGroup.Use(middleware.BindDomain()) PrivateGroup.Use(middleware.GlobalLoading()) - { - systemRouter.InitBaseRouter(PrivateGroup) - systemRouter.InitDashboardRouter(PrivateGroup) - systemRouter.InitHostRouter(PrivateGroup) - systemRouter.InitContainerRouter(PrivateGroup) - systemRouter.InitTerminalRouter(PrivateGroup) - systemRouter.InitMonitorRouter(PrivateGroup) - systemRouter.InitLogRouter(PrivateGroup) - systemRouter.InitFileRouter(PrivateGroup) - systemRouter.InitCronjobRouter(PrivateGroup) - systemRouter.InitSettingRouter(PrivateGroup) - systemRouter.InitAppRouter(PrivateGroup) - systemRouter.InitWebsiteRouter(PrivateGroup) - systemRouter.InitWebsiteGroupRouter(PrivateGroup) - systemRouter.InitWebsiteDnsAccountRouter(PrivateGroup) - systemRouter.InitDatabaseRouter(PrivateGroup) - systemRouter.InitWebsiteSSLRouter(PrivateGroup) - systemRouter.InitWebsiteAcmeAccountRouter(PrivateGroup) - systemRouter.InitNginxRouter(PrivateGroup) - systemRouter.InitRuntimeRouter(PrivateGroup) - systemRouter.InitProcessRouter(PrivateGroup) - systemRouter.InitToolboxRouter(PrivateGroup) - systemRouter.InitWebsiteCARouter(PrivateGroup) + for _, router := range rou.RouterGroupApp { + router.InitRouter(PrivateGroup) } return Router diff --git a/backend/router/common.go b/backend/router/common.go new file mode 100644 index 000000000..b4ba64a2c --- /dev/null +++ b/backend/router/common.go @@ -0,0 +1,27 @@ +package router + +func commonGroups() []CommonRouter { + return []CommonRouter{ + &BaseRouter{}, + &DashboardRouter{}, + &HostRouter{}, + &ContainerRouter{}, + &MonitorRouter{}, + &LogRouter{}, + &FileRouter{}, + &ToolboxRouter{}, + &TerminalRouter{}, + &CronjobRouter{}, + &SettingRouter{}, + &AppRouter{}, + &WebsiteRouter{}, + &WebsiteGroupRouter{}, + &WebsiteDnsAccountRouter{}, + &WebsiteAcmeAccountRouter{}, + &WebsiteSSLRouter{}, + &DatabaseRouter{}, + &NginxRouter{}, + &RuntimeRouter{}, + &ProcessRouter{}, + } +} diff --git a/backend/router/entry.go b/backend/router/entry.go index 781f38739..49ed25fd1 100644 --- a/backend/router/entry.go +++ b/backend/router/entry.go @@ -1,27 +1,9 @@ +//go:build !xpack + package router -type RouterGroup struct { - BaseRouter - DashboardRouter - HostRouter - ContainerRouter - MonitorRouter - LogRouter - FileRouter - ToolboxRouter - TerminalRouter - CronjobRouter - SettingRouter - AppRouter - WebsiteRouter - WebsiteGroupRouter - WebsiteDnsAccountRouter - WebsiteAcmeAccountRouter - WebsiteSSLRouter - DatabaseRouter - NginxRouter - RuntimeRouter - ProcessRouter +func RouterGroups() []CommonRouter { + return commonGroups() } -var RouterGroupApp = new(RouterGroup) +var RouterGroupApp = RouterGroups() diff --git a/backend/router/entry_xpack.go b/backend/router/entry_xpack.go new file mode 100644 index 000000000..4e7b3d3c5 --- /dev/null +++ b/backend/router/entry_xpack.go @@ -0,0 +1,11 @@ +//go:build xpack + +package router + +import "github.com/1Panel-dev/1Panel/backend/xpack/router" + +func RouterGroups() []CommonRouter { + return append(commonGroups(), []CommonRouter{&router.WafRouter{}}...) +} + +var RouterGroupApp = RouterGroups() diff --git a/backend/router/ro_app.go b/backend/router/ro_app.go index be2d0c3e6..127139fd9 100644 --- a/backend/router/ro_app.go +++ b/backend/router/ro_app.go @@ -9,7 +9,7 @@ import ( type AppRouter struct { } -func (a *AppRouter) InitAppRouter(Router *gin.RouterGroup) { +func (a *AppRouter) InitRouter(Router *gin.RouterGroup) { appRouter := Router.Group("apps") appRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired()) diff --git a/backend/router/ro_base.go b/backend/router/ro_base.go index b2596675e..0ea3808b1 100644 --- a/backend/router/ro_base.go +++ b/backend/router/ro_base.go @@ -7,7 +7,7 @@ import ( type BaseRouter struct{} -func (s *BaseRouter) InitBaseRouter(Router *gin.RouterGroup) { +func (s *BaseRouter) InitRouter(Router *gin.RouterGroup) { baseRouter := Router.Group("auth") baseApi := v1.ApiGroupApp.BaseApi { diff --git a/backend/router/ro_container.go b/backend/router/ro_container.go index a065861ea..dd632a340 100644 --- a/backend/router/ro_container.go +++ b/backend/router/ro_container.go @@ -8,7 +8,7 @@ import ( type ContainerRouter struct{} -func (s *ContainerRouter) InitContainerRouter(Router *gin.RouterGroup) { +func (s *ContainerRouter) InitRouter(Router *gin.RouterGroup) { baRouter := Router.Group("containers"). Use(middleware.JwtAuth()). Use(middleware.SessionAuth()). diff --git a/backend/router/ro_cronjob.go b/backend/router/ro_cronjob.go index 5dea0a45e..745662793 100644 --- a/backend/router/ro_cronjob.go +++ b/backend/router/ro_cronjob.go @@ -9,7 +9,7 @@ import ( type CronjobRouter struct{} -func (s *CronjobRouter) InitCronjobRouter(Router *gin.RouterGroup) { +func (s *CronjobRouter) InitRouter(Router *gin.RouterGroup) { cmdRouter := Router.Group("cronjobs"). Use(middleware.JwtAuth()). Use(middleware.SessionAuth()). diff --git a/backend/router/ro_dashboard.go b/backend/router/ro_dashboard.go index 314139b82..6dcc0808e 100644 --- a/backend/router/ro_dashboard.go +++ b/backend/router/ro_dashboard.go @@ -9,7 +9,7 @@ import ( type DashboardRouter struct{} -func (s *CronjobRouter) InitDashboardRouter(Router *gin.RouterGroup) { +func (s *DashboardRouter) InitRouter(Router *gin.RouterGroup) { cmdRouter := Router.Group("dashboard"). Use(middleware.JwtAuth()). Use(middleware.SessionAuth()). diff --git a/backend/router/ro_database.go b/backend/router/ro_database.go index 6f149307b..d62e4f283 100644 --- a/backend/router/ro_database.go +++ b/backend/router/ro_database.go @@ -9,7 +9,7 @@ import ( type DatabaseRouter struct{} -func (s *DatabaseRouter) InitDatabaseRouter(Router *gin.RouterGroup) { +func (s *DatabaseRouter) InitRouter(Router *gin.RouterGroup) { cmdRouter := Router.Group("databases"). Use(middleware.JwtAuth()). Use(middleware.SessionAuth()). diff --git a/backend/router/ro_file.go b/backend/router/ro_file.go index 49aaee5be..a70307aaf 100644 --- a/backend/router/ro_file.go +++ b/backend/router/ro_file.go @@ -9,7 +9,7 @@ import ( type FileRouter struct { } -func (f *FileRouter) InitFileRouter(Router *gin.RouterGroup) { +func (f *FileRouter) InitRouter(Router *gin.RouterGroup) { fileRouter := Router.Group("files") fileRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired()) baseApi := v1.ApiGroupApp.BaseApi diff --git a/backend/router/ro_group.go b/backend/router/ro_group.go index 133dc60a6..33c18f35b 100644 --- a/backend/router/ro_group.go +++ b/backend/router/ro_group.go @@ -9,7 +9,7 @@ import ( type WebsiteGroupRouter struct { } -func (a *WebsiteGroupRouter) InitWebsiteGroupRouter(Router *gin.RouterGroup) { +func (a *WebsiteGroupRouter) InitRouter(Router *gin.RouterGroup) { groupRouter := Router.Group("groups") groupRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired()) diff --git a/backend/router/ro_host.go b/backend/router/ro_host.go index a12580fe0..c3e9e6a09 100644 --- a/backend/router/ro_host.go +++ b/backend/router/ro_host.go @@ -9,7 +9,7 @@ import ( type HostRouter struct{} -func (s *HostRouter) InitHostRouter(Router *gin.RouterGroup) { +func (s *HostRouter) InitRouter(Router *gin.RouterGroup) { hostRouter := Router.Group("hosts"). Use(middleware.JwtAuth()). Use(middleware.SessionAuth()). diff --git a/backend/router/ro_log.go b/backend/router/ro_log.go index 95b567eef..0ca10024e 100644 --- a/backend/router/ro_log.go +++ b/backend/router/ro_log.go @@ -9,7 +9,7 @@ import ( type LogRouter struct{} -func (s *LogRouter) InitLogRouter(Router *gin.RouterGroup) { +func (s *LogRouter) InitRouter(Router *gin.RouterGroup) { operationRouter := Router.Group("logs") operationRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired()) baseApi := v1.ApiGroupApp.BaseApi diff --git a/backend/router/ro_monitor.go b/backend/router/ro_monitor.go index f2bce66d3..d091b90f6 100644 --- a/backend/router/ro_monitor.go +++ b/backend/router/ro_monitor.go @@ -9,7 +9,7 @@ import ( type MonitorRouter struct{} -func (s *MonitorRouter) InitMonitorRouter(Router *gin.RouterGroup) { +func (s *MonitorRouter) InitRouter(Router *gin.RouterGroup) { monitorRouter := Router.Group("monitors"). Use(middleware.JwtAuth()). Use(middleware.SessionAuth()). diff --git a/backend/router/ro_nginx.go b/backend/router/ro_nginx.go index bd33614c3..28ff43fee 100644 --- a/backend/router/ro_nginx.go +++ b/backend/router/ro_nginx.go @@ -9,7 +9,7 @@ import ( type NginxRouter struct { } -func (a *NginxRouter) InitNginxRouter(Router *gin.RouterGroup) { +func (a *NginxRouter) InitRouter(Router *gin.RouterGroup) { groupRouter := Router.Group("openresty") groupRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired()) diff --git a/backend/router/ro_process.go b/backend/router/ro_process.go index 604c88983..1e99c6748 100644 --- a/backend/router/ro_process.go +++ b/backend/router/ro_process.go @@ -9,7 +9,7 @@ import ( type ProcessRouter struct { } -func (f *ProcessRouter) InitProcessRouter(Router *gin.RouterGroup) { +func (f *ProcessRouter) InitRouter(Router *gin.RouterGroup) { processRouter := Router.Group("process") processRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired()) baseApi := v1.ApiGroupApp.BaseApi diff --git a/backend/router/ro_router.go b/backend/router/ro_router.go new file mode 100644 index 000000000..58a52dce0 --- /dev/null +++ b/backend/router/ro_router.go @@ -0,0 +1,7 @@ +package router + +import "github.com/gin-gonic/gin" + +type CommonRouter interface { + InitRouter(Router *gin.RouterGroup) +} diff --git a/backend/router/ro_runtime.go b/backend/router/ro_runtime.go index fbb10163c..c43a3c170 100644 --- a/backend/router/ro_runtime.go +++ b/backend/router/ro_runtime.go @@ -9,7 +9,7 @@ import ( type RuntimeRouter struct { } -func (r *RuntimeRouter) InitRuntimeRouter(Router *gin.RouterGroup) { +func (r *RuntimeRouter) InitRouter(Router *gin.RouterGroup) { groupRouter := Router.Group("runtimes") groupRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired()) diff --git a/backend/router/ro_setting.go b/backend/router/ro_setting.go index b3f8aa9f9..5990c454c 100644 --- a/backend/router/ro_setting.go +++ b/backend/router/ro_setting.go @@ -8,7 +8,7 @@ import ( type SettingRouter struct{} -func (s *SettingRouter) InitSettingRouter(Router *gin.RouterGroup) { +func (s *SettingRouter) InitRouter(Router *gin.RouterGroup) { router := Router.Group("settings"). Use(middleware.JwtAuth()). Use(middleware.SessionAuth()) diff --git a/backend/router/ro_terminal.go b/backend/router/ro_terminal.go index 9f06e3fa4..40c3850b3 100644 --- a/backend/router/ro_terminal.go +++ b/backend/router/ro_terminal.go @@ -9,7 +9,7 @@ import ( type TerminalRouter struct{} -func (s *TerminalRouter) InitTerminalRouter(Router *gin.RouterGroup) { +func (s *TerminalRouter) InitRouter(Router *gin.RouterGroup) { terminalRouter := Router.Group("terminals"). Use(middleware.JwtAuth()). Use(middleware.SessionAuth()). diff --git a/backend/router/ro_toolbox.go b/backend/router/ro_toolbox.go index ddb506e65..7638c4650 100644 --- a/backend/router/ro_toolbox.go +++ b/backend/router/ro_toolbox.go @@ -9,7 +9,7 @@ import ( type ToolboxRouter struct{} -func (s *ToolboxRouter) InitToolboxRouter(Router *gin.RouterGroup) { +func (s *ToolboxRouter) InitRouter(Router *gin.RouterGroup) { toolboxRouter := Router.Group("toolbox"). Use(middleware.JwtAuth()). Use(middleware.SessionAuth()). diff --git a/backend/router/ro_website.go b/backend/router/ro_website.go index d6894e51a..059e572a6 100644 --- a/backend/router/ro_website.go +++ b/backend/router/ro_website.go @@ -9,7 +9,7 @@ import ( type WebsiteRouter struct { } -func (a *WebsiteRouter) InitWebsiteRouter(Router *gin.RouterGroup) { +func (a *WebsiteRouter) InitRouter(Router *gin.RouterGroup) { groupRouter := Router.Group("websites") groupRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired()) diff --git a/backend/router/ro_website_acme_account.go b/backend/router/ro_website_acme_account.go index 4eaeee04b..787957423 100644 --- a/backend/router/ro_website_acme_account.go +++ b/backend/router/ro_website_acme_account.go @@ -9,7 +9,7 @@ import ( type WebsiteAcmeAccountRouter struct { } -func (a *WebsiteAcmeAccountRouter) InitWebsiteAcmeAccountRouter(Router *gin.RouterGroup) { +func (a *WebsiteAcmeAccountRouter) InitRouter(Router *gin.RouterGroup) { groupRouter := Router.Group("websites/acme") groupRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired()) diff --git a/backend/router/ro_website_ca.go b/backend/router/ro_website_ca.go index 8bf4a37b4..c994519b0 100644 --- a/backend/router/ro_website_ca.go +++ b/backend/router/ro_website_ca.go @@ -6,7 +6,10 @@ import ( "github.com/gin-gonic/gin" ) -func (a *WebsiteDnsAccountRouter) InitWebsiteCARouter(Router *gin.RouterGroup) { +type WebsiteCARouter struct { +} + +func (a *WebsiteCARouter) InitRouter(Router *gin.RouterGroup) { groupRouter := Router.Group("websites/ca") groupRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired()) diff --git a/backend/router/ro_website_dns_account.go b/backend/router/ro_website_dns_account.go index d9dcb0617..6b46f9aa4 100644 --- a/backend/router/ro_website_dns_account.go +++ b/backend/router/ro_website_dns_account.go @@ -9,7 +9,7 @@ import ( type WebsiteDnsAccountRouter struct { } -func (a *WebsiteDnsAccountRouter) InitWebsiteDnsAccountRouter(Router *gin.RouterGroup) { +func (a *WebsiteDnsAccountRouter) InitRouter(Router *gin.RouterGroup) { groupRouter := Router.Group("websites/dns") groupRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired()) diff --git a/backend/router/ro_website_ssl.go b/backend/router/ro_website_ssl.go index 8a01f87f0..e0deb8701 100644 --- a/backend/router/ro_website_ssl.go +++ b/backend/router/ro_website_ssl.go @@ -9,7 +9,7 @@ import ( type WebsiteSSLRouter struct { } -func (a *WebsiteSSLRouter) InitWebsiteSSLRouter(Router *gin.RouterGroup) { +func (a *WebsiteSSLRouter) InitRouter(Router *gin.RouterGroup) { groupRouter := Router.Group("websites/ssl") groupRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired()) diff --git a/frontend/.env b/frontend/.env index 7fea7df2d..ade102399 100644 --- a/frontend/.env +++ b/frontend/.env @@ -16,3 +16,5 @@ VITE_BUILD_GZIP = false # 是否删除生产环境 console VITE_DROP_CONSOLE = true + +PANEL_XPACK = false \ No newline at end of file diff --git a/frontend/.env.development b/frontend/.env.development index c9a106a79..efa385114 100644 --- a/frontend/.env.development +++ b/frontend/.env.development @@ -5,9 +5,11 @@ NODE_ENV = 'development' VITE_API_URL = '/api/v1' # 是否生成包预览文件 -VITE_REPORT = true +VITE_REPORT = false # 是否开启gzip压缩 VITE_BUILD_GZIP = true -VITE_DROP_CONSOLE = true \ No newline at end of file +VITE_DROP_CONSOLE = true + +PANEL_XPACK = true \ No newline at end of file diff --git a/frontend/.env.production b/frontend/.env.production index 0cafd2c11..8c620146f 100644 --- a/frontend/.env.production +++ b/frontend/.env.production @@ -11,3 +11,5 @@ VITE_REPORT = true VITE_BUILD_GZIP = true VITE_DROP_CONSOLE = true + +PANEL_XPACK = true diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts index 211b87f0a..d46f88f17 100644 --- a/frontend/src/api/index.ts +++ b/frontend/src/api/index.ts @@ -1,4 +1,4 @@ -import axios, { AxiosInstance, AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'; +import axios, { AxiosInstance, AxiosError, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios'; import { ResultData } from '@/api/interface'; import { ResultEnum } from '@/enums/http-enum'; import { checkStatus } from './helper/check-status'; @@ -32,7 +32,7 @@ class RequestHttp { } return { ...config, - }; + } as InternalAxiosRequestConfig; }, (error: AxiosError) => { return Promise.reject(error); diff --git a/frontend/src/routers/router.ts b/frontend/src/routers/router.ts index b6ab56b93..cd3ffae7c 100644 --- a/frontend/src/routers/router.ts +++ b/frontend/src/routers/router.ts @@ -1,7 +1,11 @@ import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'; import { Layout } from '@/routers/constant'; -const modules = import.meta.globEager('./modules/*.ts'); +let modules = import.meta.globEager('./modules/*.ts'); +const xpackModules = import.meta.globEager('../xpack/frontend/routers/*.ts'); +modules = { ...modules, ...xpackModules }; + +console.log(modules); const homeRouter: RouteRecordRaw = { path: '/', diff --git a/frontend/src/typings/global.d.ts b/frontend/src/typings/global.d.ts index a641897d9..e6100b9fb 100644 --- a/frontend/src/typings/global.d.ts +++ b/frontend/src/typings/global.d.ts @@ -20,6 +20,7 @@ declare interface ViteEnv { VITE_PROXY_URL: string; VITE_BUILD_GZIP: boolean; VITE_REPORT: boolean; + PANEL_XPACK: boolean; } declare interface RouterButton {