package org.jboss.seam.security.examples.id_consumer;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.LinkedList;
import java.util.List;
import javax.enterprise.inject.Model;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import org.jboss.seam.security.external.saml.SamlExternalEntity;
import org.jboss.seam.security.external.saml.api.SamlServiceProviderConfigurationApi;
@Model
public class Configuration {
private String idpMetaDataUrl;
@Inject
private SamlServiceProviderConfigurationApi spConfigApi;
public String getIdpMetaDataUrl() {
return idpMetaDataUrl;
}
public void setIdpMetaDataUrl(String idpMetaDataUrl) {
this.idpMetaDataUrl = idpMetaDataUrl;
}
public void addSamlIdentityProvider() {
try {
URL url = new URL(idpMetaDataUrl);
URLConnection urlConnection = url.openConnection();
urlConnection.setConnectTimeout(3000);
urlConnection.setReadTimeout(3000);
Reader reader = new InputStreamReader(urlConnection.getInputStream());
SamlExternalEntity samlEntity = spConfigApi.addExternalSamlEntity(reader);
FacesMessage facesMessage = new FacesMessage("SAML entity " + samlEntity.getEntityId() + " has been added.");
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
} catch (MalformedURLException e) {
FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Malformed URL.", "");
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
} catch (IOException e) {
FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Metadata could not be read.", "");
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
}
}
public String getMetaDataUrl() {
return spConfigApi.getMetaDataURL();
}
public List<String> getIdpEntityIds() {
List<String> entityIds = new LinkedList<String>();
for (SamlExternalEntity entity : spConfigApi.getExternalSamlEntities()) {
entityIds.add(entity.getEntityId());
}
return entityIds;
}
}