File size: 3,961 Bytes
70c1e23
 
b2e11d6
 
 
70c1e23
 
 
 
 
44c5e78
d334d53
44c5e78
70c1e23
44c5e78
70c1e23
 
 
b2e11d6
 
 
 
70c1e23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b2e11d6
70c1e23
 
 
 
 
 
 
b2e11d6
 
 
70c1e23
 
 
 
 
 
 
 
 
b2e11d6
70c1e23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import json
import requests
import random
import string

from datetime import datetime
from pathlib import Path
from utils.logger import logger


class CookiesConstructor:
    bypass_url = "https://zklcdc-pass.hf.space"

    def __init__(self):
        self.cookies = {}
        self.secrets_path = Path(__file__).parents[1] / "secrets.json"
        self.created_datetime_format = "%Y-%m-%d %H:%M:%S"

    def generate_kiev_rps_sec_auth(self):
        kiev = "".join(random.choices(string.ascii_uppercase + string.digits, k=32))
        return kiev

    def create_secrets_json(self):
        if not self.secrets_path.exists():
            self.secrets_path.parent.mkdir(parents=True, exist_ok=True)
            with open(self.secrets_path, "w") as wf:
                json.dump({}, wf)

    def is_local_cookies_valid(self):
        self.create_secrets_json()
        if self.secrets_path.exists():
            with open(self.secrets_path, "r") as f:
                secrets = json.load(f)
            if secrets.get("cookies"):
                cookies = secrets["cookies"]
                cookies_str = cookies.get("cookies_str")
                cookies_created_datetime = datetime.strptime(
                    cookies.get("created_time"), self.created_datetime_format
                )
                datetime_now = datetime.now()
                # if cookies created more than 12 hours, then it's invalid
                self.cookies_created_seconds = (
                    datetime_now - cookies_created_datetime
                ).seconds
                if self.cookies_created_seconds < 12 * 60 * 60:
                    self.cookies_str = cookies_str
                    self.cookies_created_datetime = cookies_created_datetime
                    return True
                else:
                    return False
        return False

    def requests_cookies(self):
        if self.is_local_cookies_valid():
            logger.success(
                f"Local Cookies Used: {self.cookies_created_datetime} "
                f"({round(self.cookies_created_seconds/60/60,2)} hours ago)"
            )
            return

        requests_body = {"cookies": ""}
        try:
            logger.note(f"Requesting Cookies from: {self.bypass_url}")
            res = requests.post(
                self.bypass_url,
                json=requests_body,
                timeout=15,
            )
            data = res.json()
            cookies_str = data["result"]["cookies"]
            cookies_screenshot = data["result"]["screenshot"]
            kiev = self.generate_kiev_rps_sec_auth()
            cookies_str = f"KievRPSSecAuth={kiev}; {cookies_str}"
            logger.note(f"Get Cookies: {cookies_str}")
            if cookies_str:
                with open(self.secrets_path, "r") as rf:
                    secrets = json.load(rf)
                secrets["cookies"] = {
                    "cookies_str": cookies_str,
                    "created_time": datetime.now().strftime(
                        self.created_datetime_format
                    ),
                    "screenshot": self.bypass_url + cookies_screenshot,
                }
                with open(self.secrets_path, "w") as wf:
                    json.dump(secrets, wf)
        except Exception as e:
            cookies_str = ""
            logger.err(e)

        self.cookies_str = cookies_str

    def cookies_str_to_dict(self):
        cookie_items = self.cookies_str.split(";")
        for cookie_item in cookie_items:
            if not cookie_item:
                continue
            cookie_key, cookie_value = cookie_item.split("=", 1)
            self.cookies[cookie_key.strip()] = cookie_value.strip()
        logger.success(f"Cookies: {self.cookies}")

    def construct(self):
        self.requests_cookies()
        self.cookies_str_to_dict()


if __name__ == "__main__":
    cookies_constructor = CookiesConstructor()
    cookies_constructor.construct()