main
py 45 lines 1.42 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 Disconnect(ApiHandler):
8 async def process(self, input: dict, request: Request) -> dict:
9 del request
10 raw_provider_id = _provider_id(input)
11 try:
12 provider = get_provider(raw_provider_id)
13 result = provider.disconnect()
14 response = {
15 "ok": True,
16 "provider_id": provider.provider_id,
17 "result": result,
18 "provider": provider.status(),
19 **result,
20 }
21 if provider.provider_id == CODEX_PROVIDER_ID:
22 response["codex"] = response["provider"]
23 return response
24 except Exception as exc:
25 return {
26 "ok": False,
27 "provider_id": _provider_id_label(raw_provider_id),
28 "error": str(exc),
29 }
30
31
32 def _provider_id(input: dict) -> object:
33 if "provider_id" not in input or input.get("provider_id") is None:
34 return CODEX_PROVIDER_ID
35 value = input.get("provider_id")
36 if isinstance(value, str) and not value.strip():
37 return CODEX_PROVIDER_ID
38 return value
39
40
41 def _provider_id_label(value: object) -> str:
42 if value is None:
43 return CODEX_PROVIDER_ID
44 text = str(value).strip()
45 return text or CODEX_PROVIDER_ID