diff --git a/lib/SimpleSAML/Error/MetadataNotFound.php b/lib/SimpleSAML/Error/MetadataNotFound.php new file mode 100644 index 0000000000000000000000000000000000000000..d079331fbf8d7e1a417cbcb325fd8a66d94ca324 --- /dev/null +++ b/lib/SimpleSAML/Error/MetadataNotFound.php @@ -0,0 +1,50 @@ +<?php + +/** + * Error for missing metadata. + * + * @package simpleSAMLphp + * @version $Id$ + */ +class SimpleSAML_Error_MetadataNotFound extends SimpleSAML_Error_Error { + + /** + * The entityID we were unable to locate. + * + * @var string + */ + private $entityId; + + + /** + * Create the error + * + * @param string $entityId The entityID we were unable to locate. + */ + public function __construct($entityId) { + assert('is_string($entityId)'); + + parent::__construct('Unable to locate metadata for ' . var_export($entityId, TRUE) . '.'); + $this->entityId = $entityId; + } + + + /** + * Show the error to the user. + * + * This function does not return. + */ + public function show() { + + header('HTTP/1.0 500 Internal Server Error'); + + $this->logError(); + + $globalConfig = SimpleSAML_Configuration::getInstance(); + $t = new SimpleSAML_XHTML_Template($globalConfig, 'core:no_metadata.tpl.php'); + $t->data['entityId'] = $this->entityId; + $t->show(); + exit(); + } + +} diff --git a/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php b/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php index 91c999cd0fa08f2159466500db9b5565bc75774c..2e4352ef560c0ab0709b4a0501c5567b659ba4db 100644 --- a/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php +++ b/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php @@ -286,7 +286,7 @@ class SimpleSAML_Metadata_MetaDataStorageHandler { } } - throw new Exception('Unable to locate metadata for \'' . $index . '\' in set \'' . $set . '\'.'); + throw new SimpleSAML_Error_MetadataNotFound($index); } diff --git a/modules/core/dictionaries/no_metadata.definition.json b/modules/core/dictionaries/no_metadata.definition.json new file mode 100644 index 0000000000000000000000000000000000000000..4d551aaaf581785f04e6e2524de2e600ae51acfb --- /dev/null +++ b/modules/core/dictionaries/no_metadata.definition.json @@ -0,0 +1,17 @@ +{ + "header": { + "en": "Metadata not found" + }, + "not_found_for": { + "en": "We were unable to locate the metadata for the entity:" + }, + "config_problem": { + "en": "This is most likely a configuration problem on either the service provider or identity provider." + }, + "suggestion_user_link": { + "en": "If you are an user who received this error after following a link on a site, you should report this error to the owner of that site." + }, + "suggestion_developer": { + "en": "If you are a developer who is deploying a single sign-on solution, you have a problem with the metadata configuration. Verify that metadata is configured correctly on both the identity provider and service provider." + } +} diff --git a/modules/core/dictionaries/no_metadata.translation.json b/modules/core/dictionaries/no_metadata.translation.json new file mode 100644 index 0000000000000000000000000000000000000000..568cea71899dcbac585040ea90847f9bea52623d --- /dev/null +++ b/modules/core/dictionaries/no_metadata.translation.json @@ -0,0 +1,22 @@ +{ + "header": { + "no": "Kunne ikke finne metadata", + "nn": "Kunne ikkje finne metadata" + }, + "not_found_for": { + "no": "Vi fant ikke metadataene for:", + "nn": "Vi fann ikkje metadataene for:" + }, + "config_problem": { + "no": "Dette er sannsynligvis et konfigurasjonsproblem hos enten tjenesteleverand\u00f8ren eller identitetsleverand\u00f8ren.", + "nn": "Dette er sannsynlegvis eit problem med oppsettet hj\u00e5 anten tenesteleverand\u00f8ren eller identitetsleverand\u00f8ren." + }, + "suggestion_user_link": { + "no": "Hvis du er en bruker som fikk denne feilen etter at du fulgte en link p\u00e5 en nettside, s\u00e5 b\u00f8r du rapportere denne feilen til eieren av den nettsiden.", + "nn": "Om du er ein brukar som mottok denne feilen etter at du f\u00f8lgde ei lenke p\u00e5 ei nettside, s\u00e5 b\u00f8r du melde denne feilen til eigaren av den nettsida." + }, + "suggestion_developer": { + "no": "Hvis du er en utvikler som setter opp en \"single sign-on\" l\u00f8sning, s\u00e5 har du et problem med metadataoppsettet. Kontroller at metadata er riktig konfigurert hos b\u00e5de identitetsleverand\u00f8ren og tjenesteleverand\u00f8ren.", + "nn": "Om du er ein utviklar som set opp ei \"single sign-on\" l\u00f8ysing, s\u00e5 har du eit problem med metadataoppsettet. Kontroller at metadata er rett satt opp hj\u00e5 b\u00e5de identitetsleverand\u00f8ren og tenesteleverand\u00f8ren." + } +} diff --git a/modules/core/templates/no_metadata.tpl.php b/modules/core/templates/no_metadata.tpl.php new file mode 100644 index 0000000000000000000000000000000000000000..09cdbbc33d1c767cc5ae38121d11d70035759f3c --- /dev/null +++ b/modules/core/templates/no_metadata.tpl.php @@ -0,0 +1,16 @@ +<?php + +$this->data['header'] = $this->t('{core:no_metadata:header}'); +$this->includeAtTemplateBase('includes/header.php'); + +echo('<h2>' . $this->t('{core:no_metadata:header}') . '</h2>'); +echo('<p>' . $this->t('{core:no_metadata:not_found_for}') . '</p>'); +echo('<code style="margin-left: 3em;">' . htmlspecialchars($this->data['entityId']) . '</code>'); +echo('<p>' . $this->t('{core:no_metadata:config_problem}') . '</p>'); + +echo('<ul>'); +echo('<li>' . $this->t('{core:no_metadata:suggestion_user_link}') . '</li>'); +echo('<li>' . $this->t('{core:no_metadata:suggestion_developer}') . '</li>'); +echo('</ul>'); + +$this->includeAtTemplateBase('includes/footer.php');