wire.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. package handler
  2. import (
  3. "github.com/Wei-Shaw/sub2api/internal/config"
  4. "github.com/Wei-Shaw/sub2api/internal/handler/admin"
  5. "github.com/Wei-Shaw/sub2api/internal/securityaudit"
  6. "github.com/Wei-Shaw/sub2api/internal/service"
  7. "github.com/google/wire"
  8. )
  9. // ProvideAdminHandlers creates the AdminHandlers struct
  10. func ProvideAdminHandlers(
  11. dashboardHandler *admin.DashboardHandler,
  12. userHandler *admin.UserHandler,
  13. userCleanupHandler *admin.UserCleanupHandler,
  14. intelligentTestHandler *admin.IntelligentTestHandler,
  15. groupHandler *admin.GroupHandler,
  16. accountHandler *admin.AccountHandler,
  17. accountTrafficHandler *admin.AccountTrafficHandler,
  18. announcementHandler *admin.AnnouncementHandler,
  19. dataManagementHandler *admin.DataManagementHandler,
  20. backupHandler *admin.BackupHandler,
  21. oauthHandler *admin.OAuthHandler,
  22. openaiOAuthHandler *admin.OpenAIOAuthHandler,
  23. geminiOAuthHandler *admin.GeminiOAuthHandler,
  24. antigravityOAuthHandler *admin.AntigravityOAuthHandler,
  25. grokOAuthHandler *admin.GrokOAuthHandler,
  26. cnProviderHandler *admin.CNProviderHandler,
  27. proxyHandler *admin.ProxyHandler,
  28. redeemHandler *admin.RedeemHandler,
  29. promoHandler *admin.PromoHandler,
  30. settingHandler *admin.SettingHandler,
  31. opsHandler *admin.OpsHandler,
  32. systemHandler *admin.SystemHandler,
  33. subscriptionHandler *admin.SubscriptionHandler,
  34. usageHandler *admin.UsageHandler,
  35. userAttributeHandler *admin.UserAttributeHandler,
  36. errorPassthroughHandler *admin.ErrorPassthroughHandler,
  37. tlsFingerprintProfileHandler *admin.TLSFingerprintProfileHandler,
  38. pluginHandler *admin.PluginHandler,
  39. apiKeyHandler *admin.AdminAPIKeyHandler,
  40. scheduledTestHandler *admin.ScheduledTestHandler,
  41. channelHandler *admin.ChannelHandler,
  42. channelMonitorHandler *admin.ChannelMonitorHandler,
  43. channelMonitorTemplateHandler *admin.ChannelMonitorRequestTemplateHandler,
  44. contentModerationHandler *admin.ContentModerationHandler,
  45. securityPolicyHandler *admin.SecurityPolicyHandler,
  46. globalPricingHandler *admin.GlobalPricingHandler,
  47. accountHealthHandler *admin.AccountHealthHandler,
  48. marginHandler *admin.MarginHandler,
  49. tieredRoutingHandler *admin.TieredRoutingHandler,
  50. spendGuardHandler *admin.SpendGuardHandler,
  51. ticketHandler *admin.TicketHandler,
  52. billingExportHandler *admin.BillingExportHandler,
  53. antiDegradeHandler *admin.AntiDegradeHandler,
  54. promptAuditHandler *securityaudit.PromptAdminHandler,
  55. paymentHandler *admin.PaymentHandler,
  56. affiliateHandler *admin.AffiliateHandler,
  57. complianceHandler *admin.ComplianceHandler,
  58. auditLogHandler *admin.AuditLogHandler,
  59. upstreamBillingProbe *service.UpstreamBillingProbeService,
  60. ollamaCloudUsage *service.OllamaCloudUsageService,
  61. ) *AdminHandlers {
  62. accountHandler.SetUpstreamBillingProbeService(upstreamBillingProbe)
  63. accountHandler.SetOllamaCloudUsageService(ollamaCloudUsage)
  64. accountHandler.SetAccountTrafficHandler(accountTrafficHandler)
  65. return &AdminHandlers{
  66. Dashboard: dashboardHandler,
  67. User: userHandler,
  68. UserCleanup: userCleanupHandler,
  69. IntelligentTest: intelligentTestHandler,
  70. Group: groupHandler,
  71. Account: accountHandler,
  72. AccountTraffic: accountTrafficHandler,
  73. Announcement: announcementHandler,
  74. DataManagement: dataManagementHandler,
  75. Backup: backupHandler,
  76. OAuth: oauthHandler,
  77. OpenAIOAuth: openaiOAuthHandler,
  78. GeminiOAuth: geminiOAuthHandler,
  79. AntigravityOAuth: antigravityOAuthHandler,
  80. GrokOAuth: grokOAuthHandler,
  81. CNProvider: cnProviderHandler,
  82. Proxy: proxyHandler,
  83. Redeem: redeemHandler,
  84. Promo: promoHandler,
  85. Setting: settingHandler,
  86. Ops: opsHandler,
  87. System: systemHandler,
  88. Subscription: subscriptionHandler,
  89. Usage: usageHandler,
  90. UserAttribute: userAttributeHandler,
  91. ErrorPassthrough: errorPassthroughHandler,
  92. TLSFingerprintProfile: tlsFingerprintProfileHandler,
  93. Plugin: pluginHandler,
  94. APIKey: apiKeyHandler,
  95. ScheduledTest: scheduledTestHandler,
  96. Channel: channelHandler,
  97. ChannelMonitor: channelMonitorHandler,
  98. ChannelMonitorTemplate: channelMonitorTemplateHandler,
  99. ContentModeration: contentModerationHandler,
  100. SecurityPolicy: securityPolicyHandler,
  101. GlobalPricing: globalPricingHandler,
  102. AccountHealth: accountHealthHandler,
  103. Margin: marginHandler,
  104. TieredRouting: tieredRoutingHandler,
  105. SpendGuard: spendGuardHandler,
  106. Ticket: ticketHandler,
  107. BillingExport: billingExportHandler,
  108. AntiDegrade: antiDegradeHandler,
  109. PromptAudit: promptAuditHandler,
  110. Payment: paymentHandler,
  111. Affiliate: affiliateHandler,
  112. Compliance: complianceHandler,
  113. AuditLog: auditLogHandler,
  114. }
  115. }
  116. func ProvideGatewayHandler(
  117. gatewayService *service.GatewayService,
  118. openAIGatewayService *service.OpenAIGatewayService,
  119. geminiCompatService *service.GeminiMessagesCompatService,
  120. antigravityGatewayService *service.AntigravityGatewayService,
  121. userService *service.UserService,
  122. concurrencyService *service.ConcurrencyService,
  123. billingCacheService *service.BillingCacheService,
  124. usageService *service.UsageService,
  125. apiKeyService *service.APIKeyService,
  126. usageRecordWorkerPool *service.UsageRecordWorkerPool,
  127. errorPassthroughService *service.ErrorPassthroughService,
  128. contentModerationService *service.ContentModerationService,
  129. userMsgQueueService *service.UserMessageQueueService,
  130. cfg *config.Config,
  131. settingService *service.SettingService,
  132. coordinator *securityaudit.Coordinator,
  133. securityPolicyService *service.SecurityPolicyService,
  134. ) *GatewayHandler {
  135. h := NewGatewayHandler(gatewayService, openAIGatewayService, geminiCompatService, antigravityGatewayService,
  136. userService, concurrencyService, billingCacheService, usageService, apiKeyService, usageRecordWorkerPool,
  137. errorPassthroughService, contentModerationService, userMsgQueueService, cfg, settingService)
  138. h.securityAuditCoordinator = coordinator
  139. h.securityPolicyService = securityPolicyService
  140. return h
  141. }
  142. func ProvideOpenAIGatewayHandler(
  143. gatewayService *service.OpenAIGatewayService,
  144. pluginManager *service.PluginManager,
  145. concurrencyService *service.ConcurrencyService,
  146. billingCacheService *service.BillingCacheService,
  147. apiKeyService *service.APIKeyService,
  148. usageRecordWorkerPool *service.UsageRecordWorkerPool,
  149. errorPassthroughService *service.ErrorPassthroughService,
  150. contentModerationService *service.ContentModerationService,
  151. opsService *service.OpsService,
  152. grokQuotaService *service.GrokQuotaService,
  153. cfg *config.Config,
  154. coordinator *securityaudit.Coordinator,
  155. securityPolicyService *service.SecurityPolicyService,
  156. ) *OpenAIGatewayHandler {
  157. gatewayService.SetPluginManager(pluginManager)
  158. h := NewOpenAIGatewayHandler(gatewayService, concurrencyService, billingCacheService, apiKeyService,
  159. usageRecordWorkerPool, errorPassthroughService, contentModerationService, opsService, cfg)
  160. h.securityAuditCoordinator = coordinator
  161. h.securityPolicyService = securityPolicyService
  162. h.grokMediaEligibilityProber = grokQuotaService
  163. return h
  164. }
  165. func ProvideBatchImageHandler(
  166. batchService *service.BatchImagePublicService,
  167. download *service.BatchImageDownloadService,
  168. cleanup *service.BatchImageCleanupService,
  169. openAI *OpenAIGatewayHandler,
  170. ) *BatchImageHandler {
  171. h := NewBatchImageHandler(batchService, download, cleanup)
  172. h.openAI = openAI
  173. return h
  174. }
  175. // ProvideSystemHandler creates admin.SystemHandler with UpdateService
  176. func ProvideSystemHandler(updateService *service.UpdateService, lockService *service.SystemOperationLockService) *admin.SystemHandler {
  177. return admin.NewSystemHandler(updateService, lockService)
  178. }
  179. // ProvideSettingHandler creates SettingHandler with version from BuildInfo
  180. func ProvideSettingHandler(settingService *service.SettingService, buildInfo BuildInfo, notificationEmailService *service.NotificationEmailService) *SettingHandler {
  181. h := NewSettingHandler(settingService, buildInfo.Version)
  182. h.SetNotificationEmailService(notificationEmailService)
  183. return h
  184. }
  185. // ProvideAdminSettingHandler creates admin.SettingHandler with notification template APIs.
  186. func ProvideAdminSettingHandler(settingService *service.SettingService, emailService *service.EmailService, turnstileService *service.TurnstileService, aliyunCaptchaService *service.AliyunCaptchaService, opsService *service.OpsService, paymentConfigService *service.PaymentConfigService, paymentService *service.PaymentService, userAttributeService *service.UserAttributeService, notificationEmailService *service.NotificationEmailService, totpService *service.TotpService, userService *service.UserService) *admin.SettingHandler {
  187. h := admin.NewSettingHandler(settingService, emailService, turnstileService, opsService, paymentConfigService, paymentService, userAttributeService)
  188. h.SetNotificationEmailService(notificationEmailService)
  189. h.SetAliyunCaptchaService(aliyunCaptchaService)
  190. h.SetStepUpDeps(totpService, userService)
  191. return h
  192. }
  193. // ProvideHandlers creates the Handlers struct
  194. func ProvideHandlers(
  195. authHandler *AuthHandler,
  196. userHandler *UserHandler,
  197. apiKeyHandler *APIKeyHandler,
  198. usageHandler *UsageHandler,
  199. redeemHandler *RedeemHandler,
  200. subscriptionHandler *SubscriptionHandler,
  201. announcementHandler *AnnouncementHandler,
  202. channelMonitorUserHandler *ChannelMonitorUserHandler,
  203. channelMonitorV2Handler *ChannelMonitorV2Handler,
  204. adminHandlers *AdminHandlers,
  205. gatewayHandler *GatewayHandler,
  206. openaiGatewayHandler *OpenAIGatewayHandler,
  207. settingHandler *SettingHandler,
  208. totpHandler *TotpHandler,
  209. passkeyHandler *PasskeyHandler,
  210. paymentHandler *PaymentHandler,
  211. paymentWebhookHandler *PaymentWebhookHandler,
  212. availableChannelHandler *AvailableChannelHandler,
  213. modelPlazaHandler *ModelPlazaHandler,
  214. asyncImageHandler *AsyncImageHandler,
  215. batchImageHandler *BatchImageHandler,
  216. accountCapabilityHandler *AccountCapabilityHandler,
  217. _ *service.IdempotencyCoordinator,
  218. _ *service.IdempotencyCleanupService,
  219. _ *service.OpenAIQuotaAutoResetService,
  220. ) *Handlers {
  221. return &Handlers{
  222. Auth: authHandler,
  223. User: userHandler,
  224. APIKey: apiKeyHandler,
  225. Usage: usageHandler,
  226. Redeem: redeemHandler,
  227. Subscription: subscriptionHandler,
  228. Announcement: announcementHandler,
  229. ChannelMonitor: channelMonitorUserHandler,
  230. ChannelMonitorV2: channelMonitorV2Handler,
  231. Admin: adminHandlers,
  232. Gateway: gatewayHandler,
  233. OpenAIGateway: openaiGatewayHandler,
  234. Setting: settingHandler,
  235. Totp: totpHandler,
  236. Passkey: passkeyHandler,
  237. Payment: paymentHandler,
  238. PaymentWebhook: paymentWebhookHandler,
  239. AvailableChannel: availableChannelHandler,
  240. ModelPlaza: modelPlazaHandler,
  241. AsyncImage: asyncImageHandler,
  242. BatchImage: batchImageHandler,
  243. AccountCapability: accountCapabilityHandler,
  244. }
  245. }
  246. // ProviderSet is the Wire provider set for all handlers
  247. var ProviderSet = wire.NewSet(
  248. admin.NewUserCleanupHandler,
  249. admin.NewIntelligentTestHandler,
  250. NewAccountCapabilityHandler,
  251. // Top-level handlers
  252. NewAuthHandler,
  253. NewUserHandler,
  254. NewAPIKeyHandler,
  255. NewUsageHandler,
  256. NewRedeemHandler,
  257. NewSubscriptionHandler,
  258. NewAnnouncementHandler,
  259. NewChannelMonitorUserHandler,
  260. NewChannelMonitorV2Handler,
  261. ProvideGatewayHandler,
  262. ProvideOpenAIGatewayHandler,
  263. NewTotpHandler,
  264. NewPasskeyHandler,
  265. ProvideSettingHandler,
  266. NewPaymentHandler,
  267. NewPaymentWebhookHandler,
  268. NewAvailableChannelHandler,
  269. NewModelPlazaHandler,
  270. NewAsyncImageHandler,
  271. ProvideBatchImageHandler,
  272. // Admin handlers
  273. admin.NewDashboardHandler,
  274. admin.NewUserHandler,
  275. admin.NewGroupHandlerWithConfig,
  276. admin.ProvideAccountHandler,
  277. admin.NewAccountTrafficHandler,
  278. admin.NewAnnouncementHandler,
  279. admin.NewDataManagementHandler,
  280. admin.NewBackupHandler,
  281. admin.NewOAuthHandler,
  282. admin.NewOpenAIOAuthHandler,
  283. admin.NewGeminiOAuthHandler,
  284. admin.NewAntigravityOAuthHandler,
  285. admin.NewGrokOAuthHandler,
  286. admin.NewCNProviderHandler,
  287. admin.NewProxyHandler,
  288. admin.NewRedeemHandler,
  289. admin.NewPromoHandler,
  290. ProvideAdminSettingHandler,
  291. admin.NewOpsHandler,
  292. ProvideSystemHandler,
  293. admin.NewSubscriptionHandler,
  294. admin.NewUsageHandler,
  295. admin.NewUserAttributeHandler,
  296. admin.NewErrorPassthroughHandler,
  297. admin.NewTLSFingerprintProfileHandler,
  298. admin.NewPluginHandler,
  299. admin.NewAdminAPIKeyHandler,
  300. admin.NewScheduledTestHandler,
  301. admin.NewChannelHandler,
  302. admin.NewChannelMonitorHandler,
  303. admin.NewChannelMonitorRequestTemplateHandler,
  304. admin.NewContentModerationHandler,
  305. admin.NewSecurityPolicyHandler,
  306. admin.NewGlobalPricingHandler,
  307. admin.NewAccountHealthHandler,
  308. admin.NewMarginHandler,
  309. admin.NewTieredRoutingHandler,
  310. admin.NewSpendGuardHandler,
  311. admin.NewTicketHandler,
  312. admin.NewBillingExportHandler,
  313. admin.NewAntiDegradeHandler,
  314. admin.NewPaymentHandler,
  315. admin.NewAffiliateHandler,
  316. admin.NewComplianceHandler,
  317. admin.NewAuditLogHandler,
  318. // AdminHandlers and Handlers constructors
  319. ProvideAdminHandlers,
  320. ProvideHandlers,
  321. )