예제 #1
0
            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)
예제 #2
0
파일: indx_pg2.py 프로젝트: sociam/indx
                    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)
예제 #3
0
파일: indx_pg2.py 프로젝트: kyonetca/indx
                    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)
예제 #4
0
            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)
예제 #5
0
파일: indx_pg2.py 프로젝트: sociam/indx
        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)
예제 #6
0
파일: indx_pg2.py 프로젝트: sociam/indx
            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)