From b2f4a359e00161b285b282c5e54ecf34b9f6d751 Mon Sep 17 00:00:00 2001 From: firedotguy Date: Thu, 29 Jan 2026 21:47:27 +0300 Subject: [PATCH] feat: add auth --- itd/client.py | 18 ++++++++++++++++-- itd/request.py | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/itd/client.py b/itd/client.py index f71d33a..77bff2d 100644 --- a/itd/client.py +++ b/itd/client.py @@ -5,11 +5,25 @@ from itd.notifications import get_notifications, mark_as_read, mark_all_as_read, from itd.posts import create_post, get_posts, get_post, edit_post, delete_post, pin_post, repost, view_post from itd.reports import report from itd.search import search +from itd.request import refresh_auth, set_cookies class Client: - def __init__(self, token: str): - self.token = token.replace('Bearer ', '') + def __init__(self, token: str | None, cookies: str | None = None): + self.cookies = cookies + + if token: + self.token = token.replace('Bearer ', '') + elif self.cookies: + self.refresh_auth() + else: + raise ValueError('Provide token or cookie') + + def refresh_auth(self): + if self.cookies: + self.token = refresh_auth(self.cookies) + else: + print('no cookies!') def get_user(self, username: str) -> dict: return get_user(self.token, username) diff --git a/itd/request.py b/itd/request.py index f3a79b6..b6371c2 100644 --- a/itd/request.py +++ b/itd/request.py @@ -4,7 +4,7 @@ s = Session() def fetch(token: str, method: str, url: str, params: dict = {}): - res = eval(f's.{method}')(f'https://итд.com/api/{url}', params=params, headers={ + res = eval(f's.{method}')(f'https://xn--d1ah4a.com/api/{url}', timeout=20, params=params, headers={ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate, br, zstd", @@ -21,4 +21,35 @@ def fetch(token: str, method: str, url: str, params: dict = {}): "TE": "trailers" }) res.raise_for_status() - return res.json() \ No newline at end of file + return res.json() + +def set_cookies(cookies: str): + for cookie in cookies.split('; '): + s.cookies.set(cookie.split('=')[0], cookie.split('=')[-1], path='/', domain='xn--d1ah4a.com.com') + +def refresh_auth(cookies: str): + print(s.cookies.get_dict()) + res = s.post(f'https://xn--d1ah4a.com/api/v1/auth/refresh', timeout=10, headers={ + "Host": "xn--d1ah4a.com", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0", + "Accept": "*/*", + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept-Encoding": "gzip, deflate, br, zstd", + "Referer": "https://xn--d1ah4a.com/", + "Content-Type": "application/json", + "Origin": "https://xn--d1ah4a.com", + "Sec-GPC": "1", + "Connection": "keep-alive", + "Cookie": cookies, + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-origin", + "Priority": "u=4", + "Pragma": "no-cache", + "Cache-Control": "no-cache", + "Content-Length": "0", + "TE": "trailers", + }) + res.raise_for_status() + print(res.text) + return res.json()['accessToken'] \ No newline at end of file