def test_authorization_trust_request(self): """ Test the AuthorizationTrustRequestHandler returns an AuthorizationTrustResponse if the AuthorizationTrustRequest should be approved. """ auth_trust_request = AuthorizationTrustRequest( roles=[RoleType.Value("NETWORK")], public_key="public_key") roles = {"network": AuthorizationType.TRUST} network = MockNetwork(roles, connection_status={ "connection_id": ConnectionStatus.CONNECTION_REQUEST }) permission_verifer = MockPermissionVerifier() gossip = MockGossip() handler = AuthorizationTrustRequestHandler(network, permission_verifer, gossip) handler_status = handler.handle("connection_id", auth_trust_request.SerializeToString()) self.assertEqual(handler_status.status, HandlerStatus.RETURN) self.assertEqual(handler_status.message_type, validator_pb2.Message.AUTHORIZATION_TRUST_RESPONSE)
def test_authorization_trust_request_not_permitted(self): """ Test the AuthorizationTrustRequestHandler returns an AuthorizationViolation and closes the connection if the permission verifier does not permit the connections public key. """ auth_trust_request = AuthorizationTrustRequest( roles=[RoleType.Value("NETWORK")], public_key="public_key") roles = {"network": AuthorizationType.TRUST} network = MockNetwork(roles, connection_status={ "connection_id": ConnectionStatus.CONNECTION_REQUEST }) # say that connection is not permitted permission_verifer = MockPermissionVerifier(allow=False) gossip = MockGossip() handler = AuthorizationTrustRequestHandler(network, permission_verifer, gossip) handler_status = handler.handle("connection_id", auth_trust_request.SerializeToString()) self.assertEqual(handler_status.status, HandlerStatus.RETURN_AND_CLOSE) self.assertEqual(handler_status.message_type, validator_pb2.Message.AUTHORIZATION_VIOLATION)
def _inbound_connection_request_callback(self, request, result, connection=None): connection_response = ConnectionResponse() connection_response.ParseFromString(result.content) if connection_response.status == connection_response.ERROR: LOGGER.debug( "Received an error response to the NETWORK_CONNECT " "we sent. Removing connection: %s", connection.connection_id) self.remove_connection(connection.connection_id) # Send correct Authorization Request for network role auth_type = {"trust": [], "challenge": []} for role_entry in connection_response.roles: if role_entry.auth_type == connection_response.TRUST: auth_type["trust"].append(role_entry.role) elif role_entry.auth_type == connection_response.CHALLENGE: auth_type["challenge"].append(role_entry.role) if auth_type["trust"]: auth_trust_request = AuthorizationTrustRequest( roles=[RoleType.Value("NETWORK")], public_key=self._public_key) self.send(validator_pb2.Message.AUTHORIZATION_TRUST_REQUEST, auth_trust_request.SerializeToString(), connection) if auth_type["challenge"]: auth_challenge_request = AuthorizationChallengeRequest() self.send(validator_pb2.Message.AUTHORIZATION_CHALLENGE_REQUEST, auth_challenge_request.SerializeToString(), connection, callback=partial( self._inbound_challenge_authorization_callback, connection=connection))
def test_authorization_trust_request_bad_last_message(self): """ Test the AuthorizationTrustRequestHandler returns an AuthorizationViolation and closes the connection if the last message was not a ConnectionRequest. """ auth_trust_request = AuthorizationTrustRequest( roles=[RoleType.Value("NETWORK")], public_key="public_key") roles = {"network": AuthorizationType.TRUST} network = MockNetwork( roles, connection_status={"connection_id": "other"}) permission_verifer = MockPermissionVerifier() gossip = MockGossip() handler = AuthorizationTrustRequestHandler( network, permission_verifer, gossip) handler_status = handler.handle( "connection_id", auth_trust_request.SerializeToString()) self.assertEqual(handler_status.status, HandlerStatus.RETURN_AND_CLOSE) self.assertEqual( handler_status.message_type, validator_pb2.Message.AUTHORIZATION_VIOLATION)
def _connect_callback(self, request, result, connection=None, success_callback=None, failure_callback=None): connection_response = ConnectionResponse() connection_response.ParseFromString(result.content) if connection_response.status == connection_response.ERROR: LOGGER.debug( "Received an error response to the NETWORK_CONNECT " "we sent. Removing connection: %s", connection.connection_id) self.remove_connection(connection.connection_id) if failure_callback: failure_callback(connection_id=connection.connection_id) elif connection_response.status == connection_response.OK: LOGGER.debug("Connection to %s was acknowledged", connection.connection_id) if self._authorize: auth_trust_request = AuthorizationTrustRequest( roles=[RoleType.Value("NETWORK")], public_key=self._pub_key) connection.send( validator_pb2.Message.AUTHORIZATION_TRUST_REQUEST, auth_trust_request.SerializeToString(), callback=partial(self._authorization_callback, connection=connection, success_callback=success_callback, failure_callback=failure_callback)) else: if success_callback: success_callback(connection_id=connection.connection_id)
def _inbound_connection_request_callback(self, request, result, connection=None): auth_trust_request = AuthorizationTrustRequest( roles=[RoleType.Value("NETWORK")], public_key=self._pub_key) self.send( validator_pb2.Message.AUTHORIZATION_TRUST_REQUEST, auth_trust_request.SerializeToString(), connection, )
def do_authorization_trust_request(): """ Test the AuthorizationTrustRequestHandler returns an AuthorizationTrustResponse if the AuthorizationTrustRequest should be approved. """ auth_trust_request = AuthorizationTrustRequest( roles=[RoleType.Value("NETWORK")], public_key="public_key") roles = {"network": AuthorizationType.TRUST} network = MockNetwork(roles, connection_status={ "connection_id": ConnectionStatus.CONNECTION_REQUEST }) permission_verifer = MockPermissionVerifier() gossip = MockGossip() handler = AuthorizationTrustRequestHandler(network, permission_verifer, gossip) handler_status = handler.handle("connection_id", auth_trust_request.SerializeToString()) return handler_status