errors
This commit is contained in:
@@ -20,6 +20,10 @@ class MyWhooshAuthError(MyWhooshError):
|
||||
pass
|
||||
|
||||
|
||||
class MyWhooshDeviceConflictError(MyWhooshAuthError):
|
||||
pass
|
||||
|
||||
|
||||
class MyWhooshTransientError(MyWhooshError):
|
||||
pass
|
||||
|
||||
@@ -52,7 +56,7 @@ class MyWhooshClient:
|
||||
"Platform": "Android",
|
||||
"Action": 1001,
|
||||
"CorrelationId": str(uuid.uuid4()),
|
||||
"DeviceId": str(uuid.uuid4()),
|
||||
"DeviceId": self.token_store.get_or_create_device_id(),
|
||||
"Authorization": "",
|
||||
}
|
||||
try:
|
||||
@@ -70,7 +74,10 @@ class MyWhooshClient:
|
||||
if not isinstance(body, dict):
|
||||
raise MyWhooshIntegrationError("MyWhoosh login response is not a JSON object")
|
||||
if body.get("Success") is not True or not body.get("AccessToken"):
|
||||
raise MyWhooshAuthError(str(body.get("Message") or "MyWhoosh login failed"))
|
||||
message = str(body.get("Message") or "MyWhoosh login failed")
|
||||
if "another device" in message.lower():
|
||||
raise MyWhooshDeviceConflictError(message)
|
||||
raise MyWhooshAuthError(message)
|
||||
self.token = MyWhooshToken(
|
||||
access_token=str(body["AccessToken"]),
|
||||
refresh_token=str(body["RefreshToken"]) if body.get("RefreshToken") else None,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import json
|
||||
import os
|
||||
import uuid
|
||||
from pathlib import Path
|
||||
|
||||
from app.mywhoosh.models import MyWhooshToken
|
||||
@@ -8,6 +9,7 @@ from app.mywhoosh.models import MyWhooshToken
|
||||
class MyWhooshTokenStore:
|
||||
def __init__(self, path: Path) -> None:
|
||||
self.path = path
|
||||
self.device_id_path = path.with_name("device_id")
|
||||
|
||||
def load(self) -> MyWhooshToken | None:
|
||||
try:
|
||||
@@ -40,3 +42,16 @@ class MyWhooshTokenStore:
|
||||
|
||||
def clear(self) -> None:
|
||||
self.path.unlink(missing_ok=True)
|
||||
|
||||
def get_or_create_device_id(self) -> str:
|
||||
try:
|
||||
existing = self.device_id_path.read_text("utf-8").strip()
|
||||
except (FileNotFoundError, OSError):
|
||||
existing = ""
|
||||
if existing:
|
||||
return existing
|
||||
device_id = str(uuid.uuid4())
|
||||
self.device_id_path.parent.mkdir(parents=True, exist_ok=True, mode=0o700)
|
||||
self.device_id_path.write_text(device_id, "utf-8")
|
||||
os.chmod(self.device_id_path, 0o600)
|
||||
return device_id
|
||||
|
||||
Reference in New Issue
Block a user