/* * Copyright 2018 A-SIT Plus GmbH * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ, * A-SIT Plus GmbH, A-SIT, and Graz University of Technology. * * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "License"); * You may not use this work except in compliance with the License. * You may obtain a copy of the License at: * https://joinup.ec.europa.eu/news/understanding-eupl-v12 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. */ package at.asitplus.eidas.specific.connector.config; import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.opensaml.saml.saml2.metadata.ContactPerson; import org.opensaml.saml.saml2.metadata.ContactPersonTypeEnumeration; import org.opensaml.saml.saml2.metadata.EmailAddress; import org.opensaml.saml.saml2.metadata.GivenName; import org.opensaml.saml.saml2.metadata.Organization; import org.opensaml.saml.saml2.metadata.OrganizationDisplayName; import org.opensaml.saml.saml2.metadata.OrganizationName; import org.opensaml.saml.saml2.metadata.OrganizationURL; import org.opensaml.saml.saml2.metadata.SurName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import at.asitplus.eidas.specific.core.MsEidasNodeConstants; import at.gv.egiz.eaaf.core.api.idp.IConfiguration; import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException; import at.gv.egiz.eaaf.core.exceptions.EaafException; import at.gv.egiz.eaaf.modules.pvp2.api.IPvp2BasicConfiguration; import at.gv.egiz.eaaf.modules.pvp2.impl.utils.Saml2Utils; @Service("PVPEndPointConfiguration") public class PvpEndPointConfiguration implements IPvp2BasicConfiguration { private static final Logger log = LoggerFactory.getLogger(PvpEndPointConfiguration.class); private static final String DEFAULT_XML_LANG = "en"; @Autowired(required = true) IConfiguration basicConfiguration; @Override public String getIdpEntityId(String authUrl) throws EaafException { return removePostFix(authUrl) + MsEidasNodeConstants.ENDPOINT_PVP_METADATA; } @Override public String getIdpSsoPostService(String authUrl) throws EaafException { return removePostFix(authUrl) + MsEidasNodeConstants.ENDPOINT_PVP_POST; } @Override public String getIdpSsoRedirectService(String authUrl) throws EaafException { return removePostFix(authUrl) + MsEidasNodeConstants.ENDPOINT_PVP_REDIRECT; } @Override public String getIdpSsoSoapService(String extractAuthUrlFromRequest) throws EaafException { log.warn("PVP S-Profile End-Point does NOT support SOAP Binding"); return null; } @Override public List getIdpContacts() throws EaafException { final ContactPerson contactPerson = Saml2Utils.createSamlObject(ContactPerson.class); final GivenName givenName = Saml2Utils.createSamlObject(GivenName.class); final SurName surname = Saml2Utils.createSamlObject(SurName.class); final EmailAddress emailAddress = Saml2Utils.createSamlObject(EmailAddress.class); givenName.setName(getAndVerifyFromConfiguration( MsEidasNodeConstants.CONFIG_PROPS_METADATA_CONTACT_GIVENNAME)); surname.setName(getAndVerifyFromConfiguration( MsEidasNodeConstants.CONFIG_PROPS_METADATA_CONTACT_SURNAME)); emailAddress.setAddress(getAndVerifyFromConfiguration( MsEidasNodeConstants.CONFIG_PROPS_METADATA_CONTACT_EMAIL)); contactPerson.setType(ContactPersonTypeEnumeration.TECHNICAL); contactPerson.setGivenName(givenName); contactPerson.setSurName(surname); contactPerson.getEmailAddresses().add(emailAddress); return Arrays.asList(contactPerson); } @Override public Organization getIdpOrganisation() throws EaafException { final Organization organisation = Saml2Utils.createSamlObject(Organization.class); final OrganizationName orgName = Saml2Utils.createSamlObject(OrganizationName.class); final OrganizationDisplayName orgDisplayName = Saml2Utils.createSamlObject(OrganizationDisplayName.class); final OrganizationURL orgUrl = Saml2Utils.createSamlObject(OrganizationURL.class); orgName.setXMLLang(DEFAULT_XML_LANG); orgName.setValue(getAndVerifyFromConfiguration( MsEidasNodeConstants.CONFIG_PROPS_METADATA_ORGANISATION_NAME)); orgDisplayName.setXMLLang(DEFAULT_XML_LANG); orgDisplayName.setValue(getAndVerifyFromConfiguration( MsEidasNodeConstants.CONFIG_PROPS_METADATA_ORGANISATION_FRIENDLYNAME)); orgUrl.setXMLLang(DEFAULT_XML_LANG); orgUrl.setValue(getAndVerifyFromConfiguration( MsEidasNodeConstants.CONFIG_PROPS_METADATA_ORGANISATION_URL)); organisation.getOrganizationNames().add(orgName); organisation.getDisplayNames().add(orgDisplayName); organisation.getURLs().add(orgUrl); return organisation; } @Override public IConfiguration getBasicConfiguration() { return basicConfiguration; } private String removePostFix(String url) { if (url != null && url.endsWith("/")) { return url.substring(0, url.length() - 1); } else { return url; } } private String getAndVerifyFromConfiguration(String configKey) throws EaafConfigurationException { final String value = basicConfiguration.getBasicConfiguration(configKey); if (StringUtils.isEmpty(value)) { throw new EaafConfigurationException("config.08", new Object[] {configKey}); } return value; } }