Esempio n. 1
0
async def create_delete_role_owner_txns(key_pair, next_id, txn_list):
    """Create the delete transactions for an owner if ownership of a role(s) exists.
    Args:
           key_pair:
               obj: public and private keys for user
           next_id: next_
               str: next_id to search for the roles where user is the admin
           txn_list:
               list: transactions for batch submission
    Returns:
        txn_list:
            list: extended list of transactions for batch submission
    """
    conn = await create_connection()
    roles = (await r.table("role_owners").filter({
        "related_id": next_id
    }).coerce_to("array").run(conn))
    conn.close()
    if roles:
        owner_delete = DeleteRoleOwner()
        for role in roles:
            owner_delete_message = owner_delete.make(signer_keypair=key_pair,
                                                     related_id=next_id,
                                                     role_id=role["role_id"])
            payload = owner_delete.make_payload(
                message=owner_delete_message,
                signer_keypair=key_pair,
                signer_user_id=key_pair.public_key,
            )
            transaction = batcher.make_transaction(payload=payload,
                                                   signer_keypair=key_pair)
            txn_list.extend([transaction])
    return txn_list
Esempio n. 2
0
def delete_user_transaction(inbound_entry, user_in_db, key_pair):
    """Composes transactions for deleting a user.  This includes deleting role_owner,
    role_admin, and role_member relationships and user object.
    """
    user_delete = DeleteUser()
    next_id = user_in_db[0]["next_id"]
    inbound_entry = add_sawtooth_prereqs(entry_id=next_id,
                                         inbound_entry=inbound_entry,
                                         data_type="user")

    txn_list = []
    # Compile role relationship transactions for removal from blockchain
    txn_list = create_reject_ppsls_user_txns(key_pair, next_id, txn_list)
    txn_list = create_delete_role_owner_txns(key_pair, next_id, txn_list)
    txn_list = create_delete_role_admin_txns(key_pair, next_id, txn_list)
    txn_list = create_delete_role_member_txns(key_pair, next_id, txn_list)

    # Compile user delete transaction for removal from blockchain
    message = user_delete.make(signer_keypair=key_pair, next_id=next_id)
    payload = user_delete.make_payload(message=message,
                                       signer_keypair=key_pair,
                                       signer_user_id=key_pair.public_key)
    transaction = batcher.make_transaction(payload=payload,
                                           signer_keypair=key_pair)
    txn_list.extend([transaction])

    if txn_list:
        batch = batcher.make_batch_from_txns(transactions=txn_list,
                                             signer_keypair=key_pair)
        inbound_entry["batch"] = batch.SerializeToString()
def create_delete_user_txns(txn_key, next_id, txn_list):
    """Create the delete transactions for user."""
    user_delete = DeleteUser()
    message = user_delete.make(signer_keypair=txn_key, next_id=next_id)
    payload = user_delete.make_payload(message=message,
                                       signer_keypair=txn_key,
                                       signer_user_id=next_id)
    transaction = batcher.make_transaction(payload=payload,
                                           signer_keypair=txn_key)
    txn_list.extend([transaction])
    return txn_list
Esempio n. 4
0
    def test_make_transaction(self):
        """Test the make transaction batch function"""
        payload, signer = self.get_test_payload()

        transaction = batcher.make_transaction(payload=payload, signer_keypair=signer)

        self.assertValidTransaction(
            transaction=transaction,
            payload=payload,
            signer_public_key=signer.public_key,
        )
Esempio n. 5
0
    def test_make_batch_list(self):
        """Test the make batch list batch function"""
        payload, signer = self.get_test_payload()

        transaction = batcher.make_transaction(payload=payload, signer_keypair=signer)

        batch_list = batcher.make_batch_list(transaction=transaction)

        self.assertValidBatchList(
            batch_list=batch_list,
            payload=payload,
            signer_public_key=signer.public_key,
            batcher_public_key=BATCHER_KEY_PAIR.public_key,
        )
Esempio n. 6
0
async def create_rjct_ppsls_role_txns(key_pair, role_id, txn_user_id, txn_list):
    """Create the reject open proposals transactions for a role that has been
    deleted.
    Args:
        key_pair:
            obj: public and private keys for user
        role_id:
            str: role_id parameter of the targeted role to close proposals for
        txn_list:
            list: transactions for batch submission
    Returns:
        txn_list:
            list: extended list of transactions for batch submission
    """
    conn = await create_connection()
    proposals = await fetch_open_proposals_by_role(conn, role_id)
    conn.close()
    if proposals:
        for proposal in proposals:
            reason = "Target Role was deleted."
            reject_proposal = PROPOSAL_TRANSACTION[proposal["proposal_type"]][
                "REJECTED"
            ]
            reject_proposal_msg = reject_proposal.make(
                signer_keypair=key_pair,
                signer_user_id=txn_user_id,
                proposal_id=proposal["proposal_id"],
                object_id=proposal["object_id"],
                related_id=proposal["related_id"],
                reason=reason,
            )
            payload = reject_proposal.make_payload(
                message=reject_proposal_msg,
                signer_keypair=key_pair,
                signer_user_id=key_pair.public_key,
            )
            transaction = batcher.make_transaction(
                payload=payload, signer_keypair=key_pair
            )
            txn_list.extend([transaction])
    else:
        LOGGER.warning("No proposals found for role: %s", role_id)
    return txn_list
Esempio n. 7
0
async def create_del_ownr_by_role_txns(key_pair, role_id, txn_list):
    """Create the delete transactions for role_owners. Used when fully deleting
    a role.
    Args:
           key_pair:
               obj: public and private keys for user
           role_id:
               str: next_id of the role to search for
           txn_list:
               list: transactions for batch submission
    Returns:
        txn_list:
            list: extended list of transactions for batch submission
    """
    conn = await create_connection()
    role_owners = (
        await r.table("role_owners")
        .filter({"role_id": role_id})
        .coerce_to("array")
        .run(conn)
    )
    conn.close()
    if role_owners:
        owner_delete = DeleteRoleOwner()
        for owner in role_owners:
            owner_delete_message = owner_delete.make(
                signer_keypair=key_pair,
                related_id=owner["related_id"],
                role_id=owner["role_id"],
            )
            payload = owner_delete.make_payload(
                message=owner_delete_message,
                signer_keypair=key_pair,
                signer_user_id=key_pair.public_key,
            )
            transaction = batcher.make_transaction(
                payload=payload, signer_keypair=key_pair
            )
            txn_list.extend([transaction])
    else:
        LOGGER.info("No role_owners found for role: %s", role_id)
    return txn_list
Esempio n. 8
0
def create_reject_ppsls_user_txns(key_pair, next_id, txn_list):
    """Create the reject open proposals transactions for user that has been deleted.
       Args:
           key_pair:
               obj: public and private keys for user
           next_id:
               str: next_id for of the targeted user to close proposals for
           txn_list:
               list: transactions for batch submission

    """
    conn = connect_to_db()
    proposals = (fetch_open_proposals_by_opener(next_id).union(
        get_open_proposals_by_approver(next_id)).distinct().coerce_to(
            "array").run(conn))
    conn.close()
    if proposals:
        for proposal in proposals:
            if proposal["opener"] == next_id:
                reason = "Opener was deleted"
            else:
                reason = "Assigned Appover was deleted."
            reject_proposal = PROPOSAL_TRANSACTION[
                proposal["proposal_type"]]["REJECTED"]
            reject_proposal_msg = reject_proposal.make(
                signer_keypair=key_pair,
                signer_user_id=next_id,
                proposal_id=proposal["proposal_id"],
                object_id=proposal["object_id"],
                related_id=proposal["related_id"],
                reason=reason,
            )
            payload = reject_proposal.make_payload(
                message=reject_proposal_msg,
                signer_keypair=key_pair,
                signer_user_id=key_pair.public_key,
            )
            transaction = batcher.make_transaction(payload=payload,
                                                   signer_keypair=key_pair)
            txn_list.extend([transaction])
    return txn_list
Esempio n. 9
0
def create_del_role_txns(key_pair, role_id, txn_list):
    """Create the delete transactions for a role object.
    Args:
        key_pair:
               obj: public and private keys for user
        next_id: next_
            str: next_id to search for the roles where user is the admin
        txn_list:
            list: transactions for batch submission
    Returns:
        txn_list:
            list: extended list of transactions for batch submission
    """
    role_delete = DeleteRole()
    message = role_delete.make(signer_keypair=key_pair, role_id=role_id)
    payload = role_delete.make_payload(
        message=message, signer_keypair=key_pair, signer_user_id=key_pair.public_key
    )
    transaction = batcher.make_transaction(payload=payload, signer_keypair=key_pair)
    txn_list.extend([transaction])
    return txn_list
Esempio n. 10
0
async def create_del_mmbr_by_user_txns(key_pair, next_id, txn_list):
    """Create the delete transactions for a member if user is an member of any
    roles.
    Args:
        key_pair:
            obj: public and private keys for user
        next_id: next_
            str: next_id to search for the roles where user is the admin
        txn_list:
            list: transactions for batch submission
    Returns:
        txn_list:
            list: extended list of transactions for batch submission
    """
    conn = await create_connection()
    roles = (
        await r.table("role_members")
        .filter({"related_id": next_id})
        .coerce_to("array")
        .run(conn)
    )
    conn.close()
    if roles:
        member_delete = DeleteRoleMember()
        for role in roles:
            admin_delete_message = member_delete.make(
                signer_keypair=key_pair, related_id=next_id, role_id=role["role_id"]
            )
            payload = member_delete.make_payload(
                message=admin_delete_message,
                signer_keypair=key_pair,
                signer_user_id=key_pair.public_key,
            )
            transaction = batcher.make_transaction(
                payload=payload, signer_keypair=key_pair
            )
            txn_list.extend([transaction])
    else:
        LOGGER.info("No role_members found for user: %s", next_id)
    return txn_list
Esempio n. 11
0
def create_delete_role_member_txns(key_pair, next_id, txn_list):
    """Create the delete transactions for a member if user is an member of any roles."""
    conn = connect_to_db()
    roles = (r.table("role_members").filter({
        "related_id": next_id
    }).coerce_to("array").run(conn))
    conn.close()
    if roles:
        member_delete = DeleteRoleMember()
        for role in roles:
            admin_delete_message = member_delete.make(signer_keypair=key_pair,
                                                      related_id=next_id,
                                                      role_id=role["role_id"])
            payload = member_delete.make_payload(
                message=admin_delete_message,
                signer_keypair=key_pair,
                signer_user_id=key_pair.public_key,
            )
            transaction = batcher.make_transaction(payload=payload,
                                                   signer_keypair=key_pair)
            txn_list.extend([transaction])
    return txn_list
Esempio n. 12
0
async def create_delete_role_owner_txns(key_pair, next_id, txn_list):
    """Create the delete transactions for an owner if ownership of a role(s) exists."""
    conn = await create_connection()
    roles = (await r.table("role_owners").filter({
        "related_id": next_id
    }).coerce_to("array").run(conn))
    conn.close()
    if roles:
        owner_delete = DeleteRoleOwner()
        for role in roles:
            owner_delete_message = owner_delete.make(signer_keypair=key_pair,
                                                     related_id=next_id,
                                                     role_id=role["role_id"])
            payload = owner_delete.make_payload(
                message=owner_delete_message,
                signer_keypair=key_pair,
                signer_user_id=key_pair.public_key,
            )
            transaction = batcher.make_transaction(payload=payload,
                                                   signer_keypair=key_pair)
            txn_list.extend([transaction])
    return txn_list