|
3 | 3 | import time # sleep before exit |
4 | 4 |
|
5 | 5 | import binascii # hex encoding |
| 6 | +import hashlib |
6 | 7 |
|
7 | 8 | # https requests |
8 | 9 |
|
|
12 | 13 | import subprocess |
13 | 14 | import datetime |
14 | 15 | import sys |
15 | | -import requests |
16 | 16 | import os |
| 17 | +import requests |
17 | 18 | from requests_toolbelt.adapters.fingerprint import FingerprintAdapter |
18 | 19 |
|
19 | 20 | try: |
|
28 | 29 | time.sleep(1.5) |
29 | 30 | exit(0) |
30 | 31 |
|
31 | | - |
32 | | - |
33 | | - |
34 | 32 | class api: |
35 | 33 | name = ownerid = secret = version = "" |
36 | 34 |
|
@@ -42,19 +40,25 @@ def __init__(self, name, ownerid, secret, version): |
42 | 40 | self.secret = secret |
43 | 41 |
|
44 | 42 | self.version = version |
| 43 | + self.init() |
45 | 44 |
|
46 | 45 | sessionid = enckey = "" |
47 | 46 | initialized = False |
48 | 47 |
|
49 | 48 | def init(self): |
50 | | - |
| 49 | + if sessionid != "": |
| 50 | + print("You've already initialized!") |
| 51 | + time.sleep(2) |
| 52 | + exit(0) |
| 53 | + |
51 | 54 | init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() |
52 | 55 |
|
53 | 56 | self.enckey = SHA256.new(str(uuid4())[:8].encode()).hexdigest() |
54 | 57 |
|
55 | 58 | post_data = { |
56 | 59 | "type": binascii.hexlify(("init").encode()), |
57 | 60 | "ver": encryption.encrypt(self.version, self.secret, init_iv), |
| 61 | + "hash": self.getchecksum(), |
58 | 62 | "enckey": encryption.encrypt(self.enckey, self.secret, init_iv), |
59 | 63 | "name": binascii.hexlify(self.name.encode()), |
60 | 64 | "ownerid": binascii.hexlify(self.ownerid.encode()), |
@@ -86,6 +90,7 @@ def init(self): |
86 | 90 |
|
87 | 91 | self.sessionid = json["sessionid"] |
88 | 92 | self.initialized = True |
| 93 | + self.__load_app_data(json["appinfo"]) |
89 | 94 |
|
90 | 95 |
|
91 | 96 |
|
@@ -410,7 +415,18 @@ def checkinit(self): |
410 | 415 | if not self.initialized: |
411 | 416 | print("Initialize first, in order to use the functions") |
412 | 417 | sys.exit() |
413 | | - |
| 418 | + |
| 419 | + def getchecksum(self): |
| 420 | + path = os.path.realpath(__file__) |
| 421 | + md5_hash = hashlib.md5() |
| 422 | + |
| 423 | + a_file = open(path, "rb") |
| 424 | + content = a_file.read() |
| 425 | + md5_hash.update(content) |
| 426 | + |
| 427 | + digest = md5_hash.hexdigest() |
| 428 | + return digest |
| 429 | + |
414 | 430 | def __do_request(self, post_data): |
415 | 431 |
|
416 | 432 | rq_out = requests.post( |
@@ -419,11 +435,21 @@ def __do_request(self, post_data): |
419 | 435 |
|
420 | 436 | return rq_out.text |
421 | 437 |
|
| 438 | + class application_data_class: |
| 439 | + numUsers = numKeys = app_ver = customer_panel = onlineUsers = "" |
422 | 440 | # region user_data |
423 | 441 | class user_data_class: |
424 | 442 | username = ip = hwid = expires = createdate = lastlogin = subscription = "" |
425 | 443 |
|
426 | 444 | user_data = user_data_class() |
| 445 | + app_data = application_data_class() |
| 446 | + |
| 447 | + def __load_app_data(self, data): |
| 448 | + self.app_data.numUsers = data["numUsers"] |
| 449 | + self.app_data.numKeys = data["numKeys"] |
| 450 | + self.app_data.app_ver = data["version"] |
| 451 | + self.app_data.customer_panel = data["customerPanelLink"] |
| 452 | + self.app_data.onlineUsers = data["numOnlineUsers"] |
427 | 453 |
|
428 | 454 | def __load_user_data(self, data): |
429 | 455 | self.user_data.username = data["username"] |
|