From c8a3605dd3f1ea5cbf19d41409470a4e9fb7129b Mon Sep 17 00:00:00 2001 From: "Mike A." Date: Wed, 23 Jul 2025 19:45:24 +0200 Subject: [PATCH] fix: add guard against incorrect account data deserialization --- findmy/reports/account.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/findmy/reports/account.py b/findmy/reports/account.py index c9a9a7b..3e0abef 100644 --- a/findmy/reports/account.py +++ b/findmy/reports/account.py @@ -15,6 +15,7 @@ from typing import ( TYPE_CHECKING, Any, Callable, + Literal, TypedDict, TypeVar, cast, @@ -91,6 +92,8 @@ class _AccountStateMappingLoginState(TypedDict): class AccountStateMapping(TypedDict): """JSON mapping representing state of an Apple account instance.""" + type: Literal["account"] + ids: _AccountStateMappingIds account: _AccountStateMappingAccount login: _AccountStateMappingLoginState @@ -436,6 +439,7 @@ class AsyncAppleAccount(BaseAppleAccount): @override def to_json(self, path: str | Path | None = None, /) -> AccountStateMapping: res: AccountStateMapping = { + "type": "account", "ids": {"uid": self._uid, "devid": self._devid}, "account": { "username": self._username, @@ -461,6 +465,8 @@ class AsyncAppleAccount(BaseAppleAccount): anisette_libs_path: str | Path | None = None, ) -> AsyncAppleAccount: val = read_data_json(val) + assert val["type"] == "account" + try: ani_provider = get_provider_from_mapping(val["anisette"], libs_path=anisette_libs_path) return cls(ani_provider, state_info=val)