Untitled
unknown
plain_text
a year ago
6.2 kB
136
Indexable
import contextlib from secrets import token_urlsafe from httpx import Client import requests from dataclasses import dataclass from time import time import jwt import capmonster_python import json import uuid def magic_decode(string: str): with contextlib.suppress(json.JSONDecodeError): return json.loads(string) with contextlib.suppress(jwt.exceptions.DecodeError): return jwt.decode(string, options={"verify_signature": False}) raise DecodeException @dataclass class User: username: str = '' password: str = '' def __hash__(self): return hash(self.username) @dataclass class Token(): access_token: str id_token: str expire: float created = time() class Version: def __init__(self): self.versions = requests.get("https://valorant-api.com/v1/version").json()["data"] self.valorant = self.valorant() self.riot = self.riot() self.sdk = self.sdk() def riot(self): return self.versions["riotClientBuild"] def sdk(self): return sdk if (sdk := self.versions["riotClientVersion"].split(".")[1]) else "23.8.0.1382" def valorant(self): return self.versions["riotClientVersion"] version = Version() class CaptchaFlow: def __init__(self, session, user): self.ses = session self.user = user def get_captcha_token(self): data = { "clientId": "riot-client", "language": "ru-RU", "platform": "web", "remember": False, "riot_identity": { "language": "it_IT", "state": "auth", }, "sdkVersion": version.sdk, "type": "auth", } url = "https://authenticate.riotgames.com/api/v1/login" response_data = self.ses.get(url).json() print(response_data) return response_data def get_login_token(self, code: str): data = { "riot_identity": { "captcha": f"hcaptcha {code}", "language": "ru_RU", "password": self.user.password, "remember": False, "username": self.user.username }, "type": "auth" } url = "https://authenticate.riotgames.com/api/v1/login" response_data = self.ses.put(url, json=data).json() print(response_data) return response_data def login_cookies(self, login_token: str): data = { "authentication_type": "RiotAuth", "code_verifier": "", "login_token": login_token, "persist_login": False } url = "https://auth.riotgames.com/api/v1/login-token" self.ses.post(url, json=data) def solve_captcha(self, data): sitekey = data["captcha"]["hcaptcha"]["key"] rqdata = data["captcha"]["hcaptcha"]["data"] capmonster = capmonster_python.HCaptchaTask("key") print(sitekey) capmonster.set_user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36") task_id = capmonster.create_task(website_url="https://auth.riotgames.com", website_key=sitekey, custom_data=rqdata) result = capmonster.join_task_result(task_id) return result.get("gRecaptchaResponse") def captcha_flow(self): captcha_data = self.get_captcha_token() captcha_token = self.solve_captcha(captcha_data) login_token = self.get_login_token(captcha_token) self.login_cookies(login_token) class RiotAuth: def __init__(self, user): self.session = self.setup_session() self.setup_auth(self.session) CaptchaFlow(self.session, user).captcha_flow() self.token, self.cookies = self.get_auth_data(self.session) def setup_session(self): app = "rso-auth" session = Client() session.headers.update({ "User-Agent": f'RiotClient/{version.riot} {app} (Windows;10;;Professional, x64)', "Cache-Control": "no-cache", "Accept": "application/json", "Content-Type": "application/json" }) session.cookies.update({"tdid": "", "asid": "", "did": "", "clid": ""}) return session def setup_auth(self, session): data = { "acr_values": "urn:riot:gold", "client_id": "accountodactyl-prod", "redirect_uri": "https://account.riotgames.com/oauth2/log-in", "response_type": "code", "scope": "openid email profile riot:/riot.atlas/accounts.edit riot:/riot.atlas/accounts/password.edit " "riot:/riot.atlas/accounts/email.edit riot:/riot.atlas/accounts.auth riot://third_party.revoke " "riot://third_party.query riot://forgetme/notify.write riot:/riot.authenticator/auth.code " "riot:/riot.authenticator/authz.edit riot:/rso/mfa/device.write " "riot:/riot.authenticator/identity.add", "state": str(uuid.uuid4()), "security_profile": "high" } url = "https://auth.riotgames.com/api/v1/authorization" r = session.post(url, json=data) print(r.json()) return r def get_auth_data(self, session): r = self.setup_auth(session) cookies = dict(r.cookies) print(cookies) data = r.json() print(data) if "error" in data: raise Exception(data["error"]) uri = "test" token = "2" return token, cookies def get_user_info(session, token: Token) -> str: headers = { "Accept-Encoding": "gzip, deflate, br", "Authorization": f"Bearer {token.access_token}", } r = session.post("https://auth.riotgames.com/userinfo", headers=headers, json={}) return magic_decode(r.text) if __name__ == "__main__": user = User("Sussy710", "dhruv710") client = RiotAuth(user)
Editor is loading...
Leave a Comment