注册引擎 负责协调邮箱服务、OAuth 流程和 OpenAI API 调用
| 130 | |
| 131 | |
| 132 | class RegistrationEngine: |
| 133 | """ |
| 134 | 注册引擎 |
| 135 | 负责协调邮箱服务、OAuth 流程和 OpenAI API 调用 |
| 136 | """ |
| 137 | |
| 138 | def __init__( |
| 139 | self, |
| 140 | email_service: BaseEmailService, |
| 141 | proxy_url: Optional[str] = None, |
| 142 | callback_logger: Optional[Callable[[str], None]] = None, |
| 143 | task_uuid: Optional[str] = None, |
| 144 | cancel_checker: Optional[Callable[[], bool]] = None, |
| 145 | ): |
| 146 | """ |
| 147 | 初始化注册引擎 |
| 148 | |
| 149 | Args: |
| 150 | email_service: 邮箱服务实例 |
| 151 | proxy_url: 代理 URL |
| 152 | callback_logger: 日志回调函数 |
| 153 | task_uuid: 任务 UUID(用于数据库记录) |
| 154 | """ |
| 155 | self.email_service = email_service |
| 156 | self.proxy_url = proxy_url |
| 157 | self.callback_logger = callback_logger or (lambda msg: logger.info(msg)) |
| 158 | self.task_uuid = task_uuid |
| 159 | self.cancel_checker = cancel_checker or (lambda: False) |
| 160 | |
| 161 | # 创建 HTTP 客户端 |
| 162 | self.http_client = OpenAIHTTPClient(proxy_url=proxy_url) |
| 163 | |
| 164 | # 创建 OAuth 管理器 |
| 165 | settings = get_settings() |
| 166 | self.oauth_manager = OAuthManager( |
| 167 | client_id=settings.openai_client_id, |
| 168 | auth_url=settings.openai_auth_url, |
| 169 | token_url=settings.openai_token_url, |
| 170 | redirect_uri=settings.openai_redirect_uri, |
| 171 | scope=settings.openai_scope, |
| 172 | proxy_url=proxy_url # 传递代理配置 |
| 173 | ) |
| 174 | entry_flow = str(getattr(settings, "registration_entry_flow", "native") or "native").strip().lower() |
| 175 | # 配置层仅保留 native/abcard;Outlook 邮箱在执行时自动切换 outlook 链路。 |
| 176 | self.registration_entry_flow: str = entry_flow if entry_flow in {"native", "abcard"} else "native" |
| 177 | self.anyauto_browser_mode: str = str( |
| 178 | getattr(settings, "registration_anyauto_browser_mode", "headless") or "headless" |
| 179 | ).strip().lower() |
| 180 | |
| 181 | # 状态变量 |
| 182 | self.email: Optional[str] = None |
| 183 | self.inbox_email: Optional[str] = None # 邮箱服务原始地址(用于收件) |
| 184 | self.password: Optional[str] = None # 注册密码 |
| 185 | self.email_info: Optional[Dict[str, Any]] = None |
| 186 | self.oauth_start: Optional[OAuthStart] = None |
| 187 | self.session: Optional[cffi_requests.Session] = None |
| 188 | self.session_token: Optional[str] = None # 会话令牌 |
| 189 | self.device_id: Optional[str] = None # oai-did |
no outgoing calls