77 lines
1.6 KiB
Python
77 lines
1.6 KiB
Python
from threading import Thread
|
|
from time import sleep, time
|
|
from macros import *
|
|
from Crypto.Cipher import AES
|
|
from Crypto.Random import get_random_bytes
|
|
from hashlib import sha256
|
|
from base64 import b64decode
|
|
from datetime import datetime
|
|
from urllib import request
|
|
import os, json, requests
|
|
|
|
|
|
class LThread(Thread):
|
|
_FIRST = True
|
|
|
|
|
|
def __init__(self, event):
|
|
super(LThread, self).__init__()
|
|
self.event = event
|
|
|
|
|
|
def check(self):
|
|
url = 'https://license.bitheaven.ru/api/v1/license.check'
|
|
post = {
|
|
'key': CONF.get('license'),
|
|
'loc': CONF.get('location'),
|
|
'time': int(time()),
|
|
'data': get_random_bytes(16)
|
|
}
|
|
curtime = post['time']
|
|
|
|
try:
|
|
req = requests.post(url, data=post).json()
|
|
except requests.exceptions.RequestException as e:
|
|
return False
|
|
|
|
if req['error']:
|
|
ERR(f"Server error! {req['msg']}")
|
|
return True
|
|
|
|
key = sha256(post['loc'].encode('utf-8')).hexdigest()[0:32].encode("utf-8")
|
|
iv = post['data']
|
|
aes = AES.new(key, AES.MODE_OFB, iv=iv)
|
|
msg = aes.decrypt(b64decode(req['data'])).decode('unicode_escape').strip()
|
|
|
|
until = datetime.fromtimestamp(req['until']).strftime('%d.%m.%Y')
|
|
|
|
if self._FIRST:
|
|
INFO(f'License paid until: {until}')
|
|
self._FIRST = False
|
|
|
|
return f"{CONF.get('license')}{curtime}" == msg
|
|
|
|
|
|
def run(self):
|
|
try:
|
|
while 1:
|
|
if self.event.is_set():
|
|
break
|
|
|
|
cur = self.check()
|
|
|
|
if not cur:
|
|
try:
|
|
request.urlopen('http://1.1.1.1', timeout=2)
|
|
CRIT("License wrong or expired!")
|
|
WARN("Get it on https://bhev.ru/glfbam")
|
|
sleep(60)
|
|
except:
|
|
ERR("No access to network!")
|
|
# os._exit(1)
|
|
|
|
sleep(5)
|
|
except Exception as e:
|
|
CRIT(str(e))
|
|
os._exit(1)
|