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)
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)
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)
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
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)