package at.gv.egovernment.moa.id.auth.modules.eidas.tasks; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import at.gv.egiz.eaaf.core.api.idp.IAuthData; import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; import at.gv.egiz.eaaf.core.api.storage.ITransactionStorage; import at.gv.egiz.eaaf.core.exceptions.EAAFStorageException; import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask; import at.gv.egiz.eaaf.core.impl.utils.Random; import at.gv.egiz.eid4u.api.attributes.Definitions; import at.gv.egiz.eid4u.api.attributes.natural.IdType; import at.gv.egiz.eid4u.api.attributes.natural.MaritalState; import at.gv.egovernment.moa.id.auth.builder.AuthenticationDataBuilder; import at.gv.egovernment.moa.id.auth.data.AuthenticationSessionWrapper; import at.gv.egovernment.moa.id.protocols.eidas.EIDASData; import at.gv.egovernment.moa.id.protocols.oauth20.OAuth20SessionObject; import at.gv.egovernment.moa.id.protocols.oauth20.protocol.OAuth20AuthAction; import at.gv.egovernment.moa.id.protocols.oauth20.protocol.OAuth20AuthRequest; import at.gv.egovernment.moa.logging.Logger; import eu.eidas.auth.commons.attribute.ImmutableAttributeMap; import eu.eidas.auth.commons.attribute.ImmutableAttributeMap.Builder; import eu.eidas.auth.commons.protocol.eidas.impl.PostalAddress; @Component("CollectAddtionalAttributesTask") public class CollectAddtionalAttributesTask extends AbstractAuthServletTask { @Autowired private OAuth20AuthAction openIDAuthAction; @Autowired private ITransactionStorage transactionStorage; @Autowired private AuthenticationDataBuilder authDataBuilder; @Override public void execute(ExecutionContext context, HttpServletRequest httpReq, HttpServletResponse httpResp) throws TaskExecutionException { try{ if (pendingReq instanceof EIDASData) { EIDASData eidasReq = (EIDASData) pendingReq; Logger.debug("Find eIDAS Auth. Req. Check if eID4U attributes are requested ..."); //select all eID4U attributes from requested attributes Builder reqEid4uAttrListBuilder = ImmutableAttributeMap.builder(); ImmutableAttributeMap reqAttrList = eidasReq.getEidasRequestedAttributes(); for (String el : Definitions.EID4UATTRIBUTEELIST) { if(reqAttrList.getAttributeValuesByNameUri(el) != null) { Logger.debug("Find eID4U attr: " + el); reqEid4uAttrListBuilder.put(reqAttrList.getDefinitionByNameUri(el)); } } //collect eID4U attributes, if some attributes are selected before ImmutableAttributeMap reqEid4uAttrList = reqEid4uAttrListBuilder.build(); if (reqEid4uAttrList != null && reqEid4uAttrList.size() > 0) { Logger.info("Starting eID4U attribute collection process ... "); //generate scope from attributes //load connection parameters to TUG String uniqueID = null; /* *build openID and set connect token */ //generate fake OpenID_Connect request OAuth20AuthRequest fakeOpenIDReq = new OAuth20AuthRequest(); fakeOpenIDReq.setOnlineApplicationConfiguration(authConfig.getServiceProviderConfiguration(uniqueID)); fakeOpenIDReq.setScope("openId profile"); //populate with SessionData fakeOpenIDReq.setRawDataToTransaction( pendingReq.getSessionData(AuthenticationSessionWrapper.class) .getKeyValueRepresentationFromAuthSession()); //generate authData IAuthData authData = authDataBuilder.buildAuthenticationData(fakeOpenIDReq); //generate OpenIDConenct token String accessToken = Random.nextHexRandom32(); OAuth20SessionObject o = new OAuth20SessionObject(); o.setScope(fakeOpenIDReq.getScope()); o.setCode(accessToken); Map idToken = openIDAuthAction.generateIDToken(o, fakeOpenIDReq, authData, accessToken); o.setAuthDataSession(idToken); transactionStorage.put(accessToken, o, -1); //forward to TUG //TODO: implement collection process populateEid4uDummyAttributes(); } else Logger.debug("No eID4U attributes found. Skip eID4U attribute collection"); } else Logger.debug("No eIDAS Request found. Skip eID4U attribute collection"); } catch (Exception e) { Logger.error("IdentityLink generation for foreign person FAILED.", e); throw new TaskExecutionException(pendingReq, "IdentityLink generation for foreign person FAILED.", e); } } private void populateEid4uDummyAttributes() { try { eu.eidas.auth.commons.protocol.eidas.impl.PostalAddress.Builder dummyAddr = PostalAddress.builder(); dummyAddr.postCode("8020"); dummyAddr.postName("Graz"); dummyAddr.addressId("25"); dummyAddr.cvAddressArea("Mustergasse"); dummyAddr.locatorDesignator("25"); dummyAddr.thoroughfare("Mustergasse"); AuthenticationSessionWrapper session = pendingReq.getSessionData(AuthenticationSessionWrapper.class); session.setGenericDataToSession(Definitions.IDTYPE_NAME, IdType.PASSPORT); session.setGenericDataToSession(Definitions.IDNUMBER_NAME, "P0571414"); session.setGenericDataToSession(Definitions.IDISSUER_NAME, "Magistrat Nirgendwo"); session.setGenericDataToSession(Definitions.IDEXPIREDATE_NAME, "2020-01-01"); session.setGenericDataToSession(Definitions.EHICID_NAME, "80010000012345678990"); session.setGenericDataToSession(Definitions.NATIONALITY_NAME, "AT"); session.setGenericDataToSession(Definitions.CITIZENSHIP_FRIENDLYNAME, "AT"); session.setGenericDataToSession(Definitions.MARITALSTATE_NAME, MaritalState.SINGLE); session.setGenericDataToSession(Definitions.COUNTRYOFBIRTH_NAME, "AT"); session.setGenericDataToSession(Definitions.EMAIL_NAME, "max.mustermann@domain.at"); session.setGenericDataToSession(Definitions.PHONE_NAME, "+43666111222444"); session.setGenericDataToSession(Definitions.TEMPORARYADDRESS_NAME, dummyAddr.build()); session.setGenericDataToSession(Definitions.TAXIDENTIFICATIONNUMBER_NAME, "AT/1213454654718"); session.setGenericDataToSession(Definitions.HOMEINSTITUTIONNAME_NAME, "Graz Technical University"); session.setGenericDataToSession(Definitions.HOMEINSTITUTIONIDENTIFIER_NAME, "A GRAZ02"); session.setGenericDataToSession(Definitions.HOMEINSTITUTIONCOUNTRY_NAME, "AT"); session.setGenericDataToSession(Definitions.HOMEINSTITUTIONADDRESS_NAME, dummyAddr.build()); session.setGenericDataToSession(Definitions.CURRENTLEVELOFSTUDY_NAME, "7"); session.setGenericDataToSession(Definitions.FIELDOFSTUDY_NAME, "52"); session.setGenericDataToSession(Definitions.CURRENTDEGREE_NAME, "MsC"); session.setGenericDataToSession(Definitions.DEGREE_NAME, "6"); session.setGenericDataToSession(Definitions.DEGREEAWARDINGINSTITUTION_NAME, "Graz Technical University"); session.setGenericDataToSession(Definitions.GRADUATIONYEAR_NAME, "2016"); session.setGenericDataToSession(Definitions.DEGREECOUNTRY_NAME, "AT"); //TODO: not all attributes are populated with dummy values } catch (EAAFStorageException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }