Python
58 lines · 2,065 bytes
import requests
import json
import secrets
class LibreAuth:
def __init__(self, name, owner_id, version, url):
self.name = name
self.owner_id = owner_id
self.version = version
self.url = url.rstrip('/') + '/'
self.session_id = None
self.enckey = None
def init(self, enckey=None):
self.enckey = (enckey or secrets.token_hex(18))[:35]
res = self._req({'type': 'init', 'ver': self.version, 'enckey': self.enckey})
if not res.get('success'):
raise Exception(res.get('message', 'Init failed'))
self.session_id = res['sessionid']
return res
def login(self, user, password, hwid='', code=''):
return self._auth({'type': 'login', 'username': user, 'pass': password, 'hwid': hwid, 'code': code})
def register(self, user, password, key, hwid='', email=''):
return self._auth({'type': 'register', 'username': user, 'pass': password, 'key': key, 'hwid': hwid, 'email': email})
def license(self, key, hwid='', code=''):
return self._auth({'type': 'license', 'key': key, 'hwid': hwid, 'code': code})
def token(self, token, hwid=''):
return self._auth({'type': 'token', 'token': token, 'hwid': hwid})
def var_get(self, varid):
res = self._req({'type': 'var', 'varid': varid})
if not res.get('success'):
raise Exception(res.get('message'))
return res.get('message')
def log(self, msg, pcuser=''):
self._req({'type': 'log', 'message': msg, 'pcuser': pcuser})
def _auth(self, data):
res = self._req(data)
if not res.get('success'):
raise Exception(res.get('message'))
return res.get('info')
def _req(self, data):
data['name'] = self.name
data['ownerid'] = self.owner_id
if self.session_id:
data['sessionid'] = self.session_id
r = requests.post(self.url, data=data, timeout=30)
if r.status_code == 429:
raise Exception('Rate limited')
return r.json()