LibreAuth SDK Docs
Nut.exe
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()