Files
RaptDramaDump/server/services/login.py
T

58 lines
2.3 KiB
Python

from server.services.adb import Adb
from server.services.device import DeviceProfile
from server.services.profile_poller import profile_poller
from server.services.rapt import rapt
from server.services.sessions import sessions
class LoginService:
def guest(self, raw_device: dict | None) -> dict:
device = DeviceProfile.merge(raw_device)
token = rapt.guest_token(device)
return self._finish(token, device)
def password(self, email: str, password: str, raw_device: dict | None) -> dict:
device = DeviceProfile.merge(raw_device)
token = rapt.email_token(email.strip(), password, device)
return self._finish(token, device)
def adb(self, serial: str, adb_path: str, source: str, raw_device: dict | None) -> dict:
if not serial.strip():
raise RuntimeError("请选择设备")
adb = Adb.locate(adb_path.strip())
if source == "device":
device = adb.read_profile(serial.strip())
chosen = DeviceProfile.merge(raw_device) if raw_device else None
if chosen is not None and raw_device:
if (raw_device.get("fingerprint") or "").strip():
device.fingerprint = chosen.fingerprint
if (raw_device.get("language") or "").strip():
device.language = chosen.language
else:
device = DeviceProfile.merge(raw_device)
token = adb.read_token(serial.strip())
return self._finish(token, device)
def current(self, token: str, raw_device: dict | None) -> dict:
token = token.strip()
if not token:
raise RuntimeError("请先登录")
device = sessions.bind(token, DeviceProfile.merge(raw_device))
profile = rapt.user_info(token, device)
self._watch(token, profile)
return {"token": token, "profile": profile, "device": device.as_dict()}
def _finish(self, token: str, device: DeviceProfile) -> dict:
bound = sessions.bind(token, device, replace=True)
profile = rapt.user_info(token, bound)
self._watch(token, profile)
return {"token": token, "profile": profile, "device": bound.as_dict()}
@staticmethod
def _watch(token: str, profile: dict) -> None:
sessions.remember(token, profile)
profile_poller.ensure(token)
login = LoginService()