main
py 44 lines 1.59 KB
Raw
1 from __future__ import annotations
2
3 from helpers.api import ApiHandler, Request
4 from plugins._oauth.helpers.providers import CODEX_PROVIDER_ID, get_provider
5
6
7 class StartLogin(ApiHandler):
8 async def process(self, input: dict, request: Request) -> dict:
9 if "provider_id" not in input:
10 raw_provider_id = CODEX_PROVIDER_ID
11 try:
12 provider = get_provider(CODEX_PROVIDER_ID)
13 start_browser_login = getattr(provider, "start_browser_login", None)
14 if callable(start_browser_login):
15 return start_browser_login(input, request).to_dict()
16 return provider.start_login(input, request).to_dict()
17 except Exception as exc:
18 return {"ok": False, "provider_id": CODEX_PROVIDER_ID, "error": str(exc)}
19
20 raw_provider_id = _provider_id(input)
21 try:
22 return get_provider(raw_provider_id).start_login(input, request).to_dict()
23 except Exception as exc:
24 return {
25 "ok": False,
26 "provider_id": _provider_id_label(raw_provider_id),
27 "error": str(exc),
28 }
29
30
31 def _provider_id(input: dict) -> object:
32 if "provider_id" not in input or input.get("provider_id") is None:
33 return CODEX_PROVIDER_ID
34 value = input.get("provider_id")
35 if isinstance(value, str) and not value.strip():
36 return CODEX_PROVIDER_ID
37 return value
38
39
40 def _provider_id_label(value: object) -> str:
41 if value is None:
42 return CODEX_PROVIDER_ID
43 text = str(value).strip()
44 return text or CODEX_PROVIDER_ID