GUACAMOLE-103: Change IdP metadata file to a URI.
diff --git a/extensions/guacamole-auth-saml/src/main/java/org/apache/guacamole/auth/saml/conf/ConfigurationService.java b/extensions/guacamole-auth-saml/src/main/java/org/apache/guacamole/auth/saml/conf/ConfigurationService.java
index f55d7b8..ca830cf 100644
--- a/extensions/guacamole-auth-saml/src/main/java/org/apache/guacamole/auth/saml/conf/ConfigurationService.java
+++ b/extensions/guacamole-auth-saml/src/main/java/org/apache/guacamole/auth/saml/conf/ConfigurationService.java
@@ -24,7 +24,6 @@
import com.onelogin.saml2.settings.Saml2Settings;
import com.onelogin.saml2.settings.SettingsBuilder;
import com.onelogin.saml2.util.Constants;
-import java.io.File;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
@@ -32,7 +31,6 @@
import org.apache.guacamole.GuacamoleServerException;
import org.apache.guacamole.environment.Environment;
import org.apache.guacamole.properties.BooleanGuacamoleProperty;
-import org.apache.guacamole.properties.FileGuacamoleProperty;
import org.apache.guacamole.properties.StringGuacamoleProperty;
import org.apache.guacamole.properties.URIGuacamoleProperty;
@@ -43,13 +41,14 @@
public class ConfigurationService {
/**
- * The file containing the XML Metadata associated with the SAML IdP.
+ * The URI of the file containing the XML Metadata associated with the
+ * SAML IdP.
*/
- private static final FileGuacamoleProperty SAML_IDP_METADATA =
- new FileGuacamoleProperty() {
+ private static final URIGuacamoleProperty SAML_IDP_METADATA =
+ new URIGuacamoleProperty() {
@Override
- public String getName() { return "saml-idp-metadata"; }
+ public String getName() { return "saml-idp-metadata-url"; }
};
@@ -167,20 +166,22 @@
}
/**
- * The file that contains the metadata that the SAML client should
- * use to communicate with the SAML IdP. This is generated by the
- * SAML IdP and should be uploaded to the system where the Guacamole
- * client is running.
+ * The URI that contains the metadata that the SAML client should
+ * use to communicate with the SAML IdP. This can either be a remote
+ * URL of a server that provides this, or can be a URI to a file on the
+ * local filesystem. The metadata file is usually generated by the SAML IdP
+ * and should be uploaded to the system where the Guacamole client is
+ * running.
*
* @return
- * The file containing the metadata used by the SAML client
+ * The URI of the file containing the metadata used by the SAML client
* when it communicates with the SAML IdP.
*
* @throws GuacamoleException
* If guacamole.properties cannot be parsed, or if the client
* metadata is missing.
*/
- private File getIdpMetadata() throws GuacamoleException {
+ private URI getIdpMetadata() throws GuacamoleException {
return environment.getProperty(SAML_IDP_METADATA);
}
@@ -307,11 +308,11 @@
public Saml2Settings getSamlSettings() throws GuacamoleException {
// Try to get the XML file, first.
- File idpMetadata = getIdpMetadata();
+ URI idpMetadata = getIdpMetadata();
Map<String, Object> samlMap;
if (idpMetadata != null) {
try {
- samlMap = IdPMetadataParser.parseFileXML(idpMetadata.getAbsolutePath());
+ samlMap = IdPMetadataParser.parseRemoteXML(idpMetadata.toURL());
}
catch (Exception e) {
throw new GuacamoleServerException(