Exemplo n.º 1
0
 def __init__(self):
     self._hidden = []
     self._applets = []
     self._read_db()
     self.networker = NetWorker(QtCore.QCoreApplication.instance().worker)
Exemplo n.º 2
0
 def __init__(self):
     self._hidden = []
     self._applets = []
     self._read_db()
     self.networker = NetWorker(QtCore.QCoreApplication.instance().worker)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)