def apply_propose_remove(header, payload, state):
    proposal_payload = role_transaction_pb2.ProposeRemoveRoleMember()
    proposal_payload.ParseFromString(payload.content)

    role_members_address = addresser.make_role_members_address(
        role_id=proposal_payload.role_id, user_id=proposal_payload.user_id)

    proposal_address = addresser.make_proposal_address(
        object_id=proposal_payload.role_id,
        related_id=proposal_payload.user_id)

    state_entries = validate_role_rel_proposal(header, proposal_payload,
                                               role_members_address, state,
                                               True)

    if not no_open_proposal(
            state_entries=state_entries,
            object_id=proposal_payload.role_id,
            related_id=proposal_payload.user_id,
            proposal_address=proposal_address,
            proposal_type=proposal_state_pb2.Proposal.REMOVE_ROLE_MEMBERS):
        raise InvalidTransaction(
            "There is already an open proposal for REMOVE_ROLE_MEMBERS "
            "with role id {} and user id {}".format(proposal_payload.role_id,
                                                    proposal_payload.user_id))

    handle_propose_state_set(
        state_entries=state_entries,
        header=header,
        payload=proposal_payload,
        address=proposal_address,
        proposal_type=proposal_state_pb2.Proposal.REMOVE_ROLE_MEMBERS,
        state=state)
Ejemplo n.º 2
0
def apply_propose(header, payload, state):
    role_admins_payload = role_transaction_pb2.ProposeAddRoleAdmin()
    role_admins_payload.ParseFromString(payload.content)

    role_admins_address = addresser.make_role_admins_address(
        role_id=role_admins_payload.role_id,
        user_id=role_admins_payload.user_id)

    proposal_address = addresser.make_proposal_address(
        object_id=role_admins_payload.role_id,
        related_id=role_admins_payload.user_id)

    state_entries = validate_role_rel_proposal(header, role_admins_payload,
                                               role_admins_address, state)

    if not no_open_proposal(
            state_entries=state_entries,
            object_id=role_admins_payload.role_id,
            related_id=role_admins_payload.user_id,
            proposal_address=proposal_address,
            proposal_type=proposal_state_pb2.Proposal.ADD_ROLE_ADMINS):
        raise InvalidTransaction(
            "There is already an open proposal for ADD_ROLE_ADMINS "
            "with role id {} and user id {}".format(
                role_admins_payload.role_id, role_admins_payload.user_id))

    handle_propose_state_set(
        state_entries=state_entries,
        header=header,
        payload=role_admins_payload,
        address=proposal_address,
        proposal_type=proposal_state_pb2.Proposal.ADD_ROLE_ADMINS,
        state=state)
Ejemplo n.º 3
0
def apply_propose_remove(header, payload, state):
    propose = task_transaction_pb2.ProposeRemoveTaskOwner()
    propose.ParseFromString(payload.content)

    task_owners_address = addresser.make_task_owners_address(
        task_id=propose.task_id, user_id=propose.user_id)

    proposal_address = addresser.make_proposal_address(
        object_id=propose.task_id, related_id=propose.user_id)

    state_entries = validate_task_rel_del_proposal(
        header=header,
        propose=propose,
        rel_address=task_owners_address,
        state=state)

    if not no_open_proposal(
            state_entries=state_entries,
            object_id=propose.task_id,
            related_id=propose.user_id,
            proposal_address=proposal_address,
            proposal_type=proposal_state_pb2.Proposal.REMOVE_TASK_OWNERS):
        raise InvalidTransaction(
            "There is already an open proposal for REMOVE_TASK_OWNERS "
            "with task id {} and user id {}".format(propose.task_id,
                                                    propose.user_id))

    handle_propose_state_set(
        state_entries=state_entries,
        header=header,
        payload=propose,
        address=proposal_address,
        proposal_type=proposal_state_pb2.Proposal.REMOVE_TASK_OWNERS,
        state=state)
Ejemplo n.º 4
0
def _validate_unique_proposal(header, user_proposal, state):
    proposal_address = addresser.make_proposal_address(
        object_id=user_proposal.user_id,
        related_id=user_proposal.new_manager_id)
    state_return = get_state(state, [proposal_address])
    if not no_open_proposal(
            state_return,
            proposal_address,
            user_proposal.user_id,
            user_proposal.new_manager_id,
            proposal_type=proposal_state_pb2.Proposal.UPDATE_USER_MANAGER):
        raise InvalidTransaction("There is already a ProposeUpdateUserManager "
                                 "proposal for this user and manager.")

    return state_return
Ejemplo n.º 5
0
def apply_propose_remove(header, payload, state):
    """Apply the ProposeRemoveTaskAdmins transaction.

    Args:
        header (TransactionHeader): The protobuf TransactionHeader.
        payload (RBACPayload): The protobuf RBACPayload.
        state (Context): The class that handles state gets and sets.

    Raises
        InvalidTransaction:
            - The transaction is invalid.

    """

    propose_payload = task_transaction_pb2.ProposeRemoveTaskAdmin()
    propose_payload.ParseFromString(payload.content)

    task_admins_address = addresser.make_task_admins_address(
        task_id=propose_payload.task_id, user_id=propose_payload.user_id)

    proposal_address = addresser.make_proposal_address(propose_payload.task_id,
                                                       propose_payload.user_id)

    state_entries = validate_task_rel_del_proposal(
        header=header,
        propose=propose_payload,
        rel_address=task_admins_address,
        state=state)

    if not no_open_proposal(
            state_entries=state_entries,
            object_id=propose_payload.task_id,
            related_id=propose_payload.user_id,
            proposal_address=proposal_address,
            proposal_type=proposal_state_pb2.Proposal.REMOVE_TASK_ADMINS):
        raise InvalidTransaction(
            "There is already an open proposal for REMOVE_TASK_ADMINS "
            "with task id {} and user id {}".format(propose_payload.task_id,
                                                    propose_payload.user_id))
    handle_propose_state_set(
        state_entries=state_entries,
        header=header,
        payload=propose_payload,
        address=proposal_address,
        proposal_type=proposal_state_pb2.Proposal.REMOVE_TASK_ADMINS,
        state=state)