aboutsummaryrefslogtreecommitdiff
path: root/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/config/PVPConfiguration.java
diff options
context:
space:
mode:
Diffstat (limited to 'id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/config/PVPConfiguration.java')
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/config/PVPConfiguration.java339
1 files changed, 339 insertions, 0 deletions
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/config/PVPConfiguration.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/config/PVPConfiguration.java
new file mode 100644
index 000000000..0786f896a
--- /dev/null
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/config/PVPConfiguration.java
@@ -0,0 +1,339 @@
+package at.gv.egovernment.moa.id.protocols.pvp2x.config;
+
+import iaik.x509.X509Certificate;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.security.cert.CertificateException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+
+import org.opensaml.saml2.metadata.Company;
+import org.opensaml.saml2.metadata.ContactPerson;
+import org.opensaml.saml2.metadata.ContactPersonTypeEnumeration;
+import org.opensaml.saml2.metadata.EmailAddress;
+import org.opensaml.saml2.metadata.GivenName;
+import org.opensaml.saml2.metadata.LocalizedString;
+import org.opensaml.saml2.metadata.Organization;
+import org.opensaml.saml2.metadata.OrganizationDisplayName;
+import org.opensaml.saml2.metadata.OrganizationName;
+import org.opensaml.saml2.metadata.OrganizationURL;
+import org.opensaml.saml2.metadata.SurName;
+import org.opensaml.saml2.metadata.TelephoneNumber;
+
+import at.gv.egovernment.moa.id.commons.db.dao.config.Contact;
+import at.gv.egovernment.moa.id.commons.db.dao.config.OAPVP2;
+import at.gv.egovernment.moa.id.commons.db.dao.config.PVP2;
+import at.gv.egovernment.moa.id.config.ConfigurationException;
+import at.gv.egovernment.moa.id.config.ConfigurationProvider;
+import at.gv.egovernment.moa.id.config.auth.AuthConfigurationProvider;
+import at.gv.egovernment.moa.id.config.auth.OAAuthParameter;
+import at.gv.egovernment.moa.id.protocols.pvp2x.utils.Digester;
+import at.gv.egovernment.moa.id.protocols.pvp2x.utils.SAML2Utils;
+import at.gv.egovernment.moa.logging.Logger;
+
+public class PVPConfiguration {
+
+ private static PVPConfiguration instance;
+
+ public static PVPConfiguration getInstance() {
+ if (instance == null) {
+ instance = new PVPConfiguration();
+ }
+ return instance;
+ }
+
+ public static final String PVP2_METADATA = "/pvp2/metadata";
+ public static final String PVP2_REDIRECT = "/pvp2/redirect";
+ public static final String PVP2_POST = "/pvp2/post";
+
+ public static final String PVP_CONFIG_FILE = "pvp2config.properties";
+ public static final String IDP_JAVAKEYSTORE = "idp.ks.file";
+ public static final String IDP_KEYALIAS = "idp.ks.alias";
+ public static final String IDP_KS_PASS = "idp.ks.kspassword";
+ public static final String IDP_KEY_PASS = "idp.ks.keypassword";
+
+ public static final String IDP_ISSUER_NAME = "idp.issuer.name";
+
+ public static final String METADATA_FILE = "md.dir";
+ public static final String METADATA_EXTENSION = "md.ext";
+
+ public static final String IDP_ENTITY = "idp.entityid";
+ public static final String IDP_ORG_NAME = "idp.org.name";
+ public static final String IDP_ORG_DISPNAME = "idp.org.dispname";
+ public static final String IDP_ORG_URL = "idp.org.url";
+
+ public static final String IDP_PUBLIC_URL = "idp.public.url";
+
+ public static final String IDP_TRUST_STORE = "idp.truststore";
+ public static final String SP_TARGET_PREFIX = "sp.target.";
+
+ public static final String IDP_CONTACT_PREFIX = "idp.contact";
+ public static final String IDP_CONTACT_LIST = "idp.contact_list";
+
+ public static final String IDP_CONTACT_SURNAME = "surname";
+ public static final String IDP_CONTACT_GIVENNAME = "givenname";
+ public static final String IDP_CONTACT_MAIL = "mail";
+ public static final String IDP_CONTACT_TYPE = "type";
+ public static final String IDP_CONTACT_COMPANY = "company";
+ public static final String IDP_CONTACT_PHONE = "phone";
+
+ PVP2 generalpvpconfigdb;
+ Properties props;
+
+ private PVPConfiguration() {
+ try {
+ generalpvpconfigdb = AuthConfigurationProvider.getInstance().getGeneralPVP2DBConfig();
+ props = AuthConfigurationProvider.getInstance().getGeneralPVP2ProperiesConfig();
+
+ } catch (ConfigurationException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public String getIDPPublicPath() {
+ String publicPath = generalpvpconfigdb.getPublicURLPrefix();
+ if(publicPath != null) {
+ if(publicPath.endsWith("/")) {
+ publicPath = publicPath.substring(0, publicPath.length()-2);
+ }
+ }
+ return publicPath;
+ }
+
+ public String getIDPSSOPostService() {
+ return getIDPPublicPath() + PVP2_POST;
+ }
+
+ public String getIDPSSORedirectService() {
+ return getIDPPublicPath() + PVP2_REDIRECT;
+ }
+
+ public String getIDPSSOMetadataService() {
+ return getIDPPublicPath() + PVP2_METADATA;
+ }
+
+ public String getIDPKeyStoreFilename() {
+ return props.getProperty(IDP_JAVAKEYSTORE);
+ }
+
+ public String getIDPKeyStorePassword() {
+ return props.getProperty(IDP_KS_PASS);
+ }
+
+ public String getIDPKeyAlias() {
+ return props.getProperty(IDP_KEYALIAS);
+ }
+
+ public String getIDPKeyPassword() {
+ return props.getProperty(IDP_KEY_PASS);
+ }
+
+ public String getIDPIssuerName() {
+ return generalpvpconfigdb.getIssuerName();
+ }
+
+ public List<String> getMetadataFiles() {
+ String filter = props.getProperty(METADATA_EXTENSION);
+
+ if (filter == null) {
+ filter = ".mdxml";
+ }
+
+ List<String> files = new ArrayList<String>();
+
+ File[] faFiles = new File(props.getProperty(METADATA_FILE)).listFiles();
+ for (File file : faFiles) {
+ if (!file.isDirectory()) {
+ if (file.getName().endsWith(filter)) {
+ files.add(file.getAbsolutePath());
+ }
+ }
+ }
+
+ return files;
+ }
+
+ //TODO:
+ public String getTargetForSP(String sp) {
+
+ try {
+ OAAuthParameter oaParam = AuthConfigurationProvider.getInstance().getOnlineApplicationParameter(sp);
+
+ if (oaParam != null)
+ return oaParam.getTarget();
+
+ Logger.warn("OnlineApplication with ID "+ sp + " is not found.");
+ return null;
+
+ } catch (ConfigurationException e) {
+ Logger.warn("OnlineApplication with ID "+ sp + " is not found.");
+ return null;
+ }
+
+ }
+
+
+ public iaik.x509.X509Certificate getTrustEntityCertificate(String entityID) {
+
+ try {
+ OAAuthParameter oaParam = AuthConfigurationProvider.getInstance().getOnlineApplicationParameter(entityID);
+
+ if (oaParam == null) {
+ Logger.warn("Online Application with ID " + entityID + " not found!");
+ return null;
+ }
+
+ OAPVP2 pvp2param = oaParam.getPVP2Parameter();
+
+ if (pvp2param == null) {
+ return null;
+ }
+
+ Logger.info("Load TrustEntityCertificate ("+entityID+") from Database.");
+ return new X509Certificate(pvp2param.getCertificate());
+
+ } catch (CertificateException e) {
+ Logger.warn("Signer certificate can not be loaded from session database!", e);
+ return null;
+
+ } catch (ConfigurationException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public List<ContactPerson> getIDPContacts() {
+ List<ContactPerson> list = new ArrayList<ContactPerson>();
+
+ List<Contact> contacts = generalpvpconfigdb.getContact();
+
+ if (contacts != null) {
+
+ for (Contact contact : contacts) {
+
+ ContactPerson person = SAML2Utils
+ .createSAMLObject(ContactPerson.class);
+
+ String type = contact.getType();
+
+ if (type == null) {
+ Logger.error("IDP Contact with SurName " + contact.getSurName()
+ + " has no type defined!");
+ break;
+ }
+
+ ContactPersonTypeEnumeration enumType = null;
+
+ if (type.equals(ContactPersonTypeEnumeration.ADMINISTRATIVE
+ .toString())) {
+ enumType = ContactPersonTypeEnumeration.ADMINISTRATIVE;
+ } else if (type.equals(ContactPersonTypeEnumeration.BILLING
+ .toString())) {
+ enumType = ContactPersonTypeEnumeration.BILLING;
+ } else if (type.equals(ContactPersonTypeEnumeration.OTHER
+ .toString())) {
+ enumType = ContactPersonTypeEnumeration.OTHER;
+ } else if (type.equals(ContactPersonTypeEnumeration.SUPPORT
+ .toString())) {
+ enumType = ContactPersonTypeEnumeration.SUPPORT;
+ } else if (type.equals(ContactPersonTypeEnumeration.TECHNICAL
+ .toString())) {
+ enumType = ContactPersonTypeEnumeration.TECHNICAL;
+ }
+
+ if (enumType == null) {
+ Logger.error("IDP Contact with SurName " + contact.getSurName()
+ + " has invalid type defined: " + type);
+ break;
+ }
+
+ person.setType(enumType);
+
+ String givenName = contact.getGivenName();
+
+ if (givenName != null) {
+ GivenName name = SAML2Utils
+ .createSAMLObject(GivenName.class);
+ name.setName(givenName);
+ person.setGivenName(name);
+ }
+
+ String company = contact.getCompany();
+
+ if (company != null) {
+ Company comp = SAML2Utils.createSAMLObject(Company.class);
+ comp.setName(company);
+ person.setCompany(comp);
+ }
+
+ String surname = contact.getSurName();
+
+ if (surname != null) {
+ SurName name = SAML2Utils.createSAMLObject(SurName.class);
+ name.setName(surname);
+ person.setSurName(name);
+ }
+
+ List<String> phones = contact.getPhone();
+ for (String phone : phones) {
+ TelephoneNumber telePhone = SAML2Utils
+ .createSAMLObject(TelephoneNumber.class);
+ telePhone.setNumber(phone);
+ person.getTelephoneNumbers().add(telePhone);
+ }
+
+ List<String> mails = contact.getMail();
+ for (String mail : mails) {
+ EmailAddress mailAddress = SAML2Utils
+ .createSAMLObject(EmailAddress.class);
+ mailAddress.setAddress(mail);
+ person.getEmailAddresses().add(mailAddress);
+ }
+
+ list.add(person);
+ }
+ }
+ return list;
+ }
+
+ public Organization getIDPOrganisation() {
+ Organization org = SAML2Utils.createSAMLObject(Organization.class);
+
+ at.gv.egovernment.moa.id.commons.db.dao.config.Organization organisation = generalpvpconfigdb.getOrganization();
+
+ String org_name = null;
+ String org_dispname = null;
+ String org_url = null;
+
+ if (organisation != null) {
+ org_name = organisation.getName();
+ org_dispname = organisation.getDisplayName();
+ org_url = organisation.getURL();
+ }
+
+ if (org_name == null || org_dispname == null || org_url == null) {
+ return null;
+ }
+
+ OrganizationDisplayName dispName = SAML2Utils
+ .createSAMLObject(OrganizationDisplayName.class);
+ dispName.setName(new LocalizedString(org_dispname, "de"));
+ org.getDisplayNames().add(dispName);
+
+ OrganizationName name = SAML2Utils
+ .createSAMLObject(OrganizationName.class);
+ name.setName(new LocalizedString(org_name, "de"));
+ org.getOrganizationNames().add(name);
+
+ OrganizationURL url = SAML2Utils
+ .createSAMLObject(OrganizationURL.class);
+ url.setURL(new LocalizedString(org_url, "de"));
+ org.getURLs().add(url);
+
+ return org;
+ }
+}