From 401cd39689d73f1cc865bb3c7cfca40a3f5ac625 Mon Sep 17 00:00:00 2001 From: Christian Kollmann Date: Wed, 1 Dec 2021 14:46:18 +0100 Subject: Add simple page to search for an Austrian Address --- .../test/resources/config/templates/residency.html | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 connector/src/test/resources/config/templates/residency.html (limited to 'connector/src/test/resources/config/templates/residency.html') diff --git a/connector/src/test/resources/config/templates/residency.html b/connector/src/test/resources/config/templates/residency.html new file mode 100644 index 00000000..8845cba0 --- /dev/null +++ b/connector/src/test/resources/config/templates/residency.html @@ -0,0 +1,80 @@ + + + + + + + + + Österreichischer Wohnsitz + + + + +
+
+ LanguageSelectionBlock +
+ +

Search your Austrian Residency

+ +
+
+

Infotext

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ +
+ +
+
+ +
+ + + +
+ +
+ + -- cgit v1.2.3 From e5934d538aabcfc1f3b92472753de729d6ce1cce Mon Sep 17 00:00:00 2001 From: Christian Kollmann Date: Thu, 2 Dec 2021 09:06:55 +0100 Subject: Search with user provided input in ZMR for addresses --- basicConfig/properties/messages.properties | 6 +- basicConfig/properties/messages_de.properties | 6 +- basicConfig/templates/residency.html | 13 ++- .../controller/AdresssucheController.java | 84 +++++++++++++--- .../src/main/resources/templates/residency.html | 13 ++- .../config/properties/messages.properties | 6 +- .../config/properties/messages_de.properties | 6 +- .../test/resources/config/templates/residency.html | 13 ++- .../eidas/v2/clients/zmr/ZmrAddressSoapClient.java | 110 +++++++++++---------- 9 files changed, 176 insertions(+), 81 deletions(-) (limited to 'connector/src/test/resources/config/templates/residency.html') diff --git a/basicConfig/properties/messages.properties b/basicConfig/properties/messages.properties index 4d9f48a0..51a5f27a 100644 --- a/basicConfig/properties/messages.properties +++ b/basicConfig/properties/messages.properties @@ -123,4 +123,8 @@ gui.residency.cancel=Cancel gui.residency.search=Search gui.residency.proceed=Proceed gui.residency.updated=Updated your input -gui.residency.error=Error on Backend Call \ No newline at end of file +gui.residency.error=Error on Backend Call +gui.residency.input.municipality=Municipality +gui.residency.input.village=Village +gui.residency.input.street=Street +gui.residency.input.number=Number \ No newline at end of file diff --git a/basicConfig/properties/messages_de.properties b/basicConfig/properties/messages_de.properties index cfbd98da..c2d1edba 100644 --- a/basicConfig/properties/messages_de.properties +++ b/basicConfig/properties/messages_de.properties @@ -122,4 +122,8 @@ gui.residency.cancel=Abbrechen gui.residency.search=Suche gui.residency.proceed=Weiter gui.residency.updated=Eingabe aktualisiert -gui.residency.error=Fehler bei Addresssuche \ No newline at end of file +gui.residency.error=Fehler bei Addresssuche +gui.residency.input.municipality=Gemeinde +gui.residency.input.village=Ortschaft +gui.residency.input.street=Straße +gui.residency.input.number=Nummer \ No newline at end of file diff --git a/basicConfig/templates/residency.html b/basicConfig/templates/residency.html index 96fa13f8..3c3c05d7 100644 --- a/basicConfig/templates/residency.html +++ b/basicConfig/templates/residency.html @@ -20,7 +20,8 @@ url: "http://localhost:8080/ms_connector/residency/search", data: $("#inputForm").serialize() }).done(function (data, textStatus, jqXHR) { - $("#inputCity").val(data["city"]); + $("#inputMunicipality").val(data["municipality"]); + $("#inputVillage").val(data["village"]); $("#inputStreet").val(data["street"]); $("#inputNumber").val(data["number"]); $("#textInfo").text(updatedText); @@ -43,11 +44,15 @@

Infotext

-
- - + + +
+
+ +
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java index 35f56012..8b25a7bd 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java @@ -25,13 +25,19 @@ package at.asitplus.eidas.specific.connector.controller; import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; import at.asitplus.eidas.specific.connector.gui.StaticGuiBuilderConfiguration; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrAddressSoapClient; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException; +import at.gv.bmi.namespace.zmr_su.zrm._20040201_.address.Adressdaten; +import at.gv.e_government.reference.namespace.persondata.de._20040201.PostAdresseTyp; +import at.gv.e_government.reference.namespace.persondata.de._20040201.ZustelladresseTyp; import at.gv.egiz.eaaf.core.api.gui.IGuiBuilderConfiguration; import at.gv.egiz.eaaf.core.api.gui.ISpringMvcGuiFormBuilder; import at.gv.egiz.eaaf.core.api.idp.IConfiguration; import at.gv.egiz.eaaf.core.api.utils.IPendingRequestIdGenerationStrategy; import at.gv.egiz.eaaf.core.exceptions.GuiBuildException; -import at.gv.egiz.eaaf.core.exceptions.PendingReqIdValidationException; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ResourceLoader; import org.springframework.http.ResponseEntity; @@ -61,6 +67,9 @@ public class AdresssucheController { @Autowired private ResourceLoader resourceLoader; + @Autowired + private ZmrAddressSoapClient client; + @Autowired private IPendingRequestIdGenerationStrategy pendingReqGeneration; @@ -79,11 +88,12 @@ public class AdresssucheController { } @RequestMapping(value = {"/residency/search"}, method = {RequestMethod.POST}) - public ResponseEntity search(@RequestParam("city") String city, + public ResponseEntity search(@RequestParam("municipality") String municipality, + @RequestParam("village") String village, @RequestParam("street") String street, @RequestParam("number") String number, @RequestParam("pendingid") String pendingId) { - log.info("Search with '{}', '{}', '{}'", city, street, number); + log.info("Search with '{}', '{}', '{}'", municipality, street, number); // TODO validate pendingId // try { // pendingReqGeneration.validateAndGetPendingRequestId(pendingId); @@ -91,23 +101,74 @@ public class AdresssucheController { // log.warn("Search with pendingId '{}' is not valid", pendingId); // return ResponseEntity.badRequest().build(); // } - AdresssucheOutput output = new AdresssucheOutput("Where the streets have no name", "No Name", "42"); - return ResponseEntity.ok(output); + try { + Adressdaten searchInput = buildSearchInput(municipality, village, street, number); + ZmrAddressSoapClient.AddressInfo searchOutput = client.searchAddress(searchInput); + AdresssucheOutput output = buildResponse(searchOutput); + return ResponseEntity.ok(output); + } catch (EidasSAuthenticationException e) { + log.warn("Search failed", e); + return ResponseEntity.badRequest().build(); + } + } + + private AdresssucheOutput buildResponse(ZmrAddressSoapClient.AddressInfo searchOutput) { + if (searchOutput.getPersonResult().isEmpty()) { + log.warn("No result from ZMR"); + return new AdresssucheOutput(null, null, null, null); + } + Adressdaten adressdaten = searchOutput.getPersonResult().iterator().next(); + String municipality = adressdaten.getPostAdresse().getGemeinde(); + String village = adressdaten.getPostAdresse().getOrtschaft(); + String street = adressdaten.getPostAdresse().getZustelladresse().getStrassenname(); + String number = adressdaten.getPostAdresse().getZustelladresse().getOrientierungsnummer(); + log.debug("Result from ZMR: '{}', '{}', '{}', '{}'", municipality, village, street, number); + return new AdresssucheOutput(municipality, village, street, number); + } + + @NotNull + private Adressdaten buildSearchInput(String municipality, String village, String street, String number) { + PostAdresseTyp postAdresse = new PostAdresseTyp(); + if (StringUtils.isNotBlank(municipality)) { + postAdresse.setGemeinde(municipality); + } + if (StringUtils.isNotBlank(village)) { + postAdresse.setOrtschaft(village); + } + if (StringUtils.isNotBlank(street) || StringUtils.isNotBlank(number)) { + ZustelladresseTyp zustelladresse = new ZustelladresseTyp(); + if (StringUtils.isNotBlank(street)) { + zustelladresse.setStrassenname(street); + } + if (StringUtils.isNotBlank(number)) { + zustelladresse.setOrientierungsnummer(number); + } + postAdresse.setZustelladresse(zustelladresse); + } + Adressdaten searchInput = new Adressdaten(); + searchInput.setPostAdresse(postAdresse); + return searchInput; } public static class AdresssucheOutput { - private final String city; + private final String municipality; + private final String village; private final String street; private final String number; - public AdresssucheOutput(String city, String street, String number) { - this.city = city; + public AdresssucheOutput(String municipality, String village, String street, String number) { + this.municipality = municipality; + this.village = village; this.street = street; this.number = number; } - public String getCity() { - return city; + public String getMunicipality() { + return municipality; + } + + public String getVillage() { + return village; } public String getStreet() { @@ -121,7 +182,8 @@ public class AdresssucheController { @Override public String toString() { return "AdresssucheOutput{" + - "city='" + city + '\'' + + "municipality='" + municipality + '\'' + + ", village='" + village + '\'' + ", street='" + street + '\'' + ", number='" + number + '\'' + '}'; diff --git a/connector/src/main/resources/templates/residency.html b/connector/src/main/resources/templates/residency.html index 44ae4bd5..38f490ca 100644 --- a/connector/src/main/resources/templates/residency.html +++ b/connector/src/main/resources/templates/residency.html @@ -20,7 +20,8 @@ url: "http://localhost:8080/ms_connector/residency/search", data: $("#inputForm").serialize() }).done(function (data, textStatus, jqXHR) { - $("#inputCity").val(data["city"]); + $("#inputMunicipality").val(data["municipality"]); + $("#inputVillage").val(data["village"]); $("#inputStreet").val(data["street"]); $("#inputNumber").val(data["number"]); $("#textInfo").text(updatedText); @@ -43,11 +44,15 @@

Infotext

-
- - + + +
+
+ +
diff --git a/connector/src/test/resources/config/properties/messages.properties b/connector/src/test/resources/config/properties/messages.properties index 8ffc5560..1e0f04d0 100644 --- a/connector/src/test/resources/config/properties/messages.properties +++ b/connector/src/test/resources/config/properties/messages.properties @@ -110,4 +110,8 @@ gui.residency.cancel=Cancel gui.residency.search=Search gui.residency.proceed=Proceed gui.residency.updated=Updated your input -gui.residency.error=Error on Backend Call \ No newline at end of file +gui.residency.error=Error on Backend Call +gui.residency.input.municipality=Municipality +gui.residency.input.village=Village +gui.residency.input.street=Street +gui.residency.input.number=Number \ No newline at end of file diff --git a/connector/src/test/resources/config/properties/messages_de.properties b/connector/src/test/resources/config/properties/messages_de.properties index a79aa41a..e0eea9d1 100644 --- a/connector/src/test/resources/config/properties/messages_de.properties +++ b/connector/src/test/resources/config/properties/messages_de.properties @@ -111,4 +111,8 @@ gui.residency.cancel=Abbrechen gui.residency.search=Suche gui.residency.proceed=Weiter gui.residency.updated=Eingabe aktualisiert -gui.residency.error=Fehler bei Addresssuche \ No newline at end of file +gui.residency.error=Fehler bei Addresssuche +gui.residency.input.municipality=Gemeinde +gui.residency.input.village=Ortschaft +gui.residency.input.street=Straße +gui.residency.input.number=Nummer \ No newline at end of file diff --git a/connector/src/test/resources/config/templates/residency.html b/connector/src/test/resources/config/templates/residency.html index 8845cba0..17e21044 100644 --- a/connector/src/test/resources/config/templates/residency.html +++ b/connector/src/test/resources/config/templates/residency.html @@ -20,7 +20,8 @@ url: "http://localhost:8080/ms_connector/residency/search", data: $("#inputForm").serialize() }).done(function (data, textStatus, jqXHR) { - $("#inputCity").val(data["city"]); + $("#inputMunicipality").val(data["municipality"]); + $("#inputVillage").val(data["village"]); $("#inputStreet").val(data["street"]); $("#inputNumber").val(data["number"]); $("#textInfo").text(updatedText); @@ -43,11 +44,15 @@

Infotext

-
- - + + +
+
+ +
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java index d869ca37..5fb839af 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java @@ -39,18 +39,18 @@ import lombok.extern.slf4j.Slf4j; /** * ZMR SOAP client for search-address operations. - * + * * @author tlenz * */ @Slf4j public class ZmrAddressSoapClient extends AbstractSoapClient { - + private static final String CLIENT_DEFAULT = "ZMR-AddressSearch Client"; private static final String CLIENT_INFO = "eIDAS MS-Connector v{0}"; - + private static final String LOGMSG_ZMR_SOAP_ERROR = - "ZMR anwser for transaction: {0} with code: {1} and message: {2}"; + "ZMR anwser for transaction: {0} with code: {1} and message: {2}"; private static final String LOGMSG_ZMR_ERROR = "Receive an error from ZMR during '{}' operation with msg: {}"; private static final String LOGMSG_ZMR_RESP_PROCESS = @@ -58,37 +58,37 @@ public class ZmrAddressSoapClient extends AbstractSoapClient { private static final String ERROR_MATCHING_07 = "module.eidasauth.matching.07"; private static final String ERROR_MATCHING_99 = "module.eidasauth.matching.99"; - + private static final String PROCESS_GENERAL = "GP_Abfragen"; private static final String PROCESS_TASK_ADDRESS_WIZZARD = "ZMR_VO_Adresssuche_im_GWR__6"; - + private static final String PROCESS_TASK_RESPONSE_LEVEL_CITY = "Ortschaft"; private static final String PROCESS_TASK_RESPONSE_LEVEL_STREET = "Strassenname"; private static final String PROCESS_TASK_RESPONSE_LEVEL_NUMBER = "Orientierungsnummer"; - - + + private static final String PROCESS_ADDRESS_WIZZARD = "PROCESS_SEARCH_WITH_ADDRESS_WIZZARD"; - + private static final String SEARCH_TYPE = "ADRESSSUCHE"; - - - @Autowired VersionHolder versionHolder; + + + @Autowired VersionHolder versionHolder; private ServicePort zmrClient; - + @Getter @AllArgsConstructor - public static class AddressInfo { + public static class AddressInfo { private final BigInteger processId; private final List personResult; private final DetailLevel level; - + } - + public enum DetailLevel { CITY, STREET, NUMBER, UNKNOWN } - + /** - * Get address information based on ZMR data. - * + * Get address information based on ZMR data. + * * @param addressInfo Search parameters * @return Address data * @throws EidasSAuthenticationException In case of an error @@ -96,12 +96,12 @@ public class ZmrAddressSoapClient extends AbstractSoapClient { public AddressInfo searchAddress(@NonNull Adressdaten addressInfo) throws EidasSAuthenticationException { return searchAddress(addressInfo, null); - + } - + /** - * Get address information based on ZMR data. - * + * Get address information based on ZMR data. + * * @param addressInfo Search parameters * @param prozessInstanzId processId in case of associated requests * @return Address data @@ -111,33 +111,33 @@ public class ZmrAddressSoapClient extends AbstractSoapClient { throws EidasSAuthenticationException { try { RequestType req = new RequestType(); - + // set generic informations req.setClientInfo(generateClientInfos()); req.setWorkflowInfoClient(generateWorkFlowInfos(PROCESS_TASK_ADDRESS_WIZZARD, null)); - + AdresssucheRequest search = new AdresssucheRequest(); req.setAdresssucheRequest(search); - + // set static search type AdresssucheInfoType searchType = new AdresssucheInfoType(); searchType.setSuchart(SEARCH_TYPE); search.setAdresssucheInfo(searchType); - + // set search parameters - search.setAdressdaten(addressInfo); + search.setAdressdaten(addressInfo); // request ZMR address services log.debug("Requesting ZMR for adddress search ...."); ResponseType resp = zmrClient.service(req, null); - log.debug("Receice response for address search with #{} elements", - resp.getAdresssucheResponse().getAdresssuchergebnis().getGefundeneSaetze()); - + log.debug("Receice response for address search with #{} elements", + resp.getAdresssucheResponse().getAdresssuchergebnis().getGefundeneSaetze()); + return new AddressInfo( - extractZmrProcessId(resp.getWorkflowInfoServer()), - resp.getAdresssucheResponse().getAdresssuchergebnis().getAdressdaten(), + extractZmrProcessId(resp.getWorkflowInfoServer()), + resp.getAdresssucheResponse().getAdresssuchergebnis().getAdressdaten(), extractAddressDetailLevel(resp.getAdresssucheResponse().getAdresssuchergebnis())); - + } catch (final ServiceFault_Exception e) { final String errorMsg = extractReasonFromError(e); log.warn(LOGMSG_ZMR_ERROR, PROCESS_ADDRESS_WIZZARD, errorMsg); @@ -154,7 +154,7 @@ public class ZmrAddressSoapClient extends AbstractSoapClient { private void initialize() throws EaafConfigurationException { // set-up the ZMR client initializeTechnicalZmrClient(); - + } private void initializeTechnicalZmrClient() throws EaafConfigurationException { @@ -206,10 +206,10 @@ public class ZmrAddressSoapClient extends AbstractSoapClient { Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_PASSWORD, Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_NAME, "ZMR-AddressSearch SSL Client-Authentication TrustStore")) - .build()); - + .build()); + } - + @Nonnull private ClientInfoType generateClientInfos() { final ClientInfoType clientInfo = new ClientInfoType(); @@ -218,14 +218,14 @@ public class ZmrAddressSoapClient extends AbstractSoapClient { // set client information clientInfo.setClient(MessageFormat.format(CLIENT_INFO, versionHolder.getVersion())); - + // set Behoerdennummer as organization identifier clientOrganisation.setBehoerdenNr(basicConfig.getBasicConfiguration( Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_REQ_ORGANIZATION_NR)); - + return clientInfo; } - + @Nonnull private static String extractReasonFromError(ServiceFault_Exception e) { if (e.getFaultInfo() != null) { @@ -239,10 +239,10 @@ public class ZmrAddressSoapClient extends AbstractSoapClient { return e.getMessage(); } - } - + } + @Nonnull - private static WorkflowInfoClient generateWorkFlowInfos(@Nonnull String subStepName, + private static WorkflowInfoClient generateWorkFlowInfos(@Nonnull String subStepName, @Nullable BigInteger prozessInstanzId) { final WorkflowInfoClient infos = new WorkflowInfoClient(); infos.setProzessName(PROCESS_GENERAL); @@ -251,33 +251,35 @@ public class ZmrAddressSoapClient extends AbstractSoapClient { //set processId that we received from ZMR before, if already available if (prozessInstanzId != null) { infos.setProzessInstanzID(prozessInstanzId); - + } - + return infos; } - + private static BigInteger extractZmrProcessId(WorkflowInfoServer workflowInfoServer) { - return workflowInfoServer != null ? workflowInfoServer.getProzessInstanzID() : null; + return workflowInfoServer != null ? workflowInfoServer.getProzessInstanzID() : null; } - + private static DetailLevel extractAddressDetailLevel(AdresssuchergebnisType value) { + if (value.getDetailgrad() == null) + return DetailLevel.UNKNOWN; switch (value.getDetailgrad()) { case PROCESS_TASK_RESPONSE_LEVEL_CITY: return DetailLevel.CITY; - + case PROCESS_TASK_RESPONSE_LEVEL_STREET: return DetailLevel.STREET; - + case PROCESS_TASK_RESPONSE_LEVEL_NUMBER: return DetailLevel.NUMBER; - + default: return DetailLevel.UNKNOWN; - + } } - + } -- cgit v1.2.3 From 6fff1b53525348d531c96b45c920a8ce72288f60 Mon Sep 17 00:00:00 2001 From: Christian Kollmann Date: Thu, 2 Dec 2021 15:03:09 +0100 Subject: Display all results to user after residency search --- basicConfig/properties/messages.properties | 7 ++ basicConfig/properties/messages_de.properties | 9 +- basicConfig/templates/residency.html | 122 ++++++++++++++++++--- basicConfig/webcontent/img/ajax-loader.gif | Bin 0 -> 673 bytes .../controller/AdresssucheController.java | 82 +++++++------- .../src/main/resources/templates/residency.html | 122 ++++++++++++++++++--- connector/src/main/webapp/img/ajax-loader.gif | Bin 0 -> 673 bytes .../config/properties/messages.properties | 7 ++ .../config/properties/messages_de.properties | 9 +- .../test/resources/config/templates/residency.html | 122 ++++++++++++++++++--- .../config/webcontent/img/ajax-loader.gif | Bin 0 -> 673 bytes 11 files changed, 385 insertions(+), 95 deletions(-) create mode 100644 basicConfig/webcontent/img/ajax-loader.gif create mode 100644 connector/src/main/webapp/img/ajax-loader.gif create mode 100644 connector/src/test/resources/config/webcontent/img/ajax-loader.gif (limited to 'connector/src/test/resources/config/templates/residency.html') diff --git a/basicConfig/properties/messages.properties b/basicConfig/properties/messages.properties index 51a5f27a..76ce5b16 100644 --- a/basicConfig/properties/messages.properties +++ b/basicConfig/properties/messages.properties @@ -119,11 +119,18 @@ gui.residency.header1=Federal Ministry of Internal Affairs gui.residency.header2=Austrian Central eIDAS Node gui.residency.header3=Operated by Federal Ministry of Internal Affairs gui.residency.header.selection=Search for your Austrian Residency +gui.residency.header.help=You can search for the address that you have been registered at in the past. Please enter a \ + Municipality or Village first to start the search. +gui.residency.header.inputinvalid=Be sure to enter a value for Municipality or Village gui.residency.cancel=Cancel gui.residency.search=Search +gui.residency.clear=Clear gui.residency.proceed=Proceed gui.residency.updated=Updated your input +gui.residency.found=Found {0} results +gui.residency.unique=Unique result found, please proceed gui.residency.error=Error on Backend Call +gui.residency.apply=Apply gui.residency.input.municipality=Municipality gui.residency.input.village=Village gui.residency.input.street=Street diff --git a/basicConfig/properties/messages_de.properties b/basicConfig/properties/messages_de.properties index c2d1edba..bca258ee 100644 --- a/basicConfig/properties/messages_de.properties +++ b/basicConfig/properties/messages_de.properties @@ -118,11 +118,18 @@ gui.residency.header1=Bundesministerium für Inneres gui.residency.header2=Zentraler eIDAS Knoten der Republik Österreich gui.residency.header3=Betrieben durch das Bundesministerium für Inneres gui.residency.header.selection=Suche nach Österreichischem Wohnsitz +gui.residency.header.help=Hier können Sie nach einem Wohnsitze in Österreich suchen. Bitte geben Sie zuerst eine \ + Gemeinde oder Ortschaft ein um die Suche zu starten. +gui.residency.header.inputinvalid=Bitte geben Sie einen Wert für Gemeinde oder Ortschaft ein gui.residency.cancel=Abbrechen gui.residency.search=Suche -gui.residency.proceed=Weiter +gui.residency.clear=Löschen +gui.residency.proceed=Fortfahren gui.residency.updated=Eingabe aktualisiert +gui.residency.found={0} Ergebnisse gefunden +gui.residency.unique=Eindeutiges Ergebnis gefunden, bitte fortfahren gui.residency.error=Fehler bei Addresssuche +gui.residency.apply=Übernehmen gui.residency.input.municipality=Gemeinde gui.residency.input.village=Ortschaft gui.residency.input.street=Straße diff --git a/basicConfig/templates/residency.html b/basicConfig/templates/residency.html index 3c3c05d7..9dc1153d 100644 --- a/basicConfig/templates/residency.html +++ b/basicConfig/templates/residency.html @@ -12,24 +12,86 @@ th:attr="src=@{/static/js/jquery-3.6.0.min.js}"> Österreichischer Wohnsitz + @@ -41,38 +103,64 @@

Search your Austrian Residency

-
-

Infotext

-
+
Please enter a Municipality or Village first
- - + +
- - + +
- - + +
- - + +
+
+ +
+
+ +
+
+
+

+
+ + + + + + + + + + + + + +
MunicipalityVillageStreetNumberApply
+
+
diff --git a/basicConfig/webcontent/img/ajax-loader.gif b/basicConfig/webcontent/img/ajax-loader.gif new file mode 100644 index 00000000..f2a1bc0c Binary files /dev/null and b/basicConfig/webcontent/img/ajax-loader.gif differ diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java index 8b25a7bd..c35aa8b9 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java @@ -35,8 +35,11 @@ import at.gv.egiz.eaaf.core.api.gui.ISpringMvcGuiFormBuilder; import at.gv.egiz.eaaf.core.api.idp.IConfiguration; import at.gv.egiz.eaaf.core.api.utils.IPendingRequestIdGenerationStrategy; import at.gv.egiz.eaaf.core.exceptions.GuiBuildException; +import lombok.AllArgsConstructor; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.builder.CompareToBuilder; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ResourceLoader; @@ -48,6 +51,8 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.*; +import java.util.stream.Collectors; /** * Default process-engine signaling controller. @@ -88,7 +93,7 @@ public class AdresssucheController { } @RequestMapping(value = {"/residency/search"}, method = {RequestMethod.POST}) - public ResponseEntity search(@RequestParam("municipality") String municipality, + public ResponseEntity search(@RequestParam("municipality") String municipality, @RequestParam("village") String village, @RequestParam("street") String street, @RequestParam("number") String number, @@ -104,7 +109,7 @@ public class AdresssucheController { try { Adressdaten searchInput = buildSearchInput(municipality, village, street, number); ZmrAddressSoapClient.AddressInfo searchOutput = client.searchAddress(searchInput); - AdresssucheOutput output = buildResponse(searchOutput); + AdresssucheResult output = buildResponse(searchOutput); return ResponseEntity.ok(output); } catch (EidasSAuthenticationException e) { log.warn("Search failed", e); @@ -112,18 +117,22 @@ public class AdresssucheController { } } - private AdresssucheOutput buildResponse(ZmrAddressSoapClient.AddressInfo searchOutput) { + private AdresssucheResult buildResponse(ZmrAddressSoapClient.AddressInfo searchOutput) { if (searchOutput.getPersonResult().isEmpty()) { log.warn("No result from ZMR"); - return new AdresssucheOutput(null, null, null, null); + return new AdresssucheResult(Collections.emptyList(), 0, false, null); } - Adressdaten adressdaten = searchOutput.getPersonResult().iterator().next(); - String municipality = adressdaten.getPostAdresse().getGemeinde(); - String village = adressdaten.getPostAdresse().getOrtschaft(); - String street = adressdaten.getPostAdresse().getZustelladresse().getStrassenname(); - String number = adressdaten.getPostAdresse().getZustelladresse().getOrientierungsnummer(); - log.debug("Result from ZMR: '{}', '{}', '{}', '{}'", municipality, village, street, number); - return new AdresssucheOutput(municipality, village, street, number); + boolean moreResults = false; + new HashSet<>(); + log.info("Result level is {}", searchOutput.getLevel()); + Set result = searchOutput.getPersonResult().stream() + .map(Adressdaten::getPostAdresse) + .map(it -> new AdresssucheOutput(it.getGemeinde(), it.getOrtschaft(), + it.getZustelladresse().getStrassenname(), it.getZustelladresse().getOrientierungsnummer())) + .collect(Collectors.toSet()); + // TODO Add configuration option for the limit of 30 + List sorted = result.stream().sorted().limit(30).collect(Collectors.toList()); + return new AdresssucheResult(sorted, result.size(), moreResults, searchOutput.getLevel().name()); } @NotNull @@ -150,43 +159,32 @@ public class AdresssucheController { return searchInput; } - public static class AdresssucheOutput { + @Data + @AllArgsConstructor + public static class AdresssucheResult { + private final Collection results; + private final int resultCount; + private final boolean moreResults; + private final String detailLevel; + + } + + @Data + @AllArgsConstructor + public static class AdresssucheOutput implements Comparable { private final String municipality; private final String village; private final String street; private final String number; - public AdresssucheOutput(String municipality, String village, String street, String number) { - this.municipality = municipality; - this.village = village; - this.street = street; - this.number = number; - } - - public String getMunicipality() { - return municipality; - } - - public String getVillage() { - return village; - } - - public String getStreet() { - return street; - } - - public String getNumber() { - return number; - } - @Override - public String toString() { - return "AdresssucheOutput{" + - "municipality='" + municipality + '\'' + - ", village='" + village + '\'' + - ", street='" + street + '\'' + - ", number='" + number + '\'' + - '}'; + public int compareTo(@NotNull AdresssucheOutput o) { + return new CompareToBuilder() + .append(this.municipality, o.municipality) + .append(this.village, o.village) + .append(this.street, o.street) + .append(this.number, o.number) + .toComparison(); } } diff --git a/connector/src/main/resources/templates/residency.html b/connector/src/main/resources/templates/residency.html index 38f490ca..3f0532dd 100644 --- a/connector/src/main/resources/templates/residency.html +++ b/connector/src/main/resources/templates/residency.html @@ -12,24 +12,86 @@ th:attr="src=@{/static/js/jquery-3.6.0.min.js}"> Österreichischer Wohnsitz + @@ -41,38 +103,64 @@

Search your Austrian Residency

-
-

Infotext

-
+
Please enter a Municipality or Village first
- - + +
- - + +
- - + +
- - + +
+
+ +
+
+ +
+
+
+

+
+ + + + + + + + + + + + + +
MunicipalityVillageStreetNumberApply
+
+
diff --git a/connector/src/main/webapp/img/ajax-loader.gif b/connector/src/main/webapp/img/ajax-loader.gif new file mode 100644 index 00000000..f2a1bc0c Binary files /dev/null and b/connector/src/main/webapp/img/ajax-loader.gif differ diff --git a/connector/src/test/resources/config/properties/messages.properties b/connector/src/test/resources/config/properties/messages.properties index 1e0f04d0..51befbfc 100644 --- a/connector/src/test/resources/config/properties/messages.properties +++ b/connector/src/test/resources/config/properties/messages.properties @@ -106,11 +106,18 @@ gui.residency.header1=Federal Ministry of Internal Affairs gui.residency.header2=Austrian Central eIDAS Node gui.residency.header3=Operated by Federal Ministry of Internal Affairs gui.residency.header.selection=Search for your Austrian Residency +gui.residency.header.help=You can search for the address that you have been registered at in the past. Please enter a \ + Municipality or Village first to start the search. +gui.residency.header.inputinvalid=Be sure to enter a value for Municipality or Village gui.residency.cancel=Cancel gui.residency.search=Search +gui.residency.clear=Clear gui.residency.proceed=Proceed gui.residency.updated=Updated your input +gui.residency.found=Found {0} results +gui.residency.unique=Unique result found, please proceed gui.residency.error=Error on Backend Call +gui.residency.apply=Apply gui.residency.input.municipality=Municipality gui.residency.input.village=Village gui.residency.input.street=Street diff --git a/connector/src/test/resources/config/properties/messages_de.properties b/connector/src/test/resources/config/properties/messages_de.properties index e0eea9d1..c67e445f 100644 --- a/connector/src/test/resources/config/properties/messages_de.properties +++ b/connector/src/test/resources/config/properties/messages_de.properties @@ -107,11 +107,18 @@ gui.residency.header1=Bundesministerium für Inneres gui.residency.header2=Zentraler eIDAS Knoten der Republik Österreich gui.residency.header3=Betrieben durch das Bundesministerium für Inneres gui.residency.header.selection=Suche nach Österreichischem Wohnsitz +gui.residency.header.help=Hier können Sie nach einem Wohnsitze in Österreich suchen. Bitte geben Sie zuerst eine \ + Gemeinde oder Ortschaft ein um die Suche zu starten. +gui.residency.header.inputinvalid=Bitte geben Sie einen Wert für Gemeinde oder Ortschaft ein gui.residency.cancel=Abbrechen gui.residency.search=Suche -gui.residency.proceed=Weiter +gui.residency.clear=Löschen +gui.residency.proceed=Fortfahren gui.residency.updated=Eingabe aktualisiert +gui.residency.found={0} Ergebnisse gefunden +gui.residency.unique=Eindeutiges Ergebnis gefunden, bitte fortfahren gui.residency.error=Fehler bei Addresssuche +gui.residency.apply=Übernehmen gui.residency.input.municipality=Gemeinde gui.residency.input.village=Ortschaft gui.residency.input.street=Straße diff --git a/connector/src/test/resources/config/templates/residency.html b/connector/src/test/resources/config/templates/residency.html index 17e21044..77c13fb7 100644 --- a/connector/src/test/resources/config/templates/residency.html +++ b/connector/src/test/resources/config/templates/residency.html @@ -12,24 +12,86 @@ th:attr="src=@{/static/js/jquery-3.6.0.js}"> Österreichischer Wohnsitz + @@ -41,38 +103,64 @@

Search your Austrian Residency

-
-

Infotext

-
+
Please enter a Municipality or Village first
- - + +
- - + +
- - + +
- - + +
+
+ +
+
+ +
+
+
+

+
+ + + + + + + + + + + + + +
MunicipalityVillageStreetNumberApply
+
+
diff --git a/connector/src/test/resources/config/webcontent/img/ajax-loader.gif b/connector/src/test/resources/config/webcontent/img/ajax-loader.gif new file mode 100644 index 00000000..f2a1bc0c Binary files /dev/null and b/connector/src/test/resources/config/webcontent/img/ajax-loader.gif differ -- cgit v1.2.3 From ac56869c2a981e40d6cf4637fb8fd46c06207c9d Mon Sep 17 00:00:00 2001 From: Christian Kollmann Date: Thu, 2 Dec 2021 16:05:57 +0100 Subject: Add PLZ to search for adresses in ZMR --- basicConfig/properties/messages.properties | 1 + basicConfig/properties/messages_de.properties | 1 + basicConfig/templates/residency.html | 312 +++++++++++---------- .../controller/AdresssucheController.java | 69 +++-- .../src/main/resources/templates/residency.html | 26 +- .../config/properties/messages.properties | 1 + .../config/properties/messages_de.properties | 1 + .../test/resources/config/templates/residency.html | 26 +- .../eidas/v2/clients/zmr/ZmrAddressSoapClient.java | 3 +- 9 files changed, 250 insertions(+), 190 deletions(-) (limited to 'connector/src/test/resources/config/templates/residency.html') diff --git a/basicConfig/properties/messages.properties b/basicConfig/properties/messages.properties index 76ce5b16..ab7988c9 100644 --- a/basicConfig/properties/messages.properties +++ b/basicConfig/properties/messages.properties @@ -131,6 +131,7 @@ gui.residency.found=Found {0} results gui.residency.unique=Unique result found, please proceed gui.residency.error=Error on Backend Call gui.residency.apply=Apply +gui.residency.input.postleitzahl=Postcode gui.residency.input.municipality=Municipality gui.residency.input.village=Village gui.residency.input.street=Street diff --git a/basicConfig/properties/messages_de.properties b/basicConfig/properties/messages_de.properties index bca258ee..e539c2d9 100644 --- a/basicConfig/properties/messages_de.properties +++ b/basicConfig/properties/messages_de.properties @@ -130,6 +130,7 @@ gui.residency.found={0} Ergebnisse gefunden gui.residency.unique=Eindeutiges Ergebnis gefunden, bitte fortfahren gui.residency.error=Fehler bei Addresssuche gui.residency.apply=Übernehmen +gui.residency.input.postleitzahl=PLZ gui.residency.input.municipality=Gemeinde gui.residency.input.village=Ortschaft gui.residency.input.street=Straße diff --git a/basicConfig/templates/residency.html b/basicConfig/templates/residency.html index 9dc1153d..b434b9f9 100644 --- a/basicConfig/templates/residency.html +++ b/basicConfig/templates/residency.html @@ -5,168 +5,180 @@ th:with="lang=${#locale.language}" th:lang="${lang}"> - - - - - Österreichischer Wohnsitz - + Österreichischer Wohnsitz + - + function clearInput() { + $("#inputForm #inputMunicipality").val(""); + $("#inputForm #inputVillage").val(""); + $("#inputForm #inputStreet").val(""); + $("#inputForm #inputNumber").val(""); + $("#textResult").hide(); + $("#tableResult").hide(); + } + +
-
- LanguageSelectionBlock -
+
+ LanguageSelectionBlock +
-

Search your Austrian Residency

+

Search your Austrian Residency

-
- -
Please enter a Municipality or Village first
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-
- -
-
- -
-
- -
- - -
- -
-
-

+
+
+
Please enter a Municipality or Village first
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
- - - - - - - - - - - - -
MunicipalityVillageStreetNumberApply
-
+
+
+

+
+ + + + + + + + + + + + + + +
PostleitzahlMunicipalityVillageStreetNumberApply
+
-
- - - -
+
+ + + +
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java index c35aa8b9..f71917c3 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java @@ -30,11 +30,12 @@ import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenti import at.gv.bmi.namespace.zmr_su.zrm._20040201_.address.Adressdaten; import at.gv.e_government.reference.namespace.persondata.de._20040201.PostAdresseTyp; import at.gv.e_government.reference.namespace.persondata.de._20040201.ZustelladresseTyp; -import at.gv.egiz.eaaf.core.api.gui.IGuiBuilderConfiguration; import at.gv.egiz.eaaf.core.api.gui.ISpringMvcGuiFormBuilder; import at.gv.egiz.eaaf.core.api.idp.IConfiguration; import at.gv.egiz.eaaf.core.api.utils.IPendingRequestIdGenerationStrategy; +import at.gv.egiz.eaaf.core.exceptions.EaafException; import at.gv.egiz.eaaf.core.exceptions.GuiBuildException; +import at.gv.egiz.eaaf.core.exceptions.PendingReqIdValidationException; import lombok.AllArgsConstructor; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -51,7 +52,10 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; /** @@ -78,9 +82,13 @@ public class AdresssucheController { @Autowired private IPendingRequestIdGenerationStrategy pendingReqGeneration; + /** + * Show the "residency.html" directly. + * TODO Remove this after testing. + */ @RequestMapping(value = {"/test"}, method = {RequestMethod.GET}) - public void test(HttpServletRequest request, HttpServletResponse response) throws GuiBuildException { - final IGuiBuilderConfiguration config = new StaticGuiBuilderConfiguration( + public void test(HttpServletRequest request, HttpServletResponse response) throws GuiBuildException, EaafException { + final StaticGuiBuilderConfiguration config = new StaticGuiBuilderConfiguration( basicConfig, "http://localhost:8080/ms_connector/", basicConfig.getBasicConfiguration(//TODO @@ -88,26 +96,34 @@ public class AdresssucheController { MsEidasNodeConstants.TEMPLATE_HTML_RESIDENCY), MsEidasNodeConstants.ENDPOINT_RESIDENCY_INPUT, resourceLoader); - // TODO Set the pendingId somehow + config.putCustomParameter(null, "pendingid", pendingReqGeneration.generateExternalPendingRequestId()); guiBuilder.build(request, response, config, "Query Austrian residency"); } + /** + * Performs search for addresses in ZMR. + */ @RequestMapping(value = {"/residency/search"}, method = {RequestMethod.POST}) - public ResponseEntity search(@RequestParam("municipality") String municipality, + public ResponseEntity search(@RequestParam("postleitzahl") String postleitzahl, + @RequestParam("municipality") String municipality, @RequestParam("village") String village, @RequestParam("street") String street, @RequestParam("number") String number, @RequestParam("pendingid") String pendingId) { - log.info("Search with '{}', '{}', '{}'", municipality, street, number); - // TODO validate pendingId -// try { -// pendingReqGeneration.validateAndGetPendingRequestId(pendingId); -// } catch (PendingReqIdValidationException e) { -// log.warn("Search with pendingId '{}' is not valid", pendingId); -// return ResponseEntity.badRequest().build(); -// } + log.info("Search with '{}', '{}', '{}', '{}', '{}'", + postleitzahl.replaceAll("[\r\n]", ""), + municipality.replaceAll("[\r\n]", ""), + village.replaceAll("[\r\n]", ""), + street.replaceAll("[\r\n]", ""), + number.replaceAll("[\r\n]", "")); try { - Adressdaten searchInput = buildSearchInput(municipality, village, street, number); + pendingReqGeneration.validateAndGetPendingRequestId(pendingId); + } catch (PendingReqIdValidationException e) { + log.warn("Search with pendingId '{}' is not valid", pendingId.replaceAll("[\r\n]", "")); + return ResponseEntity.badRequest().build(); + } + try { + Adressdaten searchInput = buildSearchInput(postleitzahl, municipality, village, street, number); ZmrAddressSoapClient.AddressInfo searchOutput = client.searchAddress(searchInput); AdresssucheResult output = buildResponse(searchOutput); return ResponseEntity.ok(output); @@ -120,24 +136,28 @@ public class AdresssucheController { private AdresssucheResult buildResponse(ZmrAddressSoapClient.AddressInfo searchOutput) { if (searchOutput.getPersonResult().isEmpty()) { log.warn("No result from ZMR"); - return new AdresssucheResult(Collections.emptyList(), 0, false, null); + return new AdresssucheResult(Collections.emptyList(), 0); } - boolean moreResults = false; - new HashSet<>(); log.info("Result level is {}", searchOutput.getLevel()); Set result = searchOutput.getPersonResult().stream() .map(Adressdaten::getPostAdresse) - .map(it -> new AdresssucheOutput(it.getGemeinde(), it.getOrtschaft(), + .map(it -> new AdresssucheOutput(it.getPostleitzahl(), it.getGemeinde(), it.getOrtschaft(), it.getZustelladresse().getStrassenname(), it.getZustelladresse().getOrientierungsnummer())) .collect(Collectors.toSet()); // TODO Add configuration option for the limit of 30 List sorted = result.stream().sorted().limit(30).collect(Collectors.toList()); - return new AdresssucheResult(sorted, result.size(), moreResults, searchOutput.getLevel().name()); + return new AdresssucheResult(sorted, result.size()); } - @NotNull - private Adressdaten buildSearchInput(String municipality, String village, String street, String number) { + private Adressdaten buildSearchInput(String postleitzahl, + String municipality, + String village, + String street, + String number) { PostAdresseTyp postAdresse = new PostAdresseTyp(); + if (StringUtils.isNotBlank(postleitzahl)) { + postAdresse.setPostleitzahl(postleitzahl); + } if (StringUtils.isNotBlank(municipality)) { postAdresse.setGemeinde(municipality); } @@ -164,14 +184,12 @@ public class AdresssucheController { public static class AdresssucheResult { private final Collection results; private final int resultCount; - private final boolean moreResults; - private final String detailLevel; - } @Data @AllArgsConstructor public static class AdresssucheOutput implements Comparable { + private final String postleitzahl; private final String municipality; private final String village; private final String street; @@ -180,6 +198,7 @@ public class AdresssucheController { @Override public int compareTo(@NotNull AdresssucheOutput o) { return new CompareToBuilder() + .append(this.postleitzahl, o.postleitzahl) .append(this.municipality, o.municipality) .append(this.village, o.village) .append(this.street, o.street) diff --git a/connector/src/main/resources/templates/residency.html b/connector/src/main/resources/templates/residency.html index 3f0532dd..b434b9f9 100644 --- a/connector/src/main/resources/templates/residency.html +++ b/connector/src/main/resources/templates/residency.html @@ -33,7 +33,8 @@ let foundText = /*[[#{gui.residency.found}]]*/ 'Found {0}'; let uniqueText = /*[[#{gui.residency.unique}]]*/ 'Unique'; let invalidInputText = /*[[#{gui.residency.header.inputinvalid}]]*/ 'Invalid'; - if (!$("#inputForm #inputMunicipality").val().trim() && !$("#inputForm #inputVillage").val().trim()) { + if (!$("#inputForm #inputMunicipality").val().trim() && !$("#inputForm #inputPostleitzahl").val().trim() && + !$("#inputForm #inputVillage").val().trim()) { $("#textResult").show().text(invalidInputText); return; } @@ -46,6 +47,7 @@ $("#textResult").show().text(uniqueText); $("#tableResult tbody").empty(); $("#tableResult").hide(); + $("#inputForm #inputPostleitzahl").val(data["results"][0]["postleitzahl"]); $("#inputForm #inputMunicipality").val(data["results"][0]["municipality"]); $("#inputForm #inputVillage").val(data["results"][0]["village"]); $("#inputForm #inputStreet").val(data["results"][0]["street"]); @@ -58,20 +60,25 @@ $.each(data.results, function (i, output) { $("#tableResult tbody") .append($("") + .append($("").text(output["postleitzahl"] !== null ? output["postleitzahl"] : "")) .append($("").text(output["municipality"] !== null ? output["municipality"] : "")) .append($("").text(output["village"] !== null ? output["village"] : "")) .append($("").text(output["street"] !== null ? output["street"] : "")) .append($("").text(output["number"] !== null ? output["number"] : "")) .append($("").text(applyText).attr("href", "#").click(function () { - $("#inputForm #inputMunicipality").val($(this).parent().children("td:nth-child(1)").text()); - $("#inputForm #inputVillage").val($(this).parent().children("td:nth-child(2)").text()); - $("#inputForm #inputStreet").val($(this).parent().children("td:nth-child(3)").text()); - $("#inputForm #inputNumber").val($(this).parent().children("td:nth-child(4)").text()); + $("#inputForm #inputPostleitzahl").val($(this).parent().children("td:nth-child(1)").text()); + $("#inputForm #inputMunicipality").val($(this).parent().children("td:nth-child(2)").text()); + $("#inputForm #inputVillage").val($(this).parent().children("td:nth-child(3)").text()); + $("#inputForm #inputStreet").val($(this).parent().children("td:nth-child(4)").text()); + $("#inputForm #inputNumber").val($(this).parent().children("td:nth-child(5)").text()); $("#textResult").show().text(updatedText); search(); })) ); }) + if (data.results.length == 0) { + $("#tableResult").hide(); + } }).fail(function (jqXHR, textStatus, errorThrown) { $("#textResult").show().text(errorText); }) @@ -106,6 +113,10 @@
Please enter a Municipality or Village first
+
+ + +
@@ -134,8 +145,8 @@
- +
@@ -148,6 +159,7 @@ + diff --git a/connector/src/test/resources/config/properties/messages.properties b/connector/src/test/resources/config/properties/messages.properties index 51befbfc..2f99d892 100644 --- a/connector/src/test/resources/config/properties/messages.properties +++ b/connector/src/test/resources/config/properties/messages.properties @@ -118,6 +118,7 @@ gui.residency.found=Found {0} results gui.residency.unique=Unique result found, please proceed gui.residency.error=Error on Backend Call gui.residency.apply=Apply +gui.residency.input.postleitzahl=Postcode gui.residency.input.municipality=Municipality gui.residency.input.village=Village gui.residency.input.street=Street diff --git a/connector/src/test/resources/config/properties/messages_de.properties b/connector/src/test/resources/config/properties/messages_de.properties index c67e445f..ead751d0 100644 --- a/connector/src/test/resources/config/properties/messages_de.properties +++ b/connector/src/test/resources/config/properties/messages_de.properties @@ -119,6 +119,7 @@ gui.residency.found={0} Ergebnisse gefunden gui.residency.unique=Eindeutiges Ergebnis gefunden, bitte fortfahren gui.residency.error=Fehler bei Addresssuche gui.residency.apply=Übernehmen +gui.residency.input.postleitzahl=PLZ gui.residency.input.municipality=Gemeinde gui.residency.input.village=Ortschaft gui.residency.input.street=Straße diff --git a/connector/src/test/resources/config/templates/residency.html b/connector/src/test/resources/config/templates/residency.html index 77c13fb7..99de851a 100644 --- a/connector/src/test/resources/config/templates/residency.html +++ b/connector/src/test/resources/config/templates/residency.html @@ -33,7 +33,8 @@ let foundText = /*[[#{gui.residency.found}]]*/ 'Found {0}'; let uniqueText = /*[[#{gui.residency.unique}]]*/ 'Unique'; let invalidInputText = /*[[#{gui.residency.header.inputinvalid}]]*/ 'Invalid'; - if (!$("#inputForm #inputMunicipality").val().trim() && !$("#inputForm #inputVillage").val().trim()) { + if (!$("#inputForm #inputMunicipality").val().trim() && !$("#inputForm #inputPostleitzahl").val().trim() && + !$("#inputForm #inputVillage").val().trim()) { $("#textResult").show().text(invalidInputText); return; } @@ -46,6 +47,7 @@ $("#textResult").show().text(uniqueText); $("#tableResult tbody").empty(); $("#tableResult").hide(); + $("#inputForm #inputPostleitzahl").val(data["results"][0]["postleitzahl"]); $("#inputForm #inputMunicipality").val(data["results"][0]["municipality"]); $("#inputForm #inputVillage").val(data["results"][0]["village"]); $("#inputForm #inputStreet").val(data["results"][0]["street"]); @@ -58,20 +60,25 @@ $.each(data.results, function (i, output) { $("#tableResult tbody") .append($("") + .append($("
Postleitzahl Municipality Village Street
").text(output["postleitzahl"] !== null ? output["postleitzahl"] : "")) .append($("").text(output["municipality"] !== null ? output["municipality"] : "")) .append($("").text(output["village"] !== null ? output["village"] : "")) .append($("").text(output["street"] !== null ? output["street"] : "")) .append($("").text(output["number"] !== null ? output["number"] : "")) .append($("").text(applyText).attr("href", "#").click(function () { - $("#inputForm #inputMunicipality").val($(this).parent().children("td:nth-child(1)").text()); - $("#inputForm #inputVillage").val($(this).parent().children("td:nth-child(2)").text()); - $("#inputForm #inputStreet").val($(this).parent().children("td:nth-child(3)").text()); - $("#inputForm #inputNumber").val($(this).parent().children("td:nth-child(4)").text()); + $("#inputForm #inputPostleitzahl").val($(this).parent().children("td:nth-child(1)").text()); + $("#inputForm #inputMunicipality").val($(this).parent().children("td:nth-child(2)").text()); + $("#inputForm #inputVillage").val($(this).parent().children("td:nth-child(3)").text()); + $("#inputForm #inputStreet").val($(this).parent().children("td:nth-child(4)").text()); + $("#inputForm #inputNumber").val($(this).parent().children("td:nth-child(5)").text()); $("#textResult").show().text(updatedText); search(); })) ); }) + if (data.results.length == 0) { + $("#tableResult").hide(); + } }).fail(function (jqXHR, textStatus, errorThrown) { $("#textResult").show().text(errorText); }) @@ -106,6 +113,10 @@
Please enter a Municipality or Village first
+
+ + +
@@ -134,8 +145,8 @@
- +
@@ -148,6 +159,7 @@ + diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java index 5fb839af..6e146ddf 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java @@ -264,8 +264,9 @@ public class ZmrAddressSoapClient extends AbstractSoapClient { } private static DetailLevel extractAddressDetailLevel(AdresssuchergebnisType value) { - if (value.getDetailgrad() == null) + if (value.getDetailgrad() == null) { return DetailLevel.UNKNOWN; + } switch (value.getDetailgrad()) { case PROCESS_TASK_RESPONSE_LEVEL_CITY: return DetailLevel.CITY; -- cgit v1.2.3 From 8d2aa68bc18c04c2b03cbdd01f008a89e4c8c1c6 Mon Sep 17 00:00:00 2001 From: Christian Kollmann Date: Tue, 7 Dec 2021 07:51:10 +0100 Subject: Unify HTML templates across test, main, basicConfig --- basicConfig/properties/messages.properties | 19 +- basicConfig/properties/messages_de.properties | 18 +- basicConfig/templates/other_login_method.html | 264 +++-------- basicConfig/templates/residency.html | 39 +- basicConfig/webcontent/css/css_country.css | 293 ++++++------ .../controller/AdresssucheController.java | 38 ++ .../main/resources/properties/messages.properties | 127 ++++++ .../resources/properties/messages_de.properties | 128 ++++++ .../main/resources/templates/countrySelection.html | 501 +++++++++++---------- .../resources/templates/eidas_node_forward.html | 36 ++ .../resources/templates/other_login_method.html | 77 ++++ .../src/main/resources/templates/residency.html | 39 +- connector/src/main/webapp/css/basic.css | 4 - connector/src/main/webapp/js/js_country.js | 42 ++ .../connector/test/FullStartUpAndProcessTest.java | 52 +-- .../test/saml2/Pvp2SProfileEndPointTest.java | 202 ++++----- .../config/properties/messages.properties | 18 +- .../config/properties/messages_de.properties | 18 +- .../config/templates/countrySelection.html | 457 ++++++++++--------- .../config/templates/countrySelection_example.html | 210 --------- .../src/test/resources/config/templates/error.html | 53 +++ .../config/templates/other_login_method.html | 202 +-------- .../test/resources/config/templates/residency.html | 39 +- .../config/webcontent/css/css_country.css | 293 ++++++------ .../resources/config/webcontent/js/js_country.js | 58 +-- 25 files changed, 1684 insertions(+), 1543 deletions(-) create mode 100644 connector/src/main/resources/properties/messages.properties create mode 100644 connector/src/main/resources/properties/messages_de.properties create mode 100644 connector/src/main/resources/templates/eidas_node_forward.html create mode 100644 connector/src/main/resources/templates/other_login_method.html delete mode 100644 connector/src/main/webapp/css/basic.css create mode 100644 connector/src/main/webapp/js/js_country.js delete mode 100644 connector/src/test/resources/config/templates/countrySelection_example.html create mode 100644 connector/src/test/resources/config/templates/error.html (limited to 'connector/src/test/resources/config/templates/residency.html') diff --git a/basicConfig/properties/messages.properties b/basicConfig/properties/messages.properties index ab7988c9..5f24f0da 100644 --- a/basicConfig/properties/messages.properties +++ b/basicConfig/properties/messages.properties @@ -97,8 +97,8 @@ gui.countryselection.country.ro=Romania gui.countryselection.country.ro.logo.alt=Romania-eID gui.countryselection.country.sk=Slovakia gui.countryselection.country.sk.logo.alt=Slovakia-eID -gui.countryselection.country.sw=Sweden -gui.countryselection.country.sw.logo.alt=Sweden-eID +gui.countryselection.country.se=Sweden +gui.countryselection.country.se.logo.alt=Sweden-eID gui.countryselection.country.uk=United Kingdom gui.countryselection.country.uk.logo.alt=United Kingdom-eID @@ -110,17 +110,20 @@ gui.countryselection.mode.qs=QS gui.countryselection.mode.test=Test gui.countryselection.mode.dev=Development +##Other Login Methods page +gui.otherlogin.title=eIDAS-Login Other Login Methods +gui.otherlogin.header.selection=Select an alternative login method +gui.otherlogin.hs=Mobile Signature ("Handy-Signatur") +gui.otherlogin.eidas=Alternative eIDAS ID +gui.otherlogin.none=No alternative login methods +gui.otherlogin.cancel=Cancel + ##Austrian Residency page gui.residency.title=Austrian Residency -gui.residency.logo.bmi.alt=Logo BMI -gui.residency.link.bmi=Mainpage BMI -gui.residency.header1=Federal Ministry of Internal Affairs -gui.residency.header2=Austrian Central eIDAS Node -gui.residency.header3=Operated by Federal Ministry of Internal Affairs gui.residency.header.selection=Search for your Austrian Residency gui.residency.header.help=You can search for the address that you have been registered at in the past. Please enter a \ - Municipality or Village first to start the search. + postcode, municipality or village first to start the search. gui.residency.header.inputinvalid=Be sure to enter a value for Municipality or Village gui.residency.cancel=Cancel gui.residency.search=Search diff --git a/basicConfig/properties/messages_de.properties b/basicConfig/properties/messages_de.properties index e539c2d9..95489b32 100644 --- a/basicConfig/properties/messages_de.properties +++ b/basicConfig/properties/messages_de.properties @@ -96,8 +96,8 @@ gui.countryselection.country.ro=Romänien gui.countryselection.country.ro.logo.alt=Romänische-eID gui.countryselection.country.sk=Slovakei gui.countryselection.country.sk.logo.alt=Slovakische-eID -gui.countryselection.country.sw=Schweden -gui.countryselection.country.sw.logo.alt=Schwedische-eID +gui.countryselection.country.se=Schweden +gui.countryselection.country.se.logo.alt=Schwedische-eID gui.countryselection.country.uk=Großbritanien gui.countryselection.country.uk.logo.alt=Britische-eID @@ -109,17 +109,19 @@ gui.countryselection.mode.qs=Qualitätsicherung gui.countryselection.mode.test=Test gui.countryselection.mode.dev=Development +##Other Login Methods page +gui.otherlogin.title=eIDAS-Login Alternative Anmeldemethoden +gui.otherlogin.header.selection=Wählen Sie eine alternative Anmeldemethode +gui.otherlogin.hs=Handy-Signatur +gui.otherlogin.eidas=Alternativer eIDAS Login +gui.otherlogin.none=Keine +gui.otherlogin.cancel=Abbrechen ##Austrian Residency page gui.residency.title=Österreichischer Wohnsitz -gui.residency.logo.bmi.alt=Logo BMI -gui.residency.link.bmi=Startseite BMI -gui.residency.header1=Bundesministerium für Inneres -gui.residency.header2=Zentraler eIDAS Knoten der Republik Österreich -gui.residency.header3=Betrieben durch das Bundesministerium für Inneres gui.residency.header.selection=Suche nach Österreichischem Wohnsitz gui.residency.header.help=Hier können Sie nach einem Wohnsitze in Österreich suchen. Bitte geben Sie zuerst eine \ - Gemeinde oder Ortschaft ein um die Suche zu starten. + Postleitzahl, Gemeinde oder Ortschaft ein um die Suche zu starten. gui.residency.header.inputinvalid=Bitte geben Sie einen Wert für Gemeinde oder Ortschaft ein gui.residency.cancel=Abbrechen gui.residency.search=Suche diff --git a/basicConfig/templates/other_login_method.html b/basicConfig/templates/other_login_method.html index fffe3930..c233c5c4 100644 --- a/basicConfig/templates/other_login_method.html +++ b/basicConfig/templates/other_login_method.html @@ -4,224 +4,74 @@ layout:decorator="fragments/base" th:with="lang=${#locale.language}" th:lang="${lang}"> - - - - eIDAS-Login Länderauswahl - - + + + + eIDAS-Login Other Login Methods -
+
- - + +
-
-
+
+
-

Zentraler eIDAS Knoten der Republik Österreich

-

Betrieben durch das Bundesministerium für Inneres

+

Zentraler eIDAS Knoten der Republik Österreich

+

Betrieben durch das Bundesministerium für Inneres

-

Zuordnung Ihrer Anmeldeinformationen

- -

Ihre Anmeldeinformationen konnten nicht eindeutig in das österreichische eID System integriert werden. - Für eine eindeutig Integration sind weitere Informationen erforderlich.

- - -
- Info

+

Select an alternative login method

+ +
+
+ + + + +
+ + + + +
+ + + +
-
-
- - - - - -
- - - - - -
- - - - - -
- - - - -
- - -
- - - + + + + - -

Information zur Anmeldung über Europäische eIDs

-

- first part - Bundesministerium für Inneres - second part -

- -

- third part - eIDAS-Verordnung der Europäischen Union - fourth part -

- -

fived part - - sixed part -

- -
-
- -
-
+
+
+ +
+
diff --git a/basicConfig/templates/residency.html b/basicConfig/templates/residency.html index b434b9f9..8192a068 100644 --- a/basicConfig/templates/residency.html +++ b/basicConfig/templates/residency.html @@ -3,7 +3,6 @@ xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="fragments/base" th:with="lang=${#locale.language}" th:lang="${lang}"> - @@ -102,17 +101,41 @@ -
-
- LanguageSelectionBlock +
+
+ + +
+
+
+
+

Zentraler eIDAS Knoten der Republik Österreich

+

Betrieben durch das Bundesministerium für Inneres

-

Search your Austrian Residency

+

Search your Austrian Residency

-
Please enter a Municipality or Village first
+
Please enter a postcode, municipality or village first
@@ -181,5 +204,9 @@
+
+ +
+
diff --git a/basicConfig/webcontent/css/css_country.css b/basicConfig/webcontent/css/css_country.css index 4091955f..bc575c90 100644 --- a/basicConfig/webcontent/css/css_country.css +++ b/basicConfig/webcontent/css/css_country.css @@ -1,137 +1,158 @@ @charset "utf-8"; - body { - background-image: none; - margin: 0px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - } - #page { - padding-top: 2%; - padding-left: 10%; - } - - #country { - display: flex; - flex-direction: row; - flex-wrap: wrap; - align-items: center; - } - - .block { - display: flex; - flex-direction: row; - flex-wrap: wrap; - cursor: pointer; - text-decoration: none; - padding-right:2%; - width: 250px; - } - - .countryimage { - width:50px; - height:50px; - padding-right: 2%; - padding-bottom: 4%; - } - - input[type=button], input[type=submit], input[type=reset] { - display:flex; - background-color:transparent; - border:none; - color: black; - text-decoration: none; - cursor: pointer; - } - #testEnvironment { - border: none; - color: black; - padding: 10px 20px; - text-decoration: none; - margin: 4px 2px; - height: 3%; - display: inline-block; - vertical-align: middle; - width: 40%; - } - #button{ - background-color: transparent; - border:none; - } - div.header { - background-color: #e9ecef; - padding-top: 28px; - padding-left: 137px; - padding-right: 137px; - padding-bottom: 12px; - } - div.titlebar { - padding: 0px; - } - div.titlebar div { - } - .hidden { - display: none; - } - ul.nav_oben { - padding: 0px; - margin: 0px; - text-align: right; - text-transform: uppercase; - } - li { - display: inline-block; - } - div.header a { - text-decoration: none; - color: black; - } - a { - text-decoration: none; - color: #a22c1c; - } - .content { - padding-left: 137px; - padding-right: 137px; - } - div.subtitle h1 { - padding: 0px; - margin: 0px; - font-size: 130%; - align: right; - } - div.subtitle h2 { - padding: 0px; - margin: 0px; - font-size: 115%; - } - footer { - position: fixed; - left: 0; - padding-left: 137px; - padding-right: 137px; - padding-top: 1em; - bottom: 0; - width: 100%; - height: 2em; - background-color: rgb(162,44,28); - color: white; - } - .float { - float: left; - } - .floatright { - float: right; - } - .copyright { - width: 66%; - font-size: 80%; - } - #countries,#country { - padding-bottom: 40px; - } - input[type=submit] { - width: inherit; - /* text-align: left; */ - } - form { - justify-content: center; - } \ No newline at end of file +body { + background-image: none; + margin: 0px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +#page { + padding-top: 2%; + padding-left: 10%; +} + +#country { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: center; +} + +.block { + display: flex; + flex-direction: row; + flex-wrap: wrap; + cursor: pointer; + text-decoration: none; + padding-right: 2%; + width: 250px; +} + +.countryimage { + width: 50px; + height: 50px; + padding-right: 2%; + padding-bottom: 4%; +} + +input[type=button], input[type=submit], input[type=reset] { + display: flex; + background-color: transparent; + border: none; + color: black; + text-decoration: none; + cursor: pointer; +} + +#testEnvironment { + border: none; + color: black; + padding: 10px 20px; + text-decoration: none; + margin: 4px 2px; + height: 3%; + display: inline-block; + vertical-align: middle; + width: 40%; +} + +#button { + background-color: transparent; + border: none; +} + +div.header { + background-color: #e9ecef; + padding-top: 28px; + padding-left: 137px; + padding-right: 137px; + padding-bottom: 12px; +} + +div.titlebar { + padding: 0px; +} + +div.titlebar div { +} + +.hidden { + display: none; +} + +ul.nav_oben { + padding: 0px; + margin: 0px; + text-align: right; + text-transform: uppercase; +} + +li { + display: inline-block; +} + +div.header a { + text-decoration: none; + color: black; +} + +a { + text-decoration: none; + color: #a22c1c; +} + +.content { + padding-left: 137px; + padding-right: 137px; +} + +div.subtitle h1 { + padding: 0px; + margin: 0px; + font-size: 130%; + align: right; +} + +div.subtitle h2 { + padding: 0px; + margin: 0px; + font-size: 115%; +} + +footer { + position: fixed; + left: 0; + padding-left: 137px; + padding-right: 137px; + padding-top: 1em; + bottom: 0; + width: 100%; + height: 2em; + background-color: rgb(162, 44, 28); + color: white; +} + +.float { + float: left; +} + +.floatright { + float: right; +} + +.copyright { + width: 66%; + font-size: 80%; +} + +#countries, #country { + padding-bottom: 40px; +} + +input[type=submit] { + width: inherit; + /* text-align: left; */ +} + +form { + justify-content: center; +} \ No newline at end of file diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java index f71917c3..b044e95e 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java @@ -100,6 +100,44 @@ public class AdresssucheController { guiBuilder.build(request, response, config, "Query Austrian residency"); } + /** + * Show the "other_login_method.html" directly. + * TODO Remove this after testing. + */ + @RequestMapping(value = {"/olm"}, method = {RequestMethod.GET}) + public void otherloginmethod(HttpServletRequest request, HttpServletResponse response) throws GuiBuildException, + EaafException { + final StaticGuiBuilderConfiguration config = new StaticGuiBuilderConfiguration( + basicConfig, + "http://localhost:8080/ms_connector/", + basicConfig.getBasicConfiguration(//TODO + MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_TEMPLATES_OTHER_LOGIN_METHOD_SELECTION, + MsEidasNodeConstants.TEMPLATE_HTML_OTHERLOGINMETHODS), + MsEidasNodeConstants.ENDPOINT_OTHER_LOGIN_METHOD_SELECTION, + resourceLoader); + config.putCustomParameter(null, "pendingid", pendingReqGeneration.generateExternalPendingRequestId()); + guiBuilder.build(request, response, config, "Other Login Method"); + } + + /** + * Show the "country_selection.html" directly. + * TODO Remove this after testing. + */ + @RequestMapping(value = {"/country"}, method = {RequestMethod.GET}) + public void countryselection(HttpServletRequest request, HttpServletResponse response) throws GuiBuildException, + EaafException { + final StaticGuiBuilderConfiguration config = new StaticGuiBuilderConfiguration( + basicConfig, + "http://localhost:8080/ms_connector/", + basicConfig.getBasicConfiguration(//TODO + MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_TEMPLATES_CCSELECTION, + MsEidasNodeConstants.TEMPLATE_HTML_COUNTRYSELECTION), + MsEidasNodeConstants.ENDPOINT_COUNTRYSELECTION, + resourceLoader); + config.putCustomParameter(null, "pendingid", pendingReqGeneration.generateExternalPendingRequestId()); + guiBuilder.build(request, response, config, "Country Selection"); + } + /** * Performs search for addresses in ZMR. */ diff --git a/connector/src/main/resources/properties/messages.properties b/connector/src/main/resources/properties/messages.properties new file mode 100644 index 00000000..3f662ef9 --- /dev/null +++ b/connector/src/main/resources/properties/messages.properties @@ -0,0 +1,127 @@ +####### GUI elements #### +gui.general.language.selection.title=Language selection +gui.general.language.selection.de=Deutsch +gui.general.language.selection.en=English + +##Errorpage template +gui.errorpage.msg.title=Authentication error arise +gui.errorpage.msg.information=The authentication stops on account of a process error: +gui.errorpage.msg.errorcode=Error Code: +gui.errorpage.msg.errormsg=Error Message: +gui.errorpage.msg.stacktrace=Stacktrace: + +##Country-Selection page +gui.countryselection.title=eIDAS-Login Countryselection +gui.countryselection.logo.bmi.alt=Logo BMI +gui.countryselection.link.bmi=Mainpage BMI +gui.countryselection.header1=Federal Ministry of Internal Affairs +gui.countryselection.header2=Austrian Central eIDAS Node +gui.countryselection.header3=Operated by Federal Ministry of Internal Affairs +gui.countryselection.header.selection=Select your country +gui.countryselection.cancel=Cancel +gui.countryselection.notsupportedinfo=If you cannot find your country in this list then your electronic identity (eID) is not yet supported. + +gui.countryselection.infos.general.header=Information on Logins with European eIDs +gui.countryselection.infos.general.link.1=eIDAS regulation of the European Union +gui.countryselection.infos.general.link.2=Austrian Supplementary Register for Natural Persons (ERnP) +gui.countryselection.infos.general.part.1=This is the central eIDAS node of the Republic of Austria, operated by the +gui.countryselection.infos.general.part.2=It enables logins at Austrian online services using an electronic identity (eID) of another EU member state. You have been redirected to this page, as you have initiated a login to an online service using the option "EU Login". +gui.countryselection.infos.general.part.3=The central eIDAS node of the Republic of Austria allows you to login to Austrian online services using the eID of your home country. This way, compliance with the +gui.countryselection.infos.general.part.4=, which regulates the mutual cross-border acceptance of national eIDs, is achieved. The mutual cross-border acceptance of national eIDs is implemented successively within the EU. Currently, the central eIDAS node of the Republic of Austria supports logins using the eID systems of the Member States mentioned above. More Member States will be added according to availability of their respective eID solutions. +gui.countryselection.infos.general.part.5=After selecting your home country on this page, you are forwarded to the familiar login environment of the selected member state. There, you can login with your eID as usual. After successful completion of the login process, you are automatically forwarded and logged in to the online service, from which you have been redirected to this page. During your first login, your eID data is also registered in the +gui.countryselection.infos.general.part.6=This ensures that you will also be successfully and uniquely identified in subsequent logins at Austrian online services. + +gui.countryselection.country.be=Belgium +gui.countryselection.country.be.logo.alt=Belgium-eID +gui.countryselection.country.hr=Croatia +gui.countryselection.country.hr.logo.alt=Croatia-eID +gui.countryselection.country.cy=Cyprus +gui.countryselection.country.cy.logo.alt=Cyprus-eID +gui.countryselection.country.cz=Czech Republic +gui.countryselection.country.cz.logo.alt=Czech Republic-eID +gui.countryselection.country.ee=Estonia +gui.countryselection.country.ee.logo.alt=Estonia-eID +gui.countryselection.country.de=Germany +gui.countryselection.country.de.logo.alt=German-eID +gui.countryselection.country.is=Iceland +gui.countryselection.country.is.logo.alt=Iceland-eID +gui.countryselection.country.it=Italy +gui.countryselection.country.it.logo.alt=Italy-eID +gui.countryselection.country.lt=Lithuania +gui.countryselection.country.lt.logo.alt=Lithuania-eID +gui.countryselection.country.lv=Latvia +gui.countryselection.country.lv.logo.alt=Latvia-eID +gui.countryselection.country.nl=Netherlands +gui.countryselection.country.nl.logo.alt=Netherlands-eID +gui.countryselection.country.pl=Poland +gui.countryselection.country.pl.logo.alt=Poland-eID +gui.countryselection.country.pt=Portugal +gui.countryselection.country.pt.logo.alt=Portugal-eID +gui.countryselection.country.si=Slovenia +gui.countryselection.country.si.logo.alt=Slovenia-eID +gui.countryselection.country.es=SSpain +gui.countryselection.country.es.logo.alt=Spain-eID + +gui.countryselection.country.bg=Bulgaria +gui.countryselection.country.bg.logo.alt=Bulgaria-eID +gui.countryselection.country.dk=Denmark +gui.countryselection.country.dk.logo.alt=Denmark-eID +gui.countryselection.country.fi=Finland +gui.countryselection.country.fi.logo.alt=Finland-eID +gui.countryselection.country.fr=France +gui.countryselection.country.fr.logo.alt=France-eID +gui.countryselection.country.gr=Greece +gui.countryselection.country.gr.logo.alt=Greece-eID +gui.countryselection.country.hu=Hungary +gui.countryselection.country.hu.logo.alt=Hungary-eID +gui.countryselection.country.ir=Ireland +gui.countryselection.country.ir.logo.alt=Ireland-eID +gui.countryselection.country.lu=Luxembourg +gui.countryselection.country.lu.logo.alt=Luxembourg-eID +gui.countryselection.country.mt=Malta +gui.countryselection.country.mt.logo.alt=Malta-eID +gui.countryselection.country.ro=Romania +gui.countryselection.country.ro.logo.alt=Romania-eID +gui.countryselection.country.sk=Slovakia +gui.countryselection.country.sk.logo.alt=Slovakia-eID +gui.countryselection.country.se=Sweden +gui.countryselection.country.se.logo.alt=Sweden-eID +gui.countryselection.country.uk=United Kingdom +gui.countryselection.country.uk.logo.alt=United Kingdom-eID + +gui.countryselection.country.testcountry=TestCountry +gui.countryselection.country.testcountry.logo.alt=Testcountry-eID + +gui.countryselection.mode.prod=Production +gui.countryselection.mode.qs=QS +gui.countryselection.mode.test=Test +gui.countryselection.mode.dev=Development + +##Other Login Methods page +gui.otherlogin.title=eIDAS-Login Other Login Methods +gui.otherlogin.header.selection=Select an alternative login method +gui.otherlogin.hs=Mobile Signature ("Handy-Signatur") +gui.otherlogin.eidas=Alternative eIDAS ID +gui.otherlogin.none=No alternative login methods +gui.otherlogin.cancel=Cancel + +##Austrian Residency page +gui.residency.title=Austrian Residency +gui.residency.header.selection=Search for your Austrian Residency +gui.residency.header.help=You can search for the address that you have been registered at in the past. Please enter a \ + postcode, municipality or village first to start the search. +gui.residency.header.inputinvalid=Be sure to enter a value for Municipality or Village +gui.residency.cancel=Cancel +gui.residency.search=Search +gui.residency.clear=Clear +gui.residency.proceed=Proceed +gui.residency.updated=Updated your input +gui.residency.found=Found {0} results +gui.residency.unique=Unique result found, please proceed +gui.residency.error=Error on Backend Call +gui.residency.apply=Apply +gui.residency.input.postleitzahl=Postcode +gui.residency.input.municipality=Municipality +gui.residency.input.village=Village +gui.residency.input.street=Street +gui.residency.input.number=Number \ No newline at end of file diff --git a/connector/src/main/resources/properties/messages_de.properties b/connector/src/main/resources/properties/messages_de.properties new file mode 100644 index 00000000..c0f3c9a5 --- /dev/null +++ b/connector/src/main/resources/properties/messages_de.properties @@ -0,0 +1,128 @@ +####### GUI elements #### +gui.general.language.selection.title=Sprachauswahl +gui.general.language.selection.de=Deutsch +gui.general.language.selection.en=English + +##Errorpage template +gui.errorpage.msg.title=Es ist ein Fehler aufgetreten +gui.errorpage.msg.information=Der Anmeldevorgang wurde aufgrund eines Fehlers beendet: +gui.errorpage.msg.errorcode=Fehlercode : +gui.errorpage.msg.errormsg=Fehlermeldung: +gui.errorpage.msg.stacktrace=Stacktrace: + +##Country-Selection page +gui.countryselection.title=eIDAS-Login Länderauswahl +gui.countryselection.logo.bmi.alt=Logo BMI +gui.countryselection.link.bmi=Startseite BMI +gui.countryselection.header1=Bundesministerium für Inneres +gui.countryselection.header2=Zentraler eIDAS Knoten der Republik Österreich +gui.countryselection.header3=Betrieben durch das Bundesministerium für Inneres +gui.countryselection.header.selection=Wählen Sie Ihr Land +gui.countryselection.cancel=Abbrechen +gui.countryselection.notsupportedinfo=Wenn Sie Ihr Land in dieser Aufzählung nicht entdecken, dann wird Ihre elektronische Identität (eID) leider noch nicht unterstützt. + +gui.countryselection.infos.general.header=Information zur Anmeldung über Europäische eIDs +gui.countryselection.infos.general.link.1=eIDAS-Verordnung der Europäischen Union +gui.countryselection.infos.general.link.2=Ergänzungsregister für natürliche Personen (ERnP) +gui.countryselection.infos.general.part.1=Sie befinden sich am zentralen eIDAS-Knoten der Republik Österreich. Dieser wird vom Österreichischen +gui.countryselection.infos.general.part.2=betrieben und ermöglicht eine Anmeldungen zu österreichischen Online-Anwendungen unter Verwendung einer elektronischen Identität (eID) anderer EU-Mitgliedstaaten. Sie wurden hierher weitergeleitet, da Sie in einer Online-Anwendung eine Anmeldung via EU-Login initiiert haben. +gui.countryselection.infos.general.part.3=Der zentrale eIDAS-Knoten der Republik Österreich ermöglicht Ihnen eine Anmeldung zu österreichischen Online-Anwendungen mit der eID Ihres Herkunftsstaates. Damit werden die Vorgaben der +gui.countryselection.infos.general.part.4=erfüllt, die eine staatenübergreifende Akzeptanz nationaler eIDs vorsieht. Die wechselseitige Anerkennung nationaler eIDs erfolgt in der EU schrittweise. Aktuell unterstützt der zentrale eIDAS-Knoten der Republik Österreich Anmeldungen mit den eID-Systemen der oben angeführten Mitgliedstaaten. Diese Liste wird laufend erweitert. +gui.countryselection.infos.general.part.5=Nachdem Sie auf dieser Seite einen Mitgliedsstaat ausgewählt haben, werden Sie an die gewohnte Anmeldeumgebung des jeweiligen Mitgliedsstaats weitergeleitet. Dort können Sie sich mit Ihrer eID wie gewohnt anmelden. Haben Sie den Anmeldeprozess erfolgreich abgeschlossen, werden Sie automatisch an die Online-Anwendung, von der aus Sie auf diese Auswahlseite gelangt sind, weitergeleitet und dort mit den Identitätsdaten Ihrer eID angemeldet. Gleichzeitig werden Sie bei Ihrer ersten Anmeldung auf diesem Weg mit Ihren eID-Daten in das österreichische +gui.countryselection.infos.general.part.6=eingetragen. Damit wird sichergestellt, dass Sie auch im Rahmen zukünftiger Anmeldeprozesse zu österreichischen Online-Anwendungen erfolgreich und eindeutig identifiziert werden können. + + +gui.countryselection.country.be=Belgien +gui.countryselection.country.be.logo.alt=Belgische-eID +gui.countryselection.country.hr=Kroatien +gui.countryselection.country.hr.logo.alt=Kroatische-eID +gui.countryselection.country.cy=Zypern +gui.countryselection.country.cy.logo.alt=Zypriotische-eID +gui.countryselection.country.cz=Tschechische Republik +gui.countryselection.country.cz.logo.alt=Tschechische Republik-eID +gui.countryselection.country.ee=Estland +gui.countryselection.country.ee.logo.alt=Estländische-eID +gui.countryselection.country.de=Deutschland +gui.countryselection.country.de.logo.alt=Deutsche-eID +gui.countryselection.country.is=Island +gui.countryselection.country.is.logo.alt=Isländische-eID +gui.countryselection.country.it=Italien +gui.countryselection.country.it.logo.alt=Italienische-eID +gui.countryselection.country.lt=Litauen +gui.countryselection.country.lt.logo.alt=Litauische-eID +gui.countryselection.country.lv=Lettland +gui.countryselection.country.lv.logo.alt=Lettländische-eID +gui.countryselection.country.nl=Niederlande +gui.countryselection.country.nl.logo.alt=Niederländische-eID +gui.countryselection.country.pl=Polen +gui.countryselection.country.pl.logo.alt=Polnische-eID +gui.countryselection.country.pt=Portugal +gui.countryselection.country.pt.logo.alt=Portugisische-eID +gui.countryselection.country.si=Slovenien +gui.countryselection.country.si.logo.alt=Slovenische-eID +gui.countryselection.country.es=Spanien +gui.countryselection.country.es.logo.alt=Spanische-eID + +gui.countryselection.country.bg=Bulgarien +gui.countryselection.country.bg.logo.alt=Bulgarische-eID +gui.countryselection.country.dk=Dänemark +gui.countryselection.country.dk.logo.alt=Dänische-eID +gui.countryselection.country.fi=Finnland +gui.countryselection.country.fi.logo.alt=Finische-eID +gui.countryselection.country.fr=Frankreich +gui.countryselection.country.fr.logo.alt=Französiche-eID +gui.countryselection.country.gr=Grichenland +gui.countryselection.country.gr.logo.alt=Grichische-eID +gui.countryselection.country.hu=Ungarn +gui.countryselection.country.hu.logo.alt=Ungarische-eID +gui.countryselection.country.ir=Irland +gui.countryselection.country.ir.logo.alt=Irische-eID +gui.countryselection.country.lu=Luxenburg +gui.countryselection.country.lu.logo.alt=Luxenburgische-eID +gui.countryselection.country.mt=Malta +gui.countryselection.country.mt.logo.alt=Malta-eID +gui.countryselection.country.ro=Romänien +gui.countryselection.country.ro.logo.alt=Romänische-eID +gui.countryselection.country.sk=Slovakei +gui.countryselection.country.sk.logo.alt=Slovakische-eID +gui.countryselection.country.se=Schweden +gui.countryselection.country.se.logo.alt=Schwedische-eID +gui.countryselection.country.uk=Großbritanien +gui.countryselection.country.uk.logo.alt=Britische-eID + +gui.countryselection.country.testcountry=Testland +gui.countryselection.country.testcountry.logo.alt=Testland-eID + +gui.countryselection.mode.prod=Produktion +gui.countryselection.mode.qs=Qualitätsicherung +gui.countryselection.mode.test=Test +gui.countryselection.mode.dev=Development + +##Other Login Methods page +gui.otherlogin.title=eIDAS-Login Alternative Anmeldemethoden +gui.otherlogin.header.selection=Wählen Sie eine alternative Anmeldemethode +gui.otherlogin.hs=Handy-Signatur +gui.otherlogin.eidas=Alternativer eIDAS Login +gui.otherlogin.none=Keine +gui.otherlogin.cancel=Abbrechen + +##Austrian Residency page +gui.residency.title=Österreichischer Wohnsitz +gui.residency.header.selection=Suche nach Österreichischem Wohnsitz +gui.residency.header.help=Hier können Sie nach einem Wohnsitze in Österreich suchen. Bitte geben Sie zuerst eine \ + Postleitzahl, Gemeinde oder Ortschaft ein um die Suche zu starten. +gui.residency.header.inputinvalid=Bitte geben Sie einen Wert für Gemeinde oder Ortschaft ein +gui.residency.cancel=Abbrechen +gui.residency.search=Suche +gui.residency.clear=Löschen +gui.residency.proceed=Fortfahren +gui.residency.updated=Eingabe aktualisiert +gui.residency.found={0} Ergebnisse gefunden +gui.residency.unique=Eindeutiges Ergebnis gefunden, bitte fortfahren +gui.residency.error=Fehler bei Addresssuche +gui.residency.apply=Übernehmen +gui.residency.input.postleitzahl=PLZ +gui.residency.input.municipality=Gemeinde +gui.residency.input.village=Ortschaft +gui.residency.input.street=Straße +gui.residency.input.number=Nummer \ 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 b15234eb..e196cd31 100644 --- a/connector/src/main/resources/templates/countrySelection.html +++ b/connector/src/main/resources/templates/countrySelection.html @@ -3,254 +3,267 @@ xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="fragments/base" th:with="lang=${#locale.language}" th:lang="${lang}"> - - - - - - eIDAS-Login Länderauswahl + + + + + eIDAS-Login Länderauswahl - -
-
- LanguageSelectionBlock -
- -

Select your country

-
- -
- Belgium-eID - - - - - -
- Bulgaria-eID - - - - - -
- Croatia-eID - - - - - -
- Cyprus-eID - - - - - -
- CzechRepublic-eID - - - - - -
- Denmark-eID - - - - - -
- Germany-eID - - - - - -
- Estonia-eID - - - - - -
- Finland-eID - - - - - -
- France-eID - - - - - -
- Greece-eID - - - - - -
- Hungary-eID - - - - - -
- Ireland-eID - - - - - -
- Ireland-eID - - - - - -
- Italy-eID - - - - - -
- Latvia-eID - - - - - -
- Luxembourg-eID - - - - - -
- Luxembourg-eID - - - - - -
- Malta-eID - - - - - -
- Netherlands-eID - - - - - -
- Poland-eID - - - - - -
- Portugal-eID - - - - - -
- Romania-eID - - - - - -
- Slovakia-eID - - - - - -
- Slovenia-eID - - - - - -
- Spain-eID - - - - - -
- Sweden-eID - - - - - -
- UnitedKingdom-eID - - - - - -
- - - - +
+
+ +
+
+
+
+

Zentraler eIDAS Knoten der Republik Österreich

+

Betrieben durch das Bundesministerium für Inneres

+
+ +

Wählen Sie Ihr Land / Select your country

+ +
+
+ Germany-eID + + + + + + +
+ Belgium-eID + + + +
+ Bulgaria-eID + + + +
+ Croatia-eID + + + +
+ Cyprus-eID + + + +
+ CzechRepublic-eID + + + +
+ Denmark-eID + + + +
+ Estonia-eID + + + +
+ Finland-eID + + + +
+ France-eID + + + +
+ Greece-eID + + + +
+ Hungary-eID + + + +
+ Ireland-eID + + + +
+ Italy-eID + + + + +
+ Latvia-eID + + + +
+ Luxembourg-eID + + + +
+ Malta-eID + + + +
+ Poland-eID + + + +
+ Portugal-eID + + + +
+ Romania-eID + + + +
+ Slovakia-eID + + + +
+ Slovenia-eID + + + +
+ Spain-eID + + + + +
+ Sweden-eID + + + +
+ TheNetherlands-eID + + + +
+ UnitedKingdom-eID + + + +
+ + +
+ + + + + +

Wenn Sie Ihr Land in dieser Aufzählung nicht entdecken + ...

+ +

Information zur Anmeldung über Europäische eIDs

+

+ first part + Bundesministerium + für Inneres + second part +

+ +

+ third part + eIDAS-Verordnung der Europäischen Union + fourth part +

+ +

fived part + + sixed part +

+ +
+
+ +
+
diff --git a/connector/src/main/resources/templates/eidas_node_forward.html b/connector/src/main/resources/templates/eidas_node_forward.html new file mode 100644 index 00000000..186937d7 --- /dev/null +++ b/connector/src/main/resources/templates/eidas_node_forward.html @@ -0,0 +1,36 @@ + + + + + + + + +
Your login is being processed. Thank you for + waiting.
+ +
+
+ +
+ + + + + \ No newline at end of file diff --git a/connector/src/main/resources/templates/other_login_method.html b/connector/src/main/resources/templates/other_login_method.html new file mode 100644 index 00000000..c233c5c4 --- /dev/null +++ b/connector/src/main/resources/templates/other_login_method.html @@ -0,0 +1,77 @@ + + + + + + + eIDAS-Login Other Login Methods + + +
+
+ + +
+
+
+
+

Zentraler eIDAS Knoten der Republik Österreich

+

Betrieben durch das Bundesministerium für Inneres

+
+ +

Select an alternative login method

+ +
+
+ + + + +
+ + + + +
+ + + + +
+ + +
+ + + + + +
+
+ +
+
+ + diff --git a/connector/src/main/resources/templates/residency.html b/connector/src/main/resources/templates/residency.html index b434b9f9..8192a068 100644 --- a/connector/src/main/resources/templates/residency.html +++ b/connector/src/main/resources/templates/residency.html @@ -3,7 +3,6 @@ xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="fragments/base" th:with="lang=${#locale.language}" th:lang="${lang}"> - @@ -102,17 +101,41 @@ -
-
- LanguageSelectionBlock +
+
+ + +
+
+
+
+

Zentraler eIDAS Knoten der Republik Österreich

+

Betrieben durch das Bundesministerium für Inneres

-

Search your Austrian Residency

+

Search your Austrian Residency

-
Please enter a Municipality or Village first
+
Please enter a postcode, municipality or village first
@@ -181,5 +204,9 @@
+
+ +
+
diff --git a/connector/src/main/webapp/css/basic.css b/connector/src/main/webapp/css/basic.css deleted file mode 100644 index 4bec163a..00000000 --- a/connector/src/main/webapp/css/basic.css +++ /dev/null @@ -1,4 +0,0 @@ -@charset "utf-8"; - .bgTrans { - background-color:transparent - } \ No newline at end of file diff --git a/connector/src/main/webapp/js/js_country.js b/connector/src/main/webapp/js/js_country.js new file mode 100644 index 00000000..5dcea90e --- /dev/null +++ b/connector/src/main/webapp/js/js_country.js @@ -0,0 +1,42 @@ +function clickCountryFlag(element) { + if (!element) return false; + + var form = element.target.closest("form"); + + if (!form) return false; + + form.submit(); + return false; +} + + +/* Set JS events by EventListener to prevent problems with CSP*/ +document.addEventListener("DOMContentLoaded", function(event) { + + /* Element.closest polyfill - https://developer.mozilla.org/en-US/docs/Web/API/Element/closest License: public domain*/ + if (!Element.prototype.matches) + Element.prototype.matches = Element.prototype.msMatchesSelector || + Element.prototype.webkitMatchesSelector; + + if (!Element.prototype.closest) + Element.prototype.closest = function(s) { + var el = this; + if (!document.documentElement.contains(el)) return null; + do { + if (el.matches(s)) return el; + el = el.parentElement || el.parentNode; + } while (el !== null && el.nodeType === 1); + return null; + }; + + /* set Click events by EventListener to prevent JavaScript in HTML which can be a problem with CSP*/ + var allFlags = document.getElementsByClassName("countryimage"); + for (i=0;i idp = entity.getRoleDescriptors(IDPSSODescriptor.DEFAULT_ELEMENT_NAME); Assert.assertEquals("IDP descr. size", 1, idp.size()); Assert.assertEquals("IDP descr. endpoints", 2, idp.get(0).getEndpoints().size()); Assert.assertEquals("IDP descr. keyDescr", 1, idp.get(0).getKeyDescriptors().size()); - + } - + } diff --git a/connector/src/test/resources/config/properties/messages.properties b/connector/src/test/resources/config/properties/messages.properties index 2f99d892..3f662ef9 100644 --- a/connector/src/test/resources/config/properties/messages.properties +++ b/connector/src/test/resources/config/properties/messages.properties @@ -84,8 +84,8 @@ gui.countryselection.country.ro=Romania gui.countryselection.country.ro.logo.alt=Romania-eID gui.countryselection.country.sk=Slovakia gui.countryselection.country.sk.logo.alt=Slovakia-eID -gui.countryselection.country.sw=Sweden -gui.countryselection.country.sw.logo.alt=Sweden-eID +gui.countryselection.country.se=Sweden +gui.countryselection.country.se.logo.alt=Sweden-eID gui.countryselection.country.uk=United Kingdom gui.countryselection.country.uk.logo.alt=United Kingdom-eID @@ -97,17 +97,19 @@ gui.countryselection.mode.qs=QS gui.countryselection.mode.test=Test gui.countryselection.mode.dev=Development +##Other Login Methods page +gui.otherlogin.title=eIDAS-Login Other Login Methods +gui.otherlogin.header.selection=Select an alternative login method +gui.otherlogin.hs=Mobile Signature ("Handy-Signatur") +gui.otherlogin.eidas=Alternative eIDAS ID +gui.otherlogin.none=No alternative login methods +gui.otherlogin.cancel=Cancel ##Austrian Residency page gui.residency.title=Austrian Residency -gui.residency.logo.bmi.alt=Logo BMI -gui.residency.link.bmi=Mainpage BMI -gui.residency.header1=Federal Ministry of Internal Affairs -gui.residency.header2=Austrian Central eIDAS Node -gui.residency.header3=Operated by Federal Ministry of Internal Affairs gui.residency.header.selection=Search for your Austrian Residency gui.residency.header.help=You can search for the address that you have been registered at in the past. Please enter a \ - Municipality or Village first to start the search. + postcode, municipality or village first to start the search. gui.residency.header.inputinvalid=Be sure to enter a value for Municipality or Village gui.residency.cancel=Cancel gui.residency.search=Search diff --git a/connector/src/test/resources/config/properties/messages_de.properties b/connector/src/test/resources/config/properties/messages_de.properties index ead751d0..c0f3c9a5 100644 --- a/connector/src/test/resources/config/properties/messages_de.properties +++ b/connector/src/test/resources/config/properties/messages_de.properties @@ -85,8 +85,8 @@ gui.countryselection.country.ro=Romänien gui.countryselection.country.ro.logo.alt=Romänische-eID gui.countryselection.country.sk=Slovakei gui.countryselection.country.sk.logo.alt=Slovakische-eID -gui.countryselection.country.sw=Schweden -gui.countryselection.country.sw.logo.alt=Schwedische-eID +gui.countryselection.country.se=Schweden +gui.countryselection.country.se.logo.alt=Schwedische-eID gui.countryselection.country.uk=Großbritanien gui.countryselection.country.uk.logo.alt=Britische-eID @@ -98,17 +98,19 @@ gui.countryselection.mode.qs=Qualitätsicherung gui.countryselection.mode.test=Test gui.countryselection.mode.dev=Development +##Other Login Methods page +gui.otherlogin.title=eIDAS-Login Alternative Anmeldemethoden +gui.otherlogin.header.selection=Wählen Sie eine alternative Anmeldemethode +gui.otherlogin.hs=Handy-Signatur +gui.otherlogin.eidas=Alternativer eIDAS Login +gui.otherlogin.none=Keine +gui.otherlogin.cancel=Abbrechen ##Austrian Residency page gui.residency.title=Österreichischer Wohnsitz -gui.residency.logo.bmi.alt=Logo BMI -gui.residency.link.bmi=Startseite BMI -gui.residency.header1=Bundesministerium für Inneres -gui.residency.header2=Zentraler eIDAS Knoten der Republik Österreich -gui.residency.header3=Betrieben durch das Bundesministerium für Inneres gui.residency.header.selection=Suche nach Österreichischem Wohnsitz gui.residency.header.help=Hier können Sie nach einem Wohnsitze in Österreich suchen. Bitte geben Sie zuerst eine \ - Gemeinde oder Ortschaft ein um die Suche zu starten. + Postleitzahl, Gemeinde oder Ortschaft ein um die Suche zu starten. gui.residency.header.inputinvalid=Bitte geben Sie einen Wert für Gemeinde oder Ortschaft ein gui.residency.cancel=Abbrechen gui.residency.search=Suche diff --git a/connector/src/test/resources/config/templates/countrySelection.html b/connector/src/test/resources/config/templates/countrySelection.html index 2483030b..e196cd31 100644 --- a/connector/src/test/resources/config/templates/countrySelection.html +++ b/connector/src/test/resources/config/templates/countrySelection.html @@ -4,233 +4,266 @@ layout:decorator="fragments/base" th:with="lang=${#locale.language}" th:lang="${lang}"> - - - - eIDAS-Login Länderauswahl - - - + + + + + eIDAS-Login Länderauswahl -
+
- - + +
-
-
+
+
-

Zentraler eIDAS Knoten der Republik Österreich

-

Betrieben durch das Bundesministerium für Inneres

+

Zentraler eIDAS Knoten der Republik Österreich

+

Betrieben durch das Bundesministerium für Inneres

Wählen Sie Ihr Land / Select your country

- -
- Germany-eID - - - - +
+ Germany-eID + + + + + + +
+ Belgium-eID + + + +
+ Bulgaria-eID + + + +
+ Croatia-eID + + + +
+ Cyprus-eID + + + +
+ CzechRepublic-eID + + + +
+ Denmark-eID + + + +
+ Estonia-eID + + + +
+ Finland-eID + + + +
+ France-eID + + + +
+ Greece-eID + + + +
+ Hungary-eID + + + +
+ Ireland-eID + + + +
+ Italy-eID + + + + +
+ Latvia-eID + + + +
+ Luxembourg-eID + + + +
+ Malta-eID + + + +
+ Poland-eID + + + +
+ Portugal-eID + + + +
+ Romania-eID + + + +
+ Slovakia-eID + + + +
+ Slovenia-eID + + + +
+ Spain-eID + + + + +
+ Sweden-eID + + + +
+ TheNetherlands-eID + + + +
+ UnitedKingdom-eID + +
-
- - - + + + + -

Wenn Sie Ihr Land in dieser Aufzählung nicht entdecken ...

- -

Information zur Anmeldung über Europäische eIDs

-

- first part - Bundesministerium für Inneres - second part -

- -

- third part - eIDAS-Verordnung der Europäischen Union - fourth part -

- -

fived part - - sixed part -

- -
-
- -
-
+

Wenn Sie Ihr Land in dieser Aufzählung nicht entdecken + ...

+ +

Information zur Anmeldung über Europäische eIDs

+

+ first part + Bundesministerium + für Inneres + second part +

+ +

+ third part + eIDAS-Verordnung der Europäischen Union + fourth part +

+ +

fived part + + sixed part +

+ +
+
+ +
+
diff --git a/connector/src/test/resources/config/templates/countrySelection_example.html b/connector/src/test/resources/config/templates/countrySelection_example.html deleted file mode 100644 index 2128f14d..00000000 --- a/connector/src/test/resources/config/templates/countrySelection_example.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - eIDAS-Login Länderauswahl - - - -
-
- LanguageSelectionBlock -
- -

Select your country

-
- -
- Germany-eID - - - - - - -
- Belgium-eID - - - -
- Bulgaria-eID - - - -
- Croatia-eID - - - -
- Cyprus-eID - - - -
- CzechRepublic-eID - - - -
- Denmark-eID - - - -
- Estonia-eID - - - -
- Finland-eID - - - -
- France-eID - - - -
- Greece-eID - - - -
- Hungary-eID - - - -
- Ireland-eID - - - -
- Italy-eID - - - - -
- Latvia-eID - - - -
- Luxembourg-eID - - - -
- Malta-eID - - - -
- Poland-eID - - - -
- Portugal-eID - - - -
- Romania-eID - - - -
- Slovakia-eID - - - -
- Slovenia-eID - - - -
- Spain-eID - - - - -
- Sweden-eID - - - -
- TheNetherlands-eID - - - -
- UnitedKingdom-eID - - - -
- -
- - - - - -
- - diff --git a/connector/src/test/resources/config/templates/error.html b/connector/src/test/resources/config/templates/error.html new file mode 100644 index 00000000..e2c605c7 --- /dev/null +++ b/connector/src/test/resources/config/templates/error.html @@ -0,0 +1,53 @@ + + + + + + +An error arise ... + + + +
+
+
+

Error Header

+ +
+

Error Information

+
+

Code :

+

Msg :

+
+
+ +
+

Timestamp:

+
+
+

Error:

+
+
+

Status:

+
+
+

Message:

+
+
+

Exception:

+
+
+

Trace:

+
+
+

Stacktrace:

+
+ +
+
+ + \ No newline at end of file diff --git a/connector/src/test/resources/config/templates/other_login_method.html b/connector/src/test/resources/config/templates/other_login_method.html index 56c368c6..c233c5c4 100644 --- a/connector/src/test/resources/config/templates/other_login_method.html +++ b/connector/src/test/resources/config/templates/other_login_method.html @@ -7,179 +7,7 @@ - eIDAS-Login Login-Auswahl - - - + eIDAS-Login Other Login Methods
@@ -198,8 +26,10 @@
    -
  • Startseite - BMI
  • +
  • + Startseite + BMI +
  • @@ -209,35 +39,31 @@

    Betrieben durch das Bundesministerium für Inneres

    -

    Wählen Sie Ihr Land / Select your country

    +

    Select an alternative login method

    -
    - +
    - + th:attr="value=#{gui.otherlogin.hs}"/> +
    - - + +
    - - + + -
    + th:attr="value=#{gui.otherlogin.cancel}"> diff --git a/connector/src/test/resources/config/templates/residency.html b/connector/src/test/resources/config/templates/residency.html index 99de851a..44cf17a4 100644 --- a/connector/src/test/resources/config/templates/residency.html +++ b/connector/src/test/resources/config/templates/residency.html @@ -3,7 +3,6 @@ xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="fragments/base" th:with="lang=${#locale.language}" th:lang="${lang}"> - @@ -102,17 +101,41 @@ -
    -
    - LanguageSelectionBlock +
    +
    + + +
    +
    +
    +
    +

    Zentraler eIDAS Knoten der Republik Österreich

    +

    Betrieben durch das Bundesministerium für Inneres

    -

    Search your Austrian Residency

    +

    Search your Austrian Residency

    -
    Please enter a Municipality or Village first
    +
    Please enter a postcode, municipality or village first
    @@ -181,5 +204,9 @@
    +
    + +
    +
    diff --git a/connector/src/test/resources/config/webcontent/css/css_country.css b/connector/src/test/resources/config/webcontent/css/css_country.css index 4091955f..bc575c90 100644 --- a/connector/src/test/resources/config/webcontent/css/css_country.css +++ b/connector/src/test/resources/config/webcontent/css/css_country.css @@ -1,137 +1,158 @@ @charset "utf-8"; - body { - background-image: none; - margin: 0px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - } - #page { - padding-top: 2%; - padding-left: 10%; - } - - #country { - display: flex; - flex-direction: row; - flex-wrap: wrap; - align-items: center; - } - - .block { - display: flex; - flex-direction: row; - flex-wrap: wrap; - cursor: pointer; - text-decoration: none; - padding-right:2%; - width: 250px; - } - - .countryimage { - width:50px; - height:50px; - padding-right: 2%; - padding-bottom: 4%; - } - - input[type=button], input[type=submit], input[type=reset] { - display:flex; - background-color:transparent; - border:none; - color: black; - text-decoration: none; - cursor: pointer; - } - #testEnvironment { - border: none; - color: black; - padding: 10px 20px; - text-decoration: none; - margin: 4px 2px; - height: 3%; - display: inline-block; - vertical-align: middle; - width: 40%; - } - #button{ - background-color: transparent; - border:none; - } - div.header { - background-color: #e9ecef; - padding-top: 28px; - padding-left: 137px; - padding-right: 137px; - padding-bottom: 12px; - } - div.titlebar { - padding: 0px; - } - div.titlebar div { - } - .hidden { - display: none; - } - ul.nav_oben { - padding: 0px; - margin: 0px; - text-align: right; - text-transform: uppercase; - } - li { - display: inline-block; - } - div.header a { - text-decoration: none; - color: black; - } - a { - text-decoration: none; - color: #a22c1c; - } - .content { - padding-left: 137px; - padding-right: 137px; - } - div.subtitle h1 { - padding: 0px; - margin: 0px; - font-size: 130%; - align: right; - } - div.subtitle h2 { - padding: 0px; - margin: 0px; - font-size: 115%; - } - footer { - position: fixed; - left: 0; - padding-left: 137px; - padding-right: 137px; - padding-top: 1em; - bottom: 0; - width: 100%; - height: 2em; - background-color: rgb(162,44,28); - color: white; - } - .float { - float: left; - } - .floatright { - float: right; - } - .copyright { - width: 66%; - font-size: 80%; - } - #countries,#country { - padding-bottom: 40px; - } - input[type=submit] { - width: inherit; - /* text-align: left; */ - } - form { - justify-content: center; - } \ No newline at end of file +body { + background-image: none; + margin: 0px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +#page { + padding-top: 2%; + padding-left: 10%; +} + +#country { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: center; +} + +.block { + display: flex; + flex-direction: row; + flex-wrap: wrap; + cursor: pointer; + text-decoration: none; + padding-right: 2%; + width: 250px; +} + +.countryimage { + width: 50px; + height: 50px; + padding-right: 2%; + padding-bottom: 4%; +} + +input[type=button], input[type=submit], input[type=reset] { + display: flex; + background-color: transparent; + border: none; + color: black; + text-decoration: none; + cursor: pointer; +} + +#testEnvironment { + border: none; + color: black; + padding: 10px 20px; + text-decoration: none; + margin: 4px 2px; + height: 3%; + display: inline-block; + vertical-align: middle; + width: 40%; +} + +#button { + background-color: transparent; + border: none; +} + +div.header { + background-color: #e9ecef; + padding-top: 28px; + padding-left: 137px; + padding-right: 137px; + padding-bottom: 12px; +} + +div.titlebar { + padding: 0px; +} + +div.titlebar div { +} + +.hidden { + display: none; +} + +ul.nav_oben { + padding: 0px; + margin: 0px; + text-align: right; + text-transform: uppercase; +} + +li { + display: inline-block; +} + +div.header a { + text-decoration: none; + color: black; +} + +a { + text-decoration: none; + color: #a22c1c; +} + +.content { + padding-left: 137px; + padding-right: 137px; +} + +div.subtitle h1 { + padding: 0px; + margin: 0px; + font-size: 130%; + align: right; +} + +div.subtitle h2 { + padding: 0px; + margin: 0px; + font-size: 115%; +} + +footer { + position: fixed; + left: 0; + padding-left: 137px; + padding-right: 137px; + padding-top: 1em; + bottom: 0; + width: 100%; + height: 2em; + background-color: rgb(162, 44, 28); + color: white; +} + +.float { + float: left; +} + +.floatright { + float: right; +} + +.copyright { + width: 66%; + font-size: 80%; +} + +#countries, #country { + padding-bottom: 40px; +} + +input[type=submit] { + width: inherit; + /* text-align: left; */ +} + +form { + justify-content: center; +} \ No newline at end of file diff --git a/connector/src/test/resources/config/webcontent/js/js_country.js b/connector/src/test/resources/config/webcontent/js/js_country.js index 5dcea90e..9baa0d0a 100644 --- a/connector/src/test/resources/config/webcontent/js/js_country.js +++ b/connector/src/test/resources/config/webcontent/js/js_country.js @@ -1,41 +1,41 @@ function clickCountryFlag(element) { - if (!element) return false; + if (!element) return false; - var form = element.target.closest("form"); + var form = element.target.closest("form"); - if (!form) return false; + if (!form) return false; - form.submit(); - return false; + form.submit(); + return false; } /* Set JS events by EventListener to prevent problems with CSP*/ -document.addEventListener("DOMContentLoaded", function(event) { - - /* Element.closest polyfill - https://developer.mozilla.org/en-US/docs/Web/API/Element/closest License: public domain*/ - if (!Element.prototype.matches) - Element.prototype.matches = Element.prototype.msMatchesSelector || - Element.prototype.webkitMatchesSelector; - - if (!Element.prototype.closest) - Element.prototype.closest = function(s) { - var el = this; - if (!document.documentElement.contains(el)) return null; - do { - if (el.matches(s)) return el; - el = el.parentElement || el.parentNode; - } while (el !== null && el.nodeType === 1); - return null; - }; - - /* set Click events by EventListener to prevent JavaScript in HTML which can be a problem with CSP*/ - var allFlags = document.getElementsByClassName("countryimage"); - for (i=0;i Date: Tue, 7 Dec 2021 08:33:36 +0100 Subject: Rework styling of residency search template --- basicConfig/properties/messages.properties | 3 +- basicConfig/properties/messages_de.properties | 3 +- basicConfig/templates/residency.html | 119 ++++++++++++++------- .../main/resources/properties/messages.properties | 3 +- .../resources/properties/messages_de.properties | 3 +- .../src/main/resources/templates/residency.html | 119 ++++++++++++++------- .../config/properties/messages.properties | 3 +- .../config/properties/messages_de.properties | 3 +- .../test/resources/config/templates/residency.html | 119 ++++++++++++++------- 9 files changed, 243 insertions(+), 132 deletions(-) (limited to 'connector/src/test/resources/config/templates/residency.html') diff --git a/basicConfig/properties/messages.properties b/basicConfig/properties/messages.properties index 5f24f0da..6674d0bd 100644 --- a/basicConfig/properties/messages.properties +++ b/basicConfig/properties/messages.properties @@ -130,10 +130,9 @@ gui.residency.search=Search gui.residency.clear=Clear gui.residency.proceed=Proceed gui.residency.updated=Updated your input -gui.residency.found=Found {0} results +gui.residency.found=Found {0} results, click on one result to refine your search gui.residency.unique=Unique result found, please proceed gui.residency.error=Error on Backend Call -gui.residency.apply=Apply gui.residency.input.postleitzahl=Postcode gui.residency.input.municipality=Municipality gui.residency.input.village=Village diff --git a/basicConfig/properties/messages_de.properties b/basicConfig/properties/messages_de.properties index 95489b32..9c496903 100644 --- a/basicConfig/properties/messages_de.properties +++ b/basicConfig/properties/messages_de.properties @@ -128,10 +128,9 @@ gui.residency.search=Suche gui.residency.clear=Löschen gui.residency.proceed=Fortfahren gui.residency.updated=Eingabe aktualisiert -gui.residency.found={0} Ergebnisse gefunden +gui.residency.found={0} Ergebnisse gefunden, klicken Sie auf ein Ergebnis um die Suche zu verfeinern gui.residency.unique=Eindeutiges Ergebnis gefunden, bitte fortfahren gui.residency.error=Fehler bei Addresssuche -gui.residency.apply=Übernehmen gui.residency.input.postleitzahl=PLZ gui.residency.input.municipality=Gemeinde gui.residency.input.village=Ortschaft diff --git a/basicConfig/templates/residency.html b/basicConfig/templates/residency.html index 8192a068..7a832aea 100644 --- a/basicConfig/templates/residency.html +++ b/basicConfig/templates/residency.html @@ -6,8 +6,8 @@ - - Österreichischer Wohnsitz @@ -135,7 +176,8 @@
    -
    Please enter a postcode, municipality or village first
    +

    Please enter a postcode, municipality or village first

    +
    @@ -156,38 +198,42 @@
    -
    - -
    -
    - -
    -
    - -
    -
    - +
    +
    + + + + + +
    + +
    +
    -

    +

    -
    Postleitzahl Municipality Village Street
    +
    - + - - + @@ -196,13 +242,6 @@ -
    - - - -
    -