def _validate(self): try: self._validator.validate(self._request) except ValidationError as e: raise DeserializationError( self._request.saml_request, e.details, )
def deserialize(self): self._validate() if self._validation_errors: raise DeserializationError( self._request.saml_request, self._validation_errors, ) return self._deserialize()
def load(self, entity_id): """ Loads the metadata of a Service Provider. Args: entity_id (str): Entity id of the SP (usually a URL or a URN). Returns: A ServiceProviderMetadata instance. Raises MetadataNotFoundError: If there is no metadata associated to the entity id. DeserializationError: If the metadata associated to the entity id is not valid. """ entity_id = entity_id.strip() fresh_metadata = None metadata = self._metadata.get(entity_id, None) if not metadata: # Try to reload all sources to see if the unknown entity id was added there # somewhere. logger.debug( "Unknown entityId '{}`, reloading all the sources.".format( entity_id)) self._index_metadata() else: # We got an known entity id, try to load its metadata the previously known # location. try: fresh_metadata = metadata.loader.load(metadata.location) if fresh_metadata.entity_id != entity_id: raise MetadataLoadError except MetadataLoadError as e: logger.debug( ("{}\n" "Cannot find entityId '{}` at its previous location '{}`" "reloading all the sources").format( e, entity_id, metadata.location)) self._index_metadata() if not fresh_metadata: try: metadata = self._metadata[entity_id] fresh_metadata = metadata.loader.load(metadata.location) except (KeyError, MetadataLoadError): raise MetadataNotFoundError(entity_id) if metadata.entity_id != entity_id: raise MetadataNotFoundError(entity_id) try: self._validators.validate(fresh_metadata.xml) except ValidationError as e: raise DeserializationError(fresh_metadata.xml, e.details) return fresh_metadata
def get(self, entity_id): entity_id = entity_id.strip() for loader in self._loaders: try: metadata = loader.get(entity_id) try: self._validators.validate(metadata.xml) return metadata except ValidationError as e: raise DeserializationError(metadata.xml, e.details) except MetadataNotFoundError: continue raise MetadataNotFoundError(entity_id)
def _validate(self, metadata): try: self._validator.validate(metadata) except ValidationError as e: raise DeserializationError(metadata, e.details)