def add_keypair(self, public_key, private_key, site, user, passphrase): """ add a keypair into the gpg key database """ try: result1 = self.gpg.import_keys(b64decode(public_key)) result2 = self.gpg.import_keys(b64decode(private_key)) except TypeError as error: getLogger(__name__).critical("add_keypair TypeError " + str(error)) # make sure this is a key _pair_ try: assert result1.fingerprints[0] == result2.fingerprints[0] except (IndexError, AssertionError) as error: getLogger(__name__).exception( 'add_keypair IndexError/AssertionError: ' + str(error)) return None fingerprint = result1.fingerprints[0] if self.is_passphrase_valid(passphrase=passphrase, fingerprint=fingerprint): old_fingerprint = self.get_fingerprint(site, user) if not old_fingerprint: sql = "INSERT INTO keys (site, user, fingerprint) VALUES (?, ?, ?)" database_execute(sql, (site, user, fingerprint)) else: sql = "UPDATE keys SET SITE=? WHERE fingerprint=?" database_execute(sql, (site, old_fingerprint)) if fingerprint != old_fingerprint: getLogger(__name__).warn('updating %s fingerprint to %s' % (user, fingerprint)) return fingerprint else: return None
def generate(self, passphrase, site, user): """ Generate a new 2048 bit GPG key and add it to the gpg manager. """ data = self.gpg.gen_key_input(key_length=2048, passphrase=passphrase) dat = self.gpg.gen_key(data) fingerprint = dat.fingerprint sql = "INSERT INTO keys (site, user, fingerprint) VALUES (?, ?, ?);" database_execute(sql, (site, user, fingerprint)) return fingerprint
def delete(self, index, save=False): """ Delete item from list by 'index' :param index: :param save: :return: """ item = self._list[index] localbox_client = LocalBox(url=item.url, label=item.label) localbox_client.delete(item.path) localbox_client.delete_share(item.id) sql = 'delete from keys where site = ? and user != ?' database_execute(sql, (item.label, item.user)) del self._list[index] if save: self.save()
def get_server_data(label=None): if label: sql = "SELECT label, url, picture FROM servers WHERE label='{}';".format(label) else: sql = "SELECT label, url, picture FROM servers;" cursor = database_execute(sql) return cursor
def add_public_key(self, site, user, public_key): """ add a public key into the gpg key database """ try: result1 = self.gpg.import_keys(b64decode(public_key)) fingerprint = result1.fingerprints[0] sql = "INSERT INTO keys (site, user, fingerprint) VALUES (?, ?, ?)" database_execute(sql, (site, user, fingerprint)) return fingerprint except TypeError as error: getLogger(__name__).critical("add_public_key TypeError " + str(error)) except DatabaseError as error: getLogger(__name__).critical("add_public_key DatabaseError " + str(error))
def delete_client_data(label): sql = 'delete from sites where site=?' database_execute(sql, (label, )) sql = 'delete from keys where site=?' database_execute(sql, (label, ))
def delete_for_label(self, label): sql = 'delete from keys where site = ?' database_execute(sql, (label, )) map(lambda i: self._list.remove(i), filter(lambda i: i.label == label, self._list))
def create_server_data(server): sql = "INSERT INTO servers (label, url, picture) VALUES (?, ?, ?);" database_execute(sql, (server.label, server.url, server.picture))
def get_fingerprint(self, site, user): sql = "select fingerprint from keys where site = ? and user = ?" result = database_execute(sql, (site, user)) if not len(result): return None return result[0][0]
getLogger(__name__).info("LocalBox Sync Version: %s (%s)", sync.__version__.VERSION_STRING, sync.__version__.git_version) signal.signal(signal.SIGINT, openfiles_ctrl.remove_all) signal.signal(signal.SIGTERM, openfiles_ctrl.remove_all) try: # only on Windows signal.signal(signal.CTRL_C_EVENT, openfiles_ctrl.remove_all) except: pass try: sql = 'SELECT token FROM sites' database_execute(sql) except DatabaseError: sql = 'ALTER TABLE sites ADD COLUMN TOKEN CHAR(255)' database_execute(sql) getLogger(__name__).debug('TOKEN column added to table SITES') if len(sys.argv) > 1: filename = ' '.join(sys.argv[1:]) run_file_decryption(filename, memory) else: run_event_daemon() run_sync_daemon() finally: memory.destroy()