新增功能: - 支持 Google Authenticator 等应用进行 TOTP 二次验证 - 用户可在个人设置中启用/禁用 2FA - 登录时支持 TOTP 验证流程 - 管理后台可全局开关 TOTP 功能 安全增强: - TOTP 密钥使用 AES-256-GCM 加密存储 - 添加 TOTP_ENCRYPTION_KEY 配置项,必须手动配置才能启用功能 - 防止服务重启导致加密密钥变更使用户无法登录 - 验证失败次数限制,防止暴力破解 配置说明: - Docker 部署:在 .env 中设置 TOTP_ENCRYPTION_KEY - 非 Docker 部署:在 config.yaml 中设置 totp.encryption_key - 生成密钥命令:openssl rand -hex 32
127 lines
3.7 KiB
Go
127 lines
3.7 KiB
Go
package handler
|
|
|
|
import (
|
|
"github.com/Wei-Shaw/sub2api/internal/handler/admin"
|
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
|
|
|
"github.com/google/wire"
|
|
)
|
|
|
|
// ProvideAdminHandlers creates the AdminHandlers struct
|
|
func ProvideAdminHandlers(
|
|
dashboardHandler *admin.DashboardHandler,
|
|
userHandler *admin.UserHandler,
|
|
groupHandler *admin.GroupHandler,
|
|
accountHandler *admin.AccountHandler,
|
|
oauthHandler *admin.OAuthHandler,
|
|
openaiOAuthHandler *admin.OpenAIOAuthHandler,
|
|
geminiOAuthHandler *admin.GeminiOAuthHandler,
|
|
antigravityOAuthHandler *admin.AntigravityOAuthHandler,
|
|
proxyHandler *admin.ProxyHandler,
|
|
redeemHandler *admin.RedeemHandler,
|
|
promoHandler *admin.PromoHandler,
|
|
settingHandler *admin.SettingHandler,
|
|
opsHandler *admin.OpsHandler,
|
|
systemHandler *admin.SystemHandler,
|
|
subscriptionHandler *admin.SubscriptionHandler,
|
|
usageHandler *admin.UsageHandler,
|
|
userAttributeHandler *admin.UserAttributeHandler,
|
|
) *AdminHandlers {
|
|
return &AdminHandlers{
|
|
Dashboard: dashboardHandler,
|
|
User: userHandler,
|
|
Group: groupHandler,
|
|
Account: accountHandler,
|
|
OAuth: oauthHandler,
|
|
OpenAIOAuth: openaiOAuthHandler,
|
|
GeminiOAuth: geminiOAuthHandler,
|
|
AntigravityOAuth: antigravityOAuthHandler,
|
|
Proxy: proxyHandler,
|
|
Redeem: redeemHandler,
|
|
Promo: promoHandler,
|
|
Setting: settingHandler,
|
|
Ops: opsHandler,
|
|
System: systemHandler,
|
|
Subscription: subscriptionHandler,
|
|
Usage: usageHandler,
|
|
UserAttribute: userAttributeHandler,
|
|
}
|
|
}
|
|
|
|
// ProvideSystemHandler creates admin.SystemHandler with UpdateService
|
|
func ProvideSystemHandler(updateService *service.UpdateService) *admin.SystemHandler {
|
|
return admin.NewSystemHandler(updateService)
|
|
}
|
|
|
|
// ProvideSettingHandler creates SettingHandler with version from BuildInfo
|
|
func ProvideSettingHandler(settingService *service.SettingService, buildInfo BuildInfo) *SettingHandler {
|
|
return NewSettingHandler(settingService, buildInfo.Version)
|
|
}
|
|
|
|
// ProvideHandlers creates the Handlers struct
|
|
func ProvideHandlers(
|
|
authHandler *AuthHandler,
|
|
userHandler *UserHandler,
|
|
apiKeyHandler *APIKeyHandler,
|
|
usageHandler *UsageHandler,
|
|
redeemHandler *RedeemHandler,
|
|
subscriptionHandler *SubscriptionHandler,
|
|
adminHandlers *AdminHandlers,
|
|
gatewayHandler *GatewayHandler,
|
|
openaiGatewayHandler *OpenAIGatewayHandler,
|
|
settingHandler *SettingHandler,
|
|
totpHandler *TotpHandler,
|
|
) *Handlers {
|
|
return &Handlers{
|
|
Auth: authHandler,
|
|
User: userHandler,
|
|
APIKey: apiKeyHandler,
|
|
Usage: usageHandler,
|
|
Redeem: redeemHandler,
|
|
Subscription: subscriptionHandler,
|
|
Admin: adminHandlers,
|
|
Gateway: gatewayHandler,
|
|
OpenAIGateway: openaiGatewayHandler,
|
|
Setting: settingHandler,
|
|
Totp: totpHandler,
|
|
}
|
|
}
|
|
|
|
// ProviderSet is the Wire provider set for all handlers
|
|
var ProviderSet = wire.NewSet(
|
|
// Top-level handlers
|
|
NewAuthHandler,
|
|
NewUserHandler,
|
|
NewAPIKeyHandler,
|
|
NewUsageHandler,
|
|
NewRedeemHandler,
|
|
NewSubscriptionHandler,
|
|
NewGatewayHandler,
|
|
NewOpenAIGatewayHandler,
|
|
NewTotpHandler,
|
|
ProvideSettingHandler,
|
|
|
|
// Admin handlers
|
|
admin.NewDashboardHandler,
|
|
admin.NewUserHandler,
|
|
admin.NewGroupHandler,
|
|
admin.NewAccountHandler,
|
|
admin.NewOAuthHandler,
|
|
admin.NewOpenAIOAuthHandler,
|
|
admin.NewGeminiOAuthHandler,
|
|
admin.NewAntigravityOAuthHandler,
|
|
admin.NewProxyHandler,
|
|
admin.NewRedeemHandler,
|
|
admin.NewPromoHandler,
|
|
admin.NewSettingHandler,
|
|
admin.NewOpsHandler,
|
|
ProvideSystemHandler,
|
|
admin.NewSubscriptionHandler,
|
|
admin.NewUsageHandler,
|
|
admin.NewUserAttributeHandler,
|
|
|
|
// AdminHandlers and Handlers constructors
|
|
ProvideAdminHandlers,
|
|
ProvideHandlers,
|
|
)
|