mirror of
https://github.com/PaiGramTeam/SIMNet.git
synced 2024-11-22 06:17:57 +00:00
✨ Support get all token by stoken
This commit is contained in:
parent
420b1da340
commit
de26ed7062
@ -2,6 +2,7 @@ import json as jsonlib
|
|||||||
from typing import Optional, Tuple, Union
|
from typing import Optional, Tuple, Union
|
||||||
|
|
||||||
from simnet.client.base import BaseClient
|
from simnet.client.base import BaseClient
|
||||||
|
from simnet.client.cookies import CookiesModel
|
||||||
from simnet.client.routes import (
|
from simnet.client.routes import (
|
||||||
AUTH_URL,
|
AUTH_URL,
|
||||||
AUTH_KEY_URL,
|
AUTH_KEY_URL,
|
||||||
@ -372,7 +373,7 @@ class AuthClient(BaseClient):
|
|||||||
"account_id": self.account_id,
|
"account_id": self.account_id,
|
||||||
"game_token": game_token,
|
"game_token": game_token,
|
||||||
}
|
}
|
||||||
headers = {"x-rpc-app_id": "bll8iq97cem8" if self.region == Region.CHINESE else "c9oqaq3s3gu8"}
|
headers = {"x-rpc-app_id": "bll8iq97cem8"}
|
||||||
data = await self.request_lab(url, data=data, headers=headers)
|
data = await self.request_lab(url, data=data, headers=headers)
|
||||||
mid = data.get("user_info", {}).get("mid", "")
|
mid = data.get("user_info", {}).get("mid", "")
|
||||||
stoken_v2 = data.get("token", {}).get("token", "")
|
stoken_v2 = data.get("token", {}).get("token", "")
|
||||||
@ -409,6 +410,45 @@ class AuthClient(BaseClient):
|
|||||||
self.cookies.set("stoken", stoken_v2)
|
self.cookies.set("stoken", stoken_v2)
|
||||||
return stoken_v2, mid
|
return stoken_v2, mid
|
||||||
|
|
||||||
|
async def get_all_token_by_stoken(
|
||||||
|
self,
|
||||||
|
stoken: Optional[str] = None,
|
||||||
|
account_id: Optional[int] = None,
|
||||||
|
mid: Optional[str] = None,
|
||||||
|
) -> CookiesModel:
|
||||||
|
"""
|
||||||
|
Get stoken_v2, mid, ltoken and cookie_token by stoken v1 or v2
|
||||||
|
|
||||||
|
Args:
|
||||||
|
stoken (Optional[str]): The stoken_v1 to use to retrieve the stoken_v2 and mid.
|
||||||
|
If not provided, the `stoken` attribute value will be used.
|
||||||
|
account_id (Optional[int]): The account ID to use to retrieve the stoken_v2 and mid.
|
||||||
|
If not provided, the `account_id` attribute value will be used.
|
||||||
|
mid (Optional[str]): The mid to use to retrieve the stoken_v2 and mid.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
CookiesModel: The stoken_v2, mid, ltoken and cookie_token.
|
||||||
|
"""
|
||||||
|
if self.region != Region.OVERSEAS:
|
||||||
|
raise RegionNotSupported()
|
||||||
|
self.check_stoken(stoken, account_id, mid)
|
||||||
|
url = AUTH_KEY_URL.get_url(self.region) / "../../../account/ma-passport/token/getBySToken"
|
||||||
|
headers = {"x-rpc-app_id": "c9oqaq3s3gu8"}
|
||||||
|
data_ = {"dst_token_types": [1, 2, 4]}
|
||||||
|
data = await self.request_lab(url, method="POST", headers=headers, data=data_)
|
||||||
|
tokens = data.get("tokens", [])
|
||||||
|
token_map = {1: "", 2: "", 4: ""}
|
||||||
|
for token in tokens:
|
||||||
|
token_type = token.get("token_type", 0)
|
||||||
|
token_map[token_type] = token.get("token", "")
|
||||||
|
mid = data.get("user_info", {}).get("mid", "")
|
||||||
|
model = CookiesModel(mid=mid, stoken=token_map[1], ltoken=token_map[2], cookie_token=token_map[4])
|
||||||
|
self.cookies.set("mid", model.mid)
|
||||||
|
self.cookies.set("stoken", model.stoken)
|
||||||
|
self.cookies.set("ltoken", model.ltoken)
|
||||||
|
self.cookies.set("cookie_token", model.cookie_token)
|
||||||
|
return model
|
||||||
|
|
||||||
async def get_game_token_by_stoken(
|
async def get_game_token_by_stoken(
|
||||||
self,
|
self,
|
||||||
stoken: Optional[str] = None,
|
stoken: Optional[str] = None,
|
||||||
|
@ -1,12 +1,19 @@
|
|||||||
from http.cookiejar import CookieJar
|
from http.cookiejar import CookieJar
|
||||||
from http.cookies import SimpleCookie
|
from http.cookies import SimpleCookie
|
||||||
from typing import Optional
|
from typing import Optional, TypeVar
|
||||||
|
|
||||||
from httpx import Cookies as _Cookies
|
from httpx import Cookies as _Cookies
|
||||||
|
|
||||||
from simnet.utils.types import CookieTypes
|
from simnet.utils.types import CookieTypes
|
||||||
|
|
||||||
__all__ = ("Cookies",)
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
IntStr = TypeVar("IntStr", int, str)
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
"Cookies",
|
||||||
|
"CookiesModel",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class Cookies(_Cookies):
|
class Cookies(_Cookies):
|
||||||
@ -79,3 +86,85 @@ class Cookies(_Cookies):
|
|||||||
if value is None:
|
if value is None:
|
||||||
return default
|
return default
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
class CookiesModel(BaseModel, frozen=False):
|
||||||
|
"""A model that represents the cookies used by the client."""
|
||||||
|
|
||||||
|
login_uid: Optional[IntStr] = None
|
||||||
|
login_ticket: Optional[str] = None
|
||||||
|
|
||||||
|
stoken: Optional[str] = None
|
||||||
|
stuid: Optional[IntStr] = None
|
||||||
|
mid: Optional[str] = None
|
||||||
|
|
||||||
|
account_id: Optional[IntStr] = None
|
||||||
|
cookie_token: Optional[str] = None
|
||||||
|
|
||||||
|
ltoken: Optional[str] = None
|
||||||
|
ltuid: Optional[IntStr] = None
|
||||||
|
|
||||||
|
account_mid_v2: Optional[str] = None
|
||||||
|
cookie_token_v2: Optional[str] = None
|
||||||
|
account_id_v2: Optional[IntStr] = None
|
||||||
|
|
||||||
|
ltoken_v2: Optional[str] = None
|
||||||
|
ltmid_v2: Optional[str] = None
|
||||||
|
ltuid_v2: Optional[IntStr] = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_v1(self) -> bool:
|
||||||
|
if self.account_id or self.cookie_token or self.ltoken or self.ltuid:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_v2(self) -> bool:
|
||||||
|
if self.account_mid_v2 or self.cookie_token_v2 or self.ltoken_v2 or self.ltmid_v2:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def remove_v2(self):
|
||||||
|
"""Remove the v2 cookies."""
|
||||||
|
self.account_mid_v2 = None
|
||||||
|
self.cookie_token_v2 = None
|
||||||
|
self.ltoken_v2 = None
|
||||||
|
self.ltmid_v2 = None
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
"""Return the cookies as a dictionary."""
|
||||||
|
return self.dict(exclude_defaults=True)
|
||||||
|
|
||||||
|
def to_json(self):
|
||||||
|
"""Return the cookies as a JSON string."""
|
||||||
|
return self.json(exclude_defaults=True)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def user_id(self) -> Optional[int]:
|
||||||
|
if self.ltuid:
|
||||||
|
return self.ltuid
|
||||||
|
if self.account_id:
|
||||||
|
return self.account_id
|
||||||
|
if self.login_uid:
|
||||||
|
return self.login_uid
|
||||||
|
if self.stuid:
|
||||||
|
return self.stuid
|
||||||
|
if self.account_id_v2:
|
||||||
|
return self.account_id_v2
|
||||||
|
if self.ltuid_v2:
|
||||||
|
return self.ltuid_v2
|
||||||
|
return None
|
||||||
|
|
||||||
|
def set_v2_uid(self, user_id: int):
|
||||||
|
"""Set the user ID for the v2 cookies."""
|
||||||
|
if self.ltuid_v2 is None and self.ltoken_v2:
|
||||||
|
self.ltuid_v2 = user_id
|
||||||
|
if self.account_id_v2 is None and self.account_mid_v2:
|
||||||
|
self.account_id_v2 = user_id
|
||||||
|
|
||||||
|
def set_uid(self, user_id: int):
|
||||||
|
"""Set the user ID for the v1 cookies."""
|
||||||
|
if self.account_id is None and self.cookie_token:
|
||||||
|
self.account_id = user_id
|
||||||
|
if self.ltuid is None and self.ltoken:
|
||||||
|
self.ltuid = user_id
|
||||||
|
Loading…
Reference in New Issue
Block a user