Files
pika/internal/wire_gen.go
T
dushixiang 1af64eccd9 refactor: simplify theme system to filesystem-only with self-contained portal
主题系统从带数据库/事务/repo 层/远程下载/配置管理/主题市场的重型架构,
彻底简化为纯文件系统操作:

后端:
- 主题数据全部存放在 data/themes/ 目录,不经过数据库
- 删除主题配置功能(managed/raw/redirect schema、配置存取 API、
  ThemeConfiguration model、theme_configurations 表、repo 层)
- 删除远程下载(URL 安装、GitHub Release 更新、SSRF 防护、SHA-256)
- 删除版本范围检查(semver 解析/比较/匹配、pikaVersion 校验)
- 删除主题市场
- ThemeService 不再持有 db,合并为 theme.go + theme_util.go 两个文件
- 主题类型从 models 包移到 service 包(非数据库模型)
- 保留:ZIP 上传解压(含目录穿越防护)、目录扫描列表、启用/删除、
  覆盖安装、默认主题回退、启动恢复、入口 HTML 渲染缓存

前端 portal(官方默认主题):
- 从 47 个碎片文件精简到 15 个,按标准目录组织
- 删除 theme-sdk 包,API 客户端和类型内联回 portal,完全自包含
- 按职责拆分:types.ts / api.ts / constants.ts / lib/utils.ts /
  contexts/ColorMode.tsx / hooks/index.ts / components.tsx / pages/
- 每个页面一个文件,图表和子组件内联,fork 二开只需看一个文件
2026-08-09 22:45:43 +08:00

151 lines
6.1 KiB
Go

// Code generated by Wire. DO NOT EDIT.
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
//go:build !wireinject
// +build !wireinject
package internal
import (
"github.com/dushixiang/pika/internal/config"
"github.com/dushixiang/pika/internal/handler"
"github.com/dushixiang/pika/internal/service"
"github.com/dushixiang/pika/internal/vmclient"
"github.com/dushixiang/pika/internal/websocket"
"go.uber.org/zap"
"gorm.io/gorm"
"time"
)
// Injectors from wire.go:
// InitializeApp 初始化应用
func InitializeApp(logger *zap.Logger, db *gorm.DB, cfg *config.AppConfig) (*AppComponents, error) {
userService := service.NewUserService(logger, cfg)
oidcService := service.NewOIDCService(logger, cfg)
gitHubOAuthService := service.NewGitHubOAuthService(logger, cfg)
accountService := service.NewAccountService(logger, userService, oidcService, gitHubOAuthService, cfg)
accountHandler := handler.NewAccountHandler(accountService)
apiKeyService := service.NewApiKeyService(logger, db)
propertyService := service.NewPropertyService(logger, db)
themeService, err := service.NewThemeService(logger, propertyService, cfg)
if err != nil {
return nil, err
}
notifier := service.NewNotifier(logger)
notificationService := service.NewNotificationService(logger, propertyService, notifier)
trafficService := service.NewTrafficService(logger, db, notificationService)
vmClient := provideVMClient(cfg, logger)
metricService := service.NewMetricService(logger, db, propertyService, trafficService, vmClient)
geoIPService, err := service.NewGeoIPService(logger, cfg)
if err != nil {
return nil, err
}
agentService := service.NewAgentService(logger, db, apiKeyService, metricService, geoIPService)
manager := websocket.NewManager(logger)
monitorService := service.NewMonitorService(logger, db, metricService, manager)
tamperService := service.NewTamperService(logger, db, manager, notificationService)
ddnsService := service.NewDDNSService(logger, db, propertyService, manager)
sshLoginService := service.NewSSHLoginService(logger, db, manager, geoIPService, notificationService)
publicIPService := service.NewPublicIPService(logger, propertyService, manager)
agentHandler := handler.NewAgentHandler(logger, agentService, trafficService, metricService, monitorService, tamperService, ddnsService, sshLoginService, apiKeyService, propertyService, manager)
apiKeyHandler := handler.NewApiKeyHandler(logger, apiKeyService)
alertService := service.NewAlertService(logger, db, propertyService, monitorService, notifier)
alertHandler := handler.NewAlertHandler(logger, alertService)
propertyHandler := handler.NewPropertyHandler(logger, propertyService, notifier)
monitorHandler := handler.NewMonitorHandler(logger, monitorService, metricService, agentService)
tamperHandler := handler.NewTamperHandler(logger, tamperService)
dnsProviderHandler := handler.NewDNSProviderHandler(logger, propertyService)
ddnsHandler := handler.NewDDNSHandler(logger, ddnsService)
sshLoginHandler := handler.NewSSHLoginHandler(logger, sshLoginService)
themeHandler := handler.NewThemeHandler(logger, themeService)
webHandler := handler.NewWebHandler(themeService, propertyService)
appComponents := &AppComponents{
AccountHandler: accountHandler,
AgentHandler: agentHandler,
ApiKeyHandler: apiKeyHandler,
AlertHandler: alertHandler,
PropertyHandler: propertyHandler,
MonitorHandler: monitorHandler,
TamperHandler: tamperHandler,
DNSProviderHandler: dnsProviderHandler,
DDNSHandler: ddnsHandler,
SSHLoginHandler: sshLoginHandler,
ThemeHandler: themeHandler,
WebHandler: webHandler,
AgentService: agentService,
TrafficService: trafficService,
MetricService: metricService,
AlertService: alertService,
PropertyService: propertyService,
MonitorService: monitorService,
ApiKeyService: apiKeyService,
TamperService: tamperService,
DDNSService: ddnsService,
SSHLoginService: sshLoginService,
PublicIPService: publicIPService,
ThemeService: themeService,
WSManager: manager,
VMClient: vmClient,
}
return appComponents, nil
}
// wire.go:
// AppComponents 应用组件
type AppComponents struct {
AccountHandler *handler.AccountHandler
AgentHandler *handler.AgentHandler
ApiKeyHandler *handler.ApiKeyHandler
AlertHandler *handler.AlertHandler
PropertyHandler *handler.PropertyHandler
MonitorHandler *handler.MonitorHandler
TamperHandler *handler.TamperHandler
DNSProviderHandler *handler.DNSProviderHandler
DDNSHandler *handler.DDNSHandler
SSHLoginHandler *handler.SSHLoginHandler
ThemeHandler *handler.ThemeHandler
WebHandler *handler.WebHandler
AgentService *service.AgentService
TrafficService *service.TrafficService
MetricService *service.MetricService
AlertService *service.AlertService
PropertyService *service.PropertyService
MonitorService *service.MonitorService
ApiKeyService *service.ApiKeyService
TamperService *service.TamperService
DDNSService *service.DDNSService
SSHLoginService *service.SSHLoginService
PublicIPService *service.PublicIPService
ThemeService *service.ThemeService
WSManager *websocket.Manager
VMClient *vmclient.VMClient
}
// provideVMClient 提供 VictoriaMetrics 客户端
func provideVMClient(cfg *config.AppConfig, logger *zap.Logger) *vmclient.VMClient {
if cfg.VictoriaMetrics == nil || !cfg.VictoriaMetrics.Enabled {
logger.Info("VictoriaMetrics is not enabled, using default configuration")
return vmclient.NewVMClient("http://localhost:8428", 30*time.Second, 60*time.Second)
}
writeTimeout := time.Duration(cfg.VictoriaMetrics.WriteTimeout) * time.Second
if writeTimeout == 0 {
writeTimeout = 30 * time.Second
}
queryTimeout := time.Duration(cfg.VictoriaMetrics.QueryTimeout) * time.Second
if queryTimeout == 0 {
queryTimeout = 60 * time.Second
}
logger.Info("VictoriaMetrics client initialized", zap.String("url", cfg.VictoriaMetrics.URL), zap.Duration("writeTimeout", writeTimeout), zap.Duration("queryTimeout", queryTimeout))
return vmclient.NewVMClient(cfg.VictoriaMetrics.URL, writeTimeout, queryTimeout)
}