def queried(rows): if len(rows) < 1: result_d.callback(False) return if len(rows) > 1: while len(rows) > 0: row = rows.pop(0) if row[1] == 'rw': # db_user_type is 'rw', then break, we have the best account type break else: row = rows[0] def got_keys_cb(keys): logging.debug("indx_pg2 lookup_best_acct got_keys_cb") # now row is the best account db_user, db_user_type, db_password_encrypted = row db_pass = rsa_decrypt(keys['private'], db_password_encrypted) result_d.callback((db_user, db_pass)) return user = IndxUser(self, box_user) user.get_keys().addCallbacks(got_keys_cb, result_d.errback)
def created_cb(user_details): logging.debug("indx_pg2 create_box, created_cb") rw_user, rw_user_pass, ro_user, ro_user_pass = user_details def got_keys_cb(keys): logging.debug("indx_pg2 create_box, got_keys_cb") # assign ownership now to db_owner rw_pw_encrypted = rsa_encrypt(keys['public'], rw_user_pass) ro_pw_encrypted = rsa_encrypt(keys['public'], ro_user_pass) def indx_db(conn_indx): logging.debug("indx_pg2 create_box, indx_db") d_q = conn_indx.runOperation("INSERT INTO tbl_keychain (user_id, db_name, db_user, db_user_type, db_password_encrypted) VALUES ((SELECT id_user FROM tbl_users WHERE username = %s), %s, %s, %s, %s), ((SELECT id_user FROM tbl_users WHERE username = %s), %s, %s, %s, %s)", [db_owner, db_name, rw_user, 'rw', rw_pw_encrypted, db_owner, db_name, ro_user, 'ro', ro_pw_encrypted]) def inserted(empty): logging.debug("indx_pg2 create_box, inserted, next ACL") acl_q = conn_indx.runOperation("INSERT INTO tbl_acl (database_name, user_id, acl_read, acl_write, acl_owner, acl_control) VALUES (%s, (SELECT id_user FROM tbl_users WHERE username = %s), %s, %s, %s, %s)", [box_name, db_owner, True, True, True, True]) def inserted_acl(empty): logging.debug("indx_pg2 create_box, inserted_acl - create_box finished") return_d.callback(True) acl_q.addCallbacks(inserted_acl, return_d.errback) d_q.addCallbacks(inserted, return_d.errback) # connect to INDX db to add new DB accounts to keychain self.connect_indx_db().addCallbacks(indx_db, return_d.errback) user = IndxUser(self, db_owner) user.get_keys().addCallbacks(got_keys_cb, return_d.errback)
def keys_cb(keys): logging.debug( "indx_pg2, transfer_keychain_users, connected_cb, keys_cb") # FIXME we will need to decrypt private key somehow private_key = keys['private'] def keys2_cb(keys2): logging.debug( "indx_pg2, transfer_keychain_users, connected_cb, keys2_cb" ) public2_key = keys2['public'] def existing_cb(rows): logging.debug( "indx_pg2, transfer_keychain_users, connected_cb, existing_cb" ) def process_row(empty): if len(rows) < 1: return_d.callback(True) return row = rows.pop(0) db_user, db_user_type, db_password_encrypted = row if db_user_type not in user_types: process_row(None) return # next loop db_password_clear = rsa_decrypt( private_key, db_password_encrypted) db_password_new_encrypted = rsa_encrypt( public2_key, db_password_clear) ins_q = "INSERT INTO tbl_keychain (user_id, db_name, db_user, db_user_type, db_password_encrypted) VALUES ((SELECT id_user FROM tbl_users WHERE username = %s), %s, %s, %s, %s)" ins_p = [ to_user, db_name, db_user, db_user_type, db_password_new_encrypted ] conn.runOperation(ins_q, ins_p).addCallbacks( process_row, return_d.errback) process_row(None) conn.runQuery( "SELECT db_user, db_user_type, db_password_encrypted FROM tbl_keychain JOIN tbl_users ON (tbl_users.id_user = tbl_keychain.user_id) WHERE tbl_users.username = %s AND db_name = %s", [from_user, db_name]).addCallbacks( existing_cb, return_d.errback) to_user_obj = IndxUser(self, to_user) to_user_obj.get_keys().addCallbacks(keys2_cb, return_d.errback)
def connected_cb(conn): logging.debug("indx_pg2 transfer_keychain_users, connected_cb") def keys_cb(keys): logging.debug("indx_pg2, transfer_keychain_users, connected_cb, keys_cb") # FIXME we will need to decrypt private key somehow private_key = keys['private'] def keys2_cb(keys2): logging.debug("indx_pg2, transfer_keychain_users, connected_cb, keys2_cb") public2_key = keys2['public'] def existing_cb(rows): logging.debug("indx_pg2, transfer_keychain_users, connected_cb, existing_cb") def process_row(empty): if len(rows) < 1: return_d.callback(True) return row = rows.pop(0) db_user, db_user_type, db_password_encrypted = row if db_user_type not in user_types: process_row(None) return # next loop db_password_clear = rsa_decrypt(private_key, db_password_encrypted) db_password_new_encrypted = rsa_encrypt(public2_key, db_password_clear) ins_q = "INSERT INTO tbl_keychain (user_id, db_name, db_user, db_user_type, db_password_encrypted) VALUES ((SELECT id_user FROM tbl_users WHERE username = %s), %s, %s, %s, %s)" ins_p = [to_user, db_name, db_user, db_user_type, db_password_new_encrypted] conn.runOperation(ins_q, ins_p).addCallbacks(process_row, return_d.errback) process_row(None) conn.runQuery("SELECT db_user, db_user_type, db_password_encrypted FROM tbl_keychain JOIN tbl_users ON (tbl_users.id_user = tbl_keychain.user_id) WHERE tbl_users.username = %s AND db_name = %s", [from_user, db_name]).addCallbacks(existing_cb, return_d.errback) to_user_obj = IndxUser(self, to_user) to_user_obj.get_keys().addCallbacks(keys2_cb, return_d.errback) from_user_obj = IndxUser(self, from_user) from_user_obj.get_keys().addCallbacks(keys_cb, return_d.errback)