def __init__(self): self._hidden = [] self._applets = [] self._read_db() self.networker = NetWorker(QtCore.QCoreApplication.instance().worker)
class AppletManager(object): def __init__(self): self._hidden = [] self._applets = [] self._read_db() self.networker = NetWorker(QtCore.QCoreApplication.instance().worker) def update(self): self.networker.download_bg(self._db_url, self._updated) def _updated(self, data): if not isinstance(data, QtNetwork.QNetworkReply.NetworkError): try: data = json.loads(data.data()) data = self._verify(**data) with open(DB_FILE, 'w') as db: json.dump(data, db) if data['location'] != self._db_url: self._db_url = data['location'] self.update() else: self._read_db() except: pass # Ignore def _verify(self, message, signature): key = RSA.importKey(self._pub_key) h = SHA256.new() h.update(message) verifier = PKCS1_PSS.new(key) if verifier.verify(h, signature.decode('base64')): return json.loads(message.decode('base64')) raise ValueError("Invalid file signature!") def _read_db(self): try: with open(DB_FILE, 'r') as db: data = json.load(db) except: basedir = QtCore.QCoreApplication.instance().basedir path = os.path.join(basedir, 'appletdb.json') with open(path, 'r') as db: data = json.load(db) self._applets = [] for applet in data['applets']: self._applets.append(Applet(**applet)) self._hidden = data['hidden'] self._db_url = data['location'] self._pub_key = data['pubkey'] def get_applets(self): return self._applets def get_applet(self, aid): if aid in self._hidden: return None for applet in self._applets: if aid.startswith(applet.aid): return applet return Applet(aid, m.unknown, m.unknown_applet)