diff options
Diffstat (limited to 'connector/src/main')
7 files changed, 146 insertions, 366 deletions
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/StaticResourceConfiguration.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/config/StaticResourceConfiguration.java deleted file mode 100644 index b4d58cdd..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/StaticResourceConfiguration.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright 2019 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.net.MalformedURLException; -import java.util.List; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.ReloadableResourceBundleMessageSource; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import org.springframework.web.servlet.i18n.CookieLocaleResolver; -import org.thymeleaf.templateresolver.FileTemplateResolver; - -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; -import at.gv.egiz.eaaf.core.api.idp.IConfiguration; -import at.gv.egiz.eaaf.core.api.logging.IMessageSourceLocation; -import at.gv.egiz.eaaf.core.impl.utils.FileUtils; - -/** - * Spring configurator for Web resources. - * - * @author tlenz - * - */ -@Configuration -public class StaticResourceConfiguration implements WebMvcConfigurer { - private static final Logger log = LoggerFactory.getLogger(StaticResourceConfiguration.class); - private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { - "/" - }; - - private static final String DEFAULT_MESSAGE_SOURCE = "classpath:properties/status_messages"; - - @Autowired - private IConfiguration basicConfig; - - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - final String staticResources = basicConfig.getBasicConfiguration( - MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_STATIC_PATH); - try { - if (StringUtils.isNotEmpty(staticResources)) { - String absPath = FileUtils.makeAbsoluteUrl(staticResources, basicConfig - .getConfigurationRootDirectory()); - if (!absPath.endsWith("/")) { - absPath += "/"; - } - - registry.addResourceHandler("/static/**").addResourceLocations(absPath); - log.info("Add Ressourcefolder: " + absPath + " for static Web content"); - - } else { - log.debug("No Ressourcefolder for static Web content"); - } - - } catch (final MalformedURLException e) { - log.warn("Can NOT initialize ressourcefolder for static Web content", e); - - } - - registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS); - - } - - /** - * Get a message source with only internal message properties. - * - * @param ressourceLocations List of source-locations - * @return - */ - @Bean - public ReloadableResourceBundleMessageSource internalMessageSource( - @Autowired(required = false) final List<IMessageSourceLocation> ressourceLocations) { - final ReloadableResourceBundleMessageSource messageSource = - new ReloadableResourceBundleMessageSource(); - - // add default message source - messageSource.setBasename(DEFAULT_MESSAGE_SOURCE); - - if (ressourceLocations != null) { - // load more message sources - for (final IMessageSourceLocation el : ressourceLocations) { - if (el.getMessageSourceLocation() != null) { - for (final String source : el.getMessageSourceLocation()) { - messageSource.addBasenames(source); - log.debug("Add additional messageSources: {}", el.getMessageSourceLocation().toArray()); - - } - } - } - } - - messageSource.setDefaultEncoding("UTF-8"); - return messageSource; - - } - - /** - * Get full message source with internal and external message-properties files. - * - * @param ressourceLocations List of source-locations - * @return - */ - @Bean - public ReloadableResourceBundleMessageSource messageSource( - @Autowired(required = false) final List<IMessageSourceLocation> ressourceLocations) { - final ReloadableResourceBundleMessageSource messageSource = - new ReloadableResourceBundleMessageSource(); - messageSource.setDefaultEncoding("UTF-8"); - messageSource.setParentMessageSource(internalMessageSource(ressourceLocations)); - - final String staticResources = basicConfig - .getBasicConfiguration(MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_PROPERTIES_PATH); - try { - if (StringUtils.isNotEmpty(staticResources)) { - final String absPath = - FileUtils.makeAbsoluteUrl(staticResources, basicConfig.getConfigurationRootDirectory()); - messageSource.setBasename(absPath); - - } else { - log.debug("No Ressourcefolder for dynamic Web content templates"); - - } - - } catch (final MalformedURLException e) { - log.warn("Can NOT initialize ressourcefolder for dynamic Web content templates", e); - - } - - return messageSource; - - } - - /** - * Get a i18n resolver based on cookies. - * - * @return - */ - @Bean - public CookieLocaleResolver localeResolver() { - final CookieLocaleResolver localeResolver = new CookieLocaleResolver(); - localeResolver.setCookieName("currentLanguage"); - localeResolver.setCookieMaxAge(3600); - return localeResolver; - - } - - /** - * Get a Tyhmeleaf Template-Resolver with external configuration path. - * - * @return - */ - @Bean(name = "templateResolver") - public FileTemplateResolver templateResolver() { - final String staticResources = basicConfig - .getBasicConfiguration(MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_TEMPLATES_PATH); - try { - if (StringUtils.isNotEmpty(staticResources)) { - String absPath = - FileUtils.makeAbsoluteUrl(staticResources, basicConfig.getConfigurationRootDirectory()); - if (!absPath.endsWith("/")) { - absPath += "/"; - - } - - if (absPath.startsWith("file:")) { - absPath = absPath.substring("file:".length()); - - } - - final FileTemplateResolver viewResolver = new FileTemplateResolver(); - viewResolver.setPrefix(absPath); - viewResolver.setSuffix(".html"); - viewResolver.setTemplateMode("HTML"); - viewResolver.setCacheable(false); - - log.info("Add Ressourcefolder: {} for dynamic Web content templates", absPath); - return viewResolver; - - } else { - log.debug("No Ressourcefolder for dynamic Web content templates"); - - } - - } catch (final MalformedURLException e) { - log.warn("Can NOT initialize ressourcefolder for dynamic Web content templates", e); - - } - - throw new RuntimeException("Can NOT initialize HTML template resolver"); - - } -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/ProcessEngineSignalController.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/ProcessEngineSignalController.java index 1bf1ad67..6e2879a8 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/ProcessEngineSignalController.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/ProcessEngineSignalController.java @@ -46,7 +46,8 @@ import at.gv.egiz.eaaf.core.impl.idp.controller.AbstractProcessEngineSignalContr public class ProcessEngineSignalController extends AbstractProcessEngineSignalController { @RequestMapping(value = { - MsEidasNodeConstants.ENDPOINT_COUNTRYSELECTION + MsEidasNodeConstants.ENDPOINT_COUNTRYSELECTION, + MsEidasNodeConstants.ENDPOINT_OTHER_LOGIN_METHOD_SELECTION }, method = { RequestMethod.POST, RequestMethod.GET }) public void performGenericAuthenticationProcess(HttpServletRequest req, HttpServletResponse resp) diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java index e83d9d49..eef09b8d 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java @@ -29,16 +29,15 @@ import java.util.MissingResourceException; import java.util.ResourceBundle; import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import at.gv.egiz.eaaf.core.api.IStatusMessenger; import at.gv.egiz.eaaf.core.exceptions.EaafException; +import lombok.extern.slf4j.Slf4j; @Service("StatusMessageProvider") +@Slf4j public class StatusMessageProvider implements IStatusMessenger { - private static final Logger log = LoggerFactory.getLogger(StatusMessageProvider.class); private static final String ERROR_MESSAGES_UNAVAILABLE = "Error messages can NOT be load from application. Only errorCode: {0} is availabe"; @@ -93,13 +92,11 @@ public class StatusMessageProvider implements IStatusMessenger { @Override public String getResponseErrorCode(Throwable throwable) { - String errorCode = IStatusMessenger.CODES_EXTERNAL_ERROR_GENERIC; if (throwable instanceof EaafException) { - errorCode = ((EaafException) throwable).getErrorId(); - + return ((EaafException) throwable).getErrorId(); + } - - return errorCode; + return IStatusMessenger.CODES_INTERNAL_ERROR_GENERIC; } diff --git a/connector/src/main/resources/application.properties b/connector/src/main/resources/application.properties index 73a83c13..e92099ab 100644 --- a/connector/src/main/resources/application.properties +++ b/connector/src/main/resources/application.properties @@ -96,6 +96,22 @@ eidas.ms.auth.eIDAS.szrclient.eidasbind.mds.inject=false #eidas.ms.auth.eIDAS.authblock.key.password=f/+saJBc3a}*/T^s + +#### matching###### +# ZMR communication +#eidas.ms.auth.eIDAS.zmrclient.endpoint=http://localhost:1234/demozmr +#eidas.ms.auth.eIDAS.zmrclient.ssl.keyStore.type=jks +#eidas.ms.auth.eIDAS.zmrclient.ssl.keyStore.path=keys/junit.jks +#eidas.ms.auth.eIDAS.zmrclient.ssl.keyStore.password=password +#eidas.ms.auth.eIDAS.zmrclient.ssl.trustStore.path= +#eidas.ms.auth.eIDAS.zmrclient.ssl.trustStore.password= + +#eidas.ms.auth.eIDAS.zmrclient.req.organisation.behoerdennr=jUnit123456 +#eidas.ms.auth.eIDAS.zmrclient.req.update.reason.code=EIDAS-KITT +#eidas.ms.auth.eIDAS.zmrclient.req.update.reason.text=KITT for eIDAS Matching + + + #Raw eIDAS Id data storage eidas.ms.auth.eIDAS.szrclient.workarounds.eidmapping.revisionlog.active=true diff --git a/connector/src/main/resources/properties/status_messages_en.properties b/connector/src/main/resources/properties/status_messages_en.properties index 80228a47..f07a8705 100644 --- a/connector/src/main/resources/properties/status_messages_en.properties +++ b/connector/src/main/resources/properties/status_messages_en.properties @@ -5,7 +5,8 @@ eidas.03=No CitizenCountry available. Can not start eIDAS authentication process eidas.04=Request contains no sessionToken. Authentication process stops eidas.05=Received eIDAS response-message is not valid. Reason: {0} eidas.06=LoA from eIDAS response-message {0} does not match to requested LoA -eidas.07=eIDAS Response attribute-validation FAILED. Attribute:{0} Reason: {1} +eidas.07=eIDAS Response attribute-validation FAILED. Attribute:{0} Reason: {1}. + config.01=No configuration-file parameter found. Maybe Java SystemD parameter is missing config.03=Can not load configuration from path {0} (See logs for more details) diff --git a/connector/src/main/resources/specific_eIDAS_connector.beans.xml b/connector/src/main/resources/specific_eIDAS_connector.beans.xml index df2a9aa4..ec16a7d2 100644 --- a/connector/src/main/resources/specific_eIDAS_connector.beans.xml +++ b/connector/src/main/resources/specific_eIDAS_connector.beans.xml @@ -13,116 +13,101 @@ <import resource="common_gui.beans.xml"/> - <bean id="WebResourceConfiguration" - class="at.asitplus.eidas.specific.connector.config.StaticResourceConfiguration" /> - <bean id="processEngineSignalController" - class="at.asitplus.eidas.specific.connector.controller.ProcessEngineSignalController" /> + class="at.asitplus.eidas.specific.connector.controller.ProcessEngineSignalController" /> <bean id="saml2MetadataGeneration" class="at.asitplus.eidas.specific.connector.health.Saml2MetadataHealthIndicator"> - <property name="pvpIdpCredentials"> - <ref bean="PVPEndPointCredentialProvider" /> - </property> + <property name="pvpIdpCredentials" ref="PVPEndPointCredentialProvider" /> </bean> + <bean id="defaultErrorTicketService" + class="at.gv.egiz.eaaf.core.impl.idp.auth.services.DefaultErrorService"/> + <bean id="eidasNodeMetadata" class="at.asitplus.eidas.specific.connector.health.EidasNodeMetadataHealthIndicator" /> <bean id="AuthenticationManager" - class="at.asitplus.eidas.specific.connector.auth.AuthenticationManager" /> + class="at.asitplus.eidas.specific.connector.auth.AuthenticationManager" /> <bean id="AuthenticationDataBuilder" - class="at.asitplus.eidas.specific.connector.builder.AuthenticationDataBuilder" /> + class="at.asitplus.eidas.specific.connector.builder.AuthenticationDataBuilder" /> <bean id="PVPEndPointConfiguration" - class="at.asitplus.eidas.specific.connector.config.PvpEndPointConfiguration" /> + class="at.asitplus.eidas.specific.connector.config.PvpEndPointConfiguration" /> <bean id="PVPEndPointCredentialProvider" - class="at.asitplus.eidas.specific.connector.provider.PvpEndPointCredentialProvider" /> + class="at.asitplus.eidas.specific.connector.provider.PvpEndPointCredentialProvider" /> <bean id="PVPMetadataConfigurationFactory" - class="at.asitplus.eidas.specific.connector.provider.PvpMetadataConfigurationFactory" /> + class="at.asitplus.eidas.specific.connector.provider.PvpMetadataConfigurationFactory" /> <bean id="pvp2SProfileEndpoint" - class="at.asitplus.eidas.specific.connector.controller.Pvp2SProfileEndpoint"> - <property name="pvpIdpCredentials"> - <ref bean="PVPEndPointCredentialProvider" /> - </property> - <property name="metadataProvider"> - <ref bean="PVPMetadataProvider" /> - </property> + class="at.asitplus.eidas.specific.connector.controller.Pvp2SProfileEndpoint"> + <property name="pvpIdpCredentials" ref="PVPEndPointCredentialProvider" /> + <property name="metadataProvider" ref="PVPMetadataProvider" /> </bean> <bean id="AuthnRequestValidator" - class="at.asitplus.eidas.specific.connector.verification.AuthnRequestValidator" /> + class="at.asitplus.eidas.specific.connector.verification.AuthnRequestValidator" /> - <bean id="SAMLVerificationEngine" - class="at.gv.egiz.eaaf.modules.pvp2.impl.verification.SamlVerificationEngine" /> + <!-- bean id="SAMLVerificationEngine" + class="at.gv.egiz.eaaf.modules.pvp2.impl.verification.SamlVerificationEngine" /--> <bean id="pvpMetadataService" - class="at.gv.egiz.eaaf.modules.pvp2.idp.impl.MetadataAction"> - <property name="pvpIdpCredentials"> - <ref bean="PVPEndPointCredentialProvider" /> - </property> + class="at.gv.egiz.eaaf.modules.pvp2.idp.impl.MetadataAction"> + <property name="pvpIdpCredentials" ref="PVPEndPointCredentialProvider" /> </bean> <bean id="PVPAuthenticationRequestAction" - class="at.gv.egiz.eaaf.modules.pvp2.idp.impl.AuthenticationAction"> - <property name="pvpIdpCredentials"> - <ref bean="PVPEndPointCredentialProvider" /> - </property> - <property name="metadataProvider"> - <ref bean="PVPMetadataProvider" /> - </property> + class="at.gv.egiz.eaaf.modules.pvp2.idp.impl.AuthenticationAction"> + <property name="pvpIdpCredentials" ref="PVPEndPointCredentialProvider" /> + <property name="metadataProvider" ref="PVPMetadataProvider" /> </bean> <bean id="eaafProtocolAuthenticationService" - class="at.gv.egiz.eaaf.core.impl.idp.auth.services.ProtocolAuthenticationService"> + class="at.gv.egiz.eaaf.core.impl.idp.auth.services.ProtocolAuthenticationService"> <property name="guiBuilder" ref="mvcGUIBuilderImpl" /> </bean> - <bean id="defaultErrorHandler" - class="at.gv.egiz.eaaf.core.impl.idp.auth.services.DefaultErrorService"/> - <bean id="securePendingRequestIdGeneration" - class="at.gv.egiz.eaaf.core.impl.utils.SecurePendingRequestIdGenerationStrategy" /> + class="at.gv.egiz.eaaf.core.impl.utils.SecurePendingRequestIdGenerationStrategy" /> <bean id="PVPMetadataProvider" - class="at.asitplus.eidas.specific.connector.provider.PvpMetadataProvider" /> + class="at.asitplus.eidas.specific.connector.provider.PvpMetadataProvider" /> <bean id="PVPSubjectNameGenerator" - class="at.asitplus.eidas.specific.connector.builder.PvpSubjectNameGenerator" /> + class="at.asitplus.eidas.specific.connector.builder.PvpSubjectNameGenerator" /> <bean id="LoALevelMapper" - class="at.asitplus.eidas.specific.connector.mapper.LoALevelMapper" /> + class="at.asitplus.eidas.specific.connector.mapper.LoALevelMapper" /> <bean id="GUIBuilderConfigurationFactory" - class="at.asitplus.eidas.specific.connector.gui.GuiBuilderConfigurationFactory" /> + class="at.asitplus.eidas.specific.connector.gui.GuiBuilderConfigurationFactory" /> <bean id="velocityGUIBuilderImpl" - class="at.asitplus.eidas.specific.connector.gui.DefaultVelocityGuiBuilderImpl" /> + class="at.asitplus.eidas.specific.connector.gui.DefaultVelocityGuiBuilderImpl" /> <bean id="mvcGUIBuilderImpl" - class="at.asitplus.eidas.specific.connector.gui.SpringMvcGuiFormBuilderImpl" /> + class="at.asitplus.eidas.specific.connector.gui.SpringMvcGuiFormBuilderImpl" /> <bean id="StatusMessageProvider" - class="at.asitplus.eidas.specific.connector.provider.StatusMessageProvider" /> + class="at.asitplus.eidas.specific.connector.provider.StatusMessageProvider" /> <bean id="eidasRevisionLogger" - class="at.asitplus.eidas.specific.connector.logger.RevisionLogger" /> + class="at.asitplus.eidas.specific.connector.logger.RevisionLogger" /> <bean id="eidasStatisticLogger" - class="at.asitplus.eidas.specific.connector.logger.StatisticLogger" /> + class="at.asitplus.eidas.specific.connector.logger.StatisticLogger" /> <!-- Tasks --> <bean id="GenerateCountrySelectionFrameTask" - class="at.asitplus.eidas.specific.connector.processes.tasks.GenerateCountrySelectionFrameTask" - scope="prototype" /> + class="at.asitplus.eidas.specific.connector.processes.tasks.GenerateCountrySelectionFrameTask" + scope="prototype" /> <bean id="EvaluateCountrySelectionTask" - class="at.asitplus.eidas.specific.connector.processes.tasks.EvaluateCountrySelectionTask" - scope="prototype" /> + class="at.asitplus.eidas.specific.connector.processes.tasks.EvaluateCountrySelectionTask" + scope="prototype" /> </beans>
\ No newline at end of file diff --git a/connector/src/main/resources/templates/countrySelection.html b/connector/src/main/resources/templates/countrySelection.html index 3937b464..b15234eb 100644 --- a/connector/src/main/resources/templates/countrySelection.html +++ b/connector/src/main/resources/templates/countrySelection.html @@ -3,12 +3,12 @@ xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="fragments/base" th:with="lang=${#locale.language}" th:lang="${lang}"> - + <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="$contextPath/static/css/css_country.css" th:href="@{/static/css/css_country.css}"/> - <script type="text/javascript" src="$contextPath/static/js/js_country.js" th:attr="src=@{/static/static/js/js_country.js}"></script> + <script type="text/javascript" src="$contextPath/static/js/js_country.js" th:attr="src=@{/static/static/js/js_country.js}"></script> <title th:text="#{gui.countryselection.title}">eIDAS-Login Länderauswahl</title> </head> @@ -17,236 +17,236 @@ <div class="languageselection" th:include="language_selection :: selectlanguage"> LanguageSelectionBlock </div> - + <h2 th:text="#{gui.countryselection.header.selection}"> Select your country </h2> <div id="country"> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Belgium-EU.png" alt="Belgium-eID" th:attr="src=@{img/countries/Belgium-EU.png},alt=#{gui.countryselection.country.be.logo.alt}"/></a> - <input type="submit" value="Belgium" th:attr="value=#{gui.countryselection.country.be}"> + <input type="submit" value="Belgium" th:attr="value=#{gui.countryselection.country.be}"> <input type="hidden" name="selectedCountry" value="BE"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Bulgaria-EU.png" alt="Bulgaria-eID" th:attr="src=@{img/countries/Bulgaria-EU.png},alt=#{gui.countryselection.country.bg.logo.alt}"/></a> <input type="submit" value="Bulgaria" th:attr="value=#{gui.countryselection.country.bg}" > <input type="hidden" name="selectedCountry" value="BG"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Croatia-EU.png" alt="Croatia-eID" th:attr="src=@{img/countries/Croatia-EU.png},alt=#{gui.countryselection.country.hr.logo.alt}"/></a> <input type="submit" value="Croatia" th:attr="value=#{gui.countryselection.country.hr}"> <input type="hidden" name="selectedCountry" value="HR"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Cyprus-EU.png" alt="Cyprus-eID" - th:attr="src=@{img/countries/Cyprus-EU.png},alt=#{gui.countryselection.country.cy.logo.alt}"/></a> + th:attr="src=@{img/countries/Cyprus-EU.png},alt=#{gui.countryselection.country.cy.logo.alt}"/></a> <input type="submit" value="Cyprus" th:attr="value=#{gui.countryselection.country.cy}"> <input type="hidden" name="selectedCountry" value="CY"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/CzechRepublic-EU.png" alt="CzechRepublic-eID" th:attr="src=@{img/countries/CzechRepublic-EU.png},alt=#{gui.countryselection.country.cz.logo.alt}"/></a> <input type="submit" value="CzechRepublic" th:attr="value=#{gui.countryselection.country.cz}"> <input type="hidden" name="selectedCountry" value="CZ"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Denmark-EU.png" alt="Denmark-eID" th:attr="src=@{img/countries/Denmark-EU.png},alt=#{gui.countryselection.country.dk.logo.alt}"/></a> <input type="submit" value="Denmark" th:attr="value=#{gui.countryselection.country.dk}"> <input type="hidden" name="selectedCountry" value="DK"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - <form class="block" method="post" action="$contextPath$submitEndpoint"> + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/germany-eu_.png" alt="Germany-eID" th:attr="src=@{img/countries/germany-eu_.png},alt=#{gui.countryselection.country.de.logo.alt}"/></a> <input type="submit" role="button" value="Deutschland / Germany" th:attr="value=#{gui.countryselection.country.de}" /> <input type="hidden" name="selectedCountry" value="DE"> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Estonia-EU.png" alt="Estonia-eID" th:attr="src=@{img/countries/Estonia-EU.png},alt=#{gui.countryselection.country.ee.logo.alt}"/></a> <input type="submit" value="Estonia" th:attr="value=#{gui.countryselection.country.ee}"> <input type="hidden" name="selectedCountry" value="EE"> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Finland-EU.png" alt="Finland-eID" th:attr="src=@{img/countries/Finland-EU.png},alt=#{gui.countryselection.country.fi.logo.alt}"/></a> <input type="submit" value="Finland" th:attr="value=#{gui.countryselection.country.fi}"> <input type="hidden" name="selectedCountry" value="FI"> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/France-EU.png" alt="France-eID" th:attr="src=@{img/countries/France-EU.png},alt=#{gui.countryselection.country.fr.logo.alt}"/></a> <input type="submit" value="France" th:attr="value=#{gui.countryselection.country.fr}"> <input type="hidden" name="selectedCountry" value="FR"> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Greece-EU.png" alt="Greece-eID" - th:attr="src=@{img/countries/Greece-EU.png},alt=#{gui.countryselection.country.gr.logo.alt}"/></a> + th:attr="src=@{img/countries/Greece-EU.png},alt=#{gui.countryselection.country.gr.logo.alt}"/></a> <input type="submit" value="Greece" th:attr="value=#{gui.countryselection.country.gr}"> <input type="hidden" name="selectedCountry" value="GR"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Hungary-EU.png" alt="Hungary-eID" - th:attr="src=@{img/countries/Hungary-EU.png},alt=#{gui.countryselection.country.hu.logo.alt}"/></a> + th:attr="src=@{img/countries/Hungary-EU.png},alt=#{gui.countryselection.country.hu.logo.alt}"/></a> <input type="submit" value="Hungary" th:attr="value=#{gui.countryselection.country.hu}"> <input type="hidden" name="selectedCountry" value="HU"> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Ireland-EU.png" alt="Ireland-eID" th:attr="src=@{img/countries/Iceland.png},alt=#{gui.countryselection.country.is.logo.alt}"/></a> <input type="submit" value="Ireland" th:attr="value=#{gui.countryselection.country.is}"/> <input type="hidden" name="selectedCountry" value="IS"> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Ireland-EU.png" alt="Ireland-eID" th:attr="src=@{img/countries/Ireland-EU.png},alt=#{gui.countryselection.country.ir.logo.alt}"/></a> <input type="submit" value="Ireland" th:attr="value=#{gui.countryselection.country.ir}"> <input type="hidden" name="selectedCountry" value="IE"> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Italy-EU.png" alt="Italy-eID" th:attr="src=@{img/countries/Italy-EU.png},alt=#{gui.countryselection.country.it.logo.alt}"/></a> <input type="submit" value="Italy" th:attr="value=#{gui.countryselection.country.it}"> <input type="hidden" name="selectedCountry" value="IT"> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Latvia-EU.png" alt="Latvia-eID" th:attr="src=@{img/countries/Latvia-EU.png},alt=#{gui.countryselection.country.lv.logo.alt}"/></a> <input type="submit" value="Latvia" th:attr="value=#{gui.countryselection.country.lv}"> <input type="hidden" name="selectedCountry" value="LV"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Luxembourg-EU.png" alt="Luxembourg-eID" th:attr="src=@{img/countries/Luxembourg-EU.png},alt=#{gui.countryselection.country.lu.logo.alt}"/></a> <input type="submit" value="Luxembourg" th:attr="value=#{gui.countryselection.country.lu}"> <input type="hidden" name="selectedCountry" value="LT"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Luxembourg-EU.png" alt="Luxembourg-eID" th:attr="src=@{img/countries/Luxembourg-EU.png},alt=#{gui.countryselection.country.lu.logo.alt}"/></a> <input type="submit" value="Luxembourg" th:attr="value=#{gui.countryselection.country.lu}"> <input type="hidden" name="selectedCountry" value="LU"> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Malta-EU.png" alt="Malta-eID" th:attr="src=@{img/countries/Malta-EU.png},alt=#{gui.countryselection.country.mt.logo.alt}"/></a> <input type="submit" value="Malta" th:attr="value=#{gui.countryselection.country.mt}"> <input type="hidden" name="selectedCountry" value="MT"> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/TheNetherlands-EU_.png" alt="Netherlands-eID" th:attr="src=@{img/countries/TheNetherlands-EU_.png},alt=#{gui.countryselection.country.nl.logo.alt}"/></a> - <input type="submit" value="Netherlands" th:attr="value=#{gui.countryselection.country.nl}"> + <input type="submit" value="Netherlands" th:attr="value=#{gui.countryselection.country.nl}"> <input type="hidden" name="selectedCountry" value="NL"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Poland-EU.png" alt="Poland-eID" th:attr="src=@{img/countries/Poland-EU.png},alt=#{gui.countryselection.country.pl.logo.alt}"/></a> <input type="submit" value="Poland" th:attr="value=#{gui.countryselection.country.pl}"> - <input type="hidden" name="selectedCountry" value="PL"> + <input type="hidden" name="selectedCountry" value="PL"> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Portugal-EU.png" alt="Portugal-eID" - th:attr="src=@{img/countries/Portugal-EU.png},alt=#{gui.countryselection.country.pt.logo.alt}"/></a> + th:attr="src=@{img/countries/Portugal-EU.png},alt=#{gui.countryselection.country.pt.logo.alt}"/></a> <input type="submit" value="Portugal" th:attr="value=#{gui.countryselection.country.pt}"> <input type="hidden" name="selectedCountry" value="PT"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Romania-EU.png" alt="Romania-eID" - th:attr="src=@{img/countries/Romania-EU.png},alt=#{gui.countryselection.country.ro.logo.alt}"/></a> + th:attr="src=@{img/countries/Romania-EU.png},alt=#{gui.countryselection.country.ro.logo.alt}"/></a> <input type="submit" value="Romania" th:attr="value=#{gui.countryselection.country.ro}"> <input type="hidden" name="selectedCountry" value="RO"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Slovakia-EU.png" alt="Slovakia-eID" th:attr="src=@{img/countries/Slovakia-EU.png},alt=#{gui.countryselection.country.sk.logo.alt}"/></a> <input type="submit" value="Slovakia" th:attr="value=#{gui.countryselection.country.sk}"> <input type="hidden" name="selectedCountry" value="SK"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Slovenia-EU.png" alt="Slovenia-eID" th:attr="src=@{img/countries/Slovenia-EU.png},alt=#{gui.countryselection.country.si.logo.alt}"/></a> <input type="submit" value="Slovenia" th:attr="value=#{gui.countryselection.country.si}"> <input type="hidden" name="selectedCountry" value="SI"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Spain-EU.png" alt="Spain-eID" th:attr="src=@{img/countries/Spain-EU.png},alt=#{gui.countryselection.country.es.logo.alt}"/></a> <input type="submit" value="Spain" th:attr="value=#{gui.countryselection.country.es}"> <input type="hidden" name="selectedCountry" value="ES"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/Sweden-EU.png" alt="Sweden-eID" th:attr="src=@{img/countries/Sweden-EU.png},alt=#{gui.countryselection.country.se.logo.alt}"/></a> <input type="submit" value="Sweden" th:attr="value=#{gui.countryselection.country.se}"> <input type="hidden" name="selectedCountry" value="SE"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint"> + + <form class="block" method="post" action="$contextPath$submitEndpoint"> <a><img class="countryimage" src="$contextPath/img/countries/UnitedKingdom-EU.png" alt="UnitedKingdom-eID" th:attr="src=@{img/countries/UnitedKingdom-EU.png},alt=#{gui.countryselection.country.uk.logo.alt}"/></a> <input type="submit" value="United Kingdom" th:attr="value=#{gui.countryselection.country.uk}"> <input type="hidden" name="selectedCountry" value="UK"> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}" /> </form> - - <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> - <input type="submit" class="btn btn-outline-primary btn-block" value="Abbrechen/Cancel" th:attr="value=#{gui.countryselection.cancle}"> + + <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> + <input type="submit" class="btn btn-outline-primary btn-block" value="Abbrechen/Cancel" th:attr="value=#{gui.countryselection.cancel}"> <input type="hidden" name="stopAuthProcess" value="true" > <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"> </form> |