diff options
4 files changed, 150 insertions, 137 deletions
| diff --git a/basicConfig/templates/other_login_method.html b/basicConfig/templates/other_login_method.html index c233c5c4..ea15864e 100644 --- a/basicConfig/templates/other_login_method.html +++ b/basicConfig/templates/other_login_method.html @@ -8,6 +8,16 @@      <meta name="viewport" content="width=device-width, initial-scale=1">      <link rel="stylesheet" href="$contextPath/static/css/css_country.css" th:href="@{/static/css/css_country.css}"/>      <title th:text="#{gui.otherlogin.title}">eIDAS-Login Other Login Methods</title> +    <style> +        .block { +            width: 100%; +        } +        button { +            padding: 0.5em; +            margin: 0.5em; +            width: 20em; +        } +    </style>  </head>  <body>  <div class="header container"> @@ -41,29 +51,32 @@      <h1 th:text="#{gui.otherlogin.header.selection}"> Select an alternative login method </h1> -    <div id="otherlogin"> -        <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> -            <input type="submit" role="button" value="Handy-Signatur / Mobile Signature" -                   th:attr="value=#{gui.otherlogin.hs}"/> +    <div id="otherlogin" class="block"> +        <form method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> +            <button type="submit" role="button" value="Handy-Signatur / Mobile Signature" +                    th:text="#{gui.otherlogin.hs}">A +            </button>              <input type="hidden" name="loginSelection" value="MOBILE_PHONE_SIGNATURE_LOGIN">              <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/>          </form> -        <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> -            <input type="submit" role="button" value="Andere eIDAS ID" th:attr="value=#{gui.otherlogin.eidas}"/> +        <form method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> +            <button type="submit" role="button" value="Andere eIDAS ID" th:text="#{gui.otherlogin.eidas}">B +            </button>              <input type="hidden" name="loginSelection" value="EIDAS_LOGIN">              <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/>          </form> -        <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> -            <input type="submit" role="button" value="Keine weitere HS / eIDAS" th:attr="value=#{gui.otherlogin.none}"/> +        <form method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> +            <button type="submit" role="button" value="Keine weitere HS / eIDAS" +                    th:text="#{gui.otherlogin.none}">C +            </button>              <input type="hidden" name="loginSelection" value="NO_OTHER_LOGIN">              <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/>          </form>      </div>      <!-- Abbrechen Button --> -    <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> -        <input type="submit" class="btn btn-outline-primary btn-block" value="Abbrechen/Cancel" -               th:attr="value=#{gui.otherlogin.cancel}"> +    <form method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> +        <button type="submit" value="Abbrechen/Cancel" th:text="#{gui.otherlogin.cancel}"></button>          <input type="hidden" name="stopAuthProcess" value="true">          <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}">      </form> diff --git a/connector/src/main/resources/templates/other_login_method.html b/connector/src/main/resources/templates/other_login_method.html index c233c5c4..ea15864e 100644 --- a/connector/src/main/resources/templates/other_login_method.html +++ b/connector/src/main/resources/templates/other_login_method.html @@ -8,6 +8,16 @@      <meta name="viewport" content="width=device-width, initial-scale=1">      <link rel="stylesheet" href="$contextPath/static/css/css_country.css" th:href="@{/static/css/css_country.css}"/>      <title th:text="#{gui.otherlogin.title}">eIDAS-Login Other Login Methods</title> +    <style> +        .block { +            width: 100%; +        } +        button { +            padding: 0.5em; +            margin: 0.5em; +            width: 20em; +        } +    </style>  </head>  <body>  <div class="header container"> @@ -41,29 +51,32 @@      <h1 th:text="#{gui.otherlogin.header.selection}"> Select an alternative login method </h1> -    <div id="otherlogin"> -        <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> -            <input type="submit" role="button" value="Handy-Signatur / Mobile Signature" -                   th:attr="value=#{gui.otherlogin.hs}"/> +    <div id="otherlogin" class="block"> +        <form method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> +            <button type="submit" role="button" value="Handy-Signatur / Mobile Signature" +                    th:text="#{gui.otherlogin.hs}">A +            </button>              <input type="hidden" name="loginSelection" value="MOBILE_PHONE_SIGNATURE_LOGIN">              <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/>          </form> -        <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> -            <input type="submit" role="button" value="Andere eIDAS ID" th:attr="value=#{gui.otherlogin.eidas}"/> +        <form method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> +            <button type="submit" role="button" value="Andere eIDAS ID" th:text="#{gui.otherlogin.eidas}">B +            </button>              <input type="hidden" name="loginSelection" value="EIDAS_LOGIN">              <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/>          </form> -        <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> -            <input type="submit" role="button" value="Keine weitere HS / eIDAS" th:attr="value=#{gui.otherlogin.none}"/> +        <form method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> +            <button type="submit" role="button" value="Keine weitere HS / eIDAS" +                    th:text="#{gui.otherlogin.none}">C +            </button>              <input type="hidden" name="loginSelection" value="NO_OTHER_LOGIN">              <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/>          </form>      </div>      <!-- Abbrechen Button --> -    <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> -        <input type="submit" class="btn btn-outline-primary btn-block" value="Abbrechen/Cancel" -               th:attr="value=#{gui.otherlogin.cancel}"> +    <form method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> +        <button type="submit" value="Abbrechen/Cancel" th:text="#{gui.otherlogin.cancel}"></button>          <input type="hidden" name="stopAuthProcess" value="true">          <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}">      </form> 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 c233c5c4..ea15864e 100644 --- a/connector/src/test/resources/config/templates/other_login_method.html +++ b/connector/src/test/resources/config/templates/other_login_method.html @@ -8,6 +8,16 @@      <meta name="viewport" content="width=device-width, initial-scale=1">      <link rel="stylesheet" href="$contextPath/static/css/css_country.css" th:href="@{/static/css/css_country.css}"/>      <title th:text="#{gui.otherlogin.title}">eIDAS-Login Other Login Methods</title> +    <style> +        .block { +            width: 100%; +        } +        button { +            padding: 0.5em; +            margin: 0.5em; +            width: 20em; +        } +    </style>  </head>  <body>  <div class="header container"> @@ -41,29 +51,32 @@      <h1 th:text="#{gui.otherlogin.header.selection}"> Select an alternative login method </h1> -    <div id="otherlogin"> -        <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> -            <input type="submit" role="button" value="Handy-Signatur / Mobile Signature" -                   th:attr="value=#{gui.otherlogin.hs}"/> +    <div id="otherlogin" class="block"> +        <form method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> +            <button type="submit" role="button" value="Handy-Signatur / Mobile Signature" +                    th:text="#{gui.otherlogin.hs}">A +            </button>              <input type="hidden" name="loginSelection" value="MOBILE_PHONE_SIGNATURE_LOGIN">              <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/>          </form> -        <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> -            <input type="submit" role="button" value="Andere eIDAS ID" th:attr="value=#{gui.otherlogin.eidas}"/> +        <form method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> +            <button type="submit" role="button" value="Andere eIDAS ID" th:text="#{gui.otherlogin.eidas}">B +            </button>              <input type="hidden" name="loginSelection" value="EIDAS_LOGIN">              <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/>          </form> -        <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> -            <input type="submit" role="button" value="Keine weitere HS / eIDAS" th:attr="value=#{gui.otherlogin.none}"/> +        <form method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> +            <button type="submit" role="button" value="Keine weitere HS / eIDAS" +                    th:text="#{gui.otherlogin.none}">C +            </button>              <input type="hidden" name="loginSelection" value="NO_OTHER_LOGIN">              <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/>          </form>      </div>      <!-- Abbrechen Button --> -    <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> -        <input type="submit" class="btn btn-outline-primary btn-block" value="Abbrechen/Cancel" -               th:attr="value=#{gui.otherlogin.cancel}"> +    <form method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> +        <button type="submit" value="Abbrechen/Cancel" th:text="#{gui.otherlogin.cancel}"></button>          <input type="hidden" name="stopAuthProcess" value="true">          <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}">      </form> diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java index 7c4f8a41..f17f69c3 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java @@ -1,12 +1,15 @@  package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.io.UnsupportedEncodingException; -import java.text.MessageFormat; -import java.util.Locale; - +import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SelectedLoginMethod; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateOtherLoginMethodGuiTask; +import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; +import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl; +import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; +import lombok.SneakyThrows;  import org.apache.commons.lang3.RandomStringUtils;  import org.junit.Assert;  import org.junit.Before; @@ -23,17 +26,12 @@ import org.springframework.test.context.web.WebAppConfiguration;  import org.springframework.web.context.request.RequestContextHolder;  import org.springframework.web.context.request.ServletRequestAttributes; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.json.JsonMapper; +import java.io.UnsupportedEncodingException; +import java.text.MessageFormat; +import java.util.Locale; -import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants; -import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SelectedLoginMethod; -import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateOtherLoginMethodGuiTask; -import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; -import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl; -import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl; -import lombok.SneakyThrows; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue;  @RunWith(SpringJUnit4ClassRunner.class)  @ContextConfiguration(locations = { @@ -44,27 +42,27 @@ import lombok.SneakyThrows;  @WebAppConfiguration  public class GenerateOtherLoginMethodGuiTaskTest { -  private static final String TEST_PATTER_REQ_PARAM =  +  private static final String TEST_PATTER_REQ_PARAM =        "<input type=\"hidden\" name=\"loginSelection\" value=\"{0}\">"; -   +    private static ObjectMapper mapper = new ObjectMapper(); -   -  @Autowired GenerateOtherLoginMethodGuiTask task; -   + +  @Autowired +  GenerateOtherLoginMethodGuiTask task; +    private ExecutionContextImpl executionContext = new ExecutionContextImpl();    private TestRequestImpl pendingReq;    private MockHttpServletRequest httpReq;    private MockHttpServletResponse httpResp; -   +    @BeforeClass    public static void classInitializer() {      Locale.setDefault(Locale.ENGLISH); -    +    } -   +    /**     * jUnit test set-up. -   *      */    @Before    public void initialize() { @@ -72,130 +70,106 @@ public class GenerateOtherLoginMethodGuiTaskTest {      httpResp = new MockHttpServletResponse();      RequestContextHolder.resetRequestAttributes();      RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp)); -     +      pendingReq = new TestRequestImpl();      pendingReq.setAuthUrl("https://localhost/ms_connector");      pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10)); -     +      LocaleContextHolder.resetLocaleContext();    } -   -   + +    @Test    @SneakyThrows -  public void jsonResponse() throws TaskExecutionException, UnsupportedEncodingException {     -        +  public void jsonResponse() throws TaskExecutionException, UnsupportedEncodingException { +      executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);      httpReq.addHeader("Accept", "application/json"); -     +      task.execute(pendingReq, executionContext); -     +      //result validation      Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());      Assert.assertEquals("http ContentType", "application/json;charset=UTF-8", httpResp.getContentType());      final String content = httpResp.getContentAsString();      assertNotNull("response body is null", content);      Assert.assertFalse("response body is empty", content.isEmpty()); -    final JsonNode json = new JsonMapper().readTree(content);     -    assertNotNull("response body is null", json);     +    final JsonNode json = new JsonMapper().readTree(content); +    assertNotNull("response body is null", json);      assertNotNull("advancedMatchFailed", json.get(Constants.HTML_FORM_ADVANCED_MATCHING_FAILED));      assertTrue("advancedMatchFailed", json.get(Constants.HTML_FORM_ADVANCED_MATCHING_FAILED).asBoolean()); -     +    } -   +    @Test -  public void advancedMatchingFailedMsg() throws TaskExecutionException, UnsupportedEncodingException {     -        +  public void advancedMatchingFailedMsg() throws TaskExecutionException, UnsupportedEncodingException { +      executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true); -     +      task.execute(pendingReq, executionContext); -     -    //result validation -    String html = doBasicValidation(); -     -    Assert.assertTrue("No english text",  -        html.contains("Matching of further information failed")); -     + +    doBasicValidation(); +    } -   +    @Test -  public void validHtmlResponseWithOutLocale() throws TaskExecutionException, UnsupportedEncodingException {     -        +  public void validHtmlResponseWithOutLocale() throws TaskExecutionException, UnsupportedEncodingException { +      task.execute(pendingReq, executionContext); -     -    //result validation -    String html = doBasicValidation(); -     -    Assert.assertTrue("No english text",  -        html.contains("Information on Logins with European eIDs")); -    Assert.assertFalse("No english text",  -        html.contains("Matching of further information failed")); -     + +    doBasicValidation(); +    } -   +    @Test -  public void validHtmlResponseWithDE() throws TaskExecutionException, UnsupportedEncodingException {     +  public void validHtmlResponseWithDE() throws TaskExecutionException, UnsupportedEncodingException {      LocaleContextHolder.setLocale(Locale.GERMAN);      httpReq.addHeader("Accept-Language", "de"); -     +      task.execute(pendingReq, executionContext); -     -    //result validation -    String html = doBasicValidation(); -     -    Assert.assertTrue("No english text",  -        html.contains("Information zur Anmeldung über Europäische eIDs")); -     + +    doBasicValidation(); +    } -   +    @Test -  public void validHtmlResponseWithEN() throws TaskExecutionException, UnsupportedEncodingException {     +  public void validHtmlResponseWithEN() throws TaskExecutionException, UnsupportedEncodingException {      LocaleContextHolder.setLocale(Locale.ENGLISH); -     +      task.execute(pendingReq, executionContext); -     -    //result validation -    String html = doBasicValidation(); -     -    Assert.assertTrue("No english text",  -        html.contains("Information on Logins with European eIDs")); -     + +    doBasicValidation(); +    } -   +    @Test -  public void validHtmlResponseWithFR() throws TaskExecutionException, UnsupportedEncodingException {     +  public void validHtmlResponseWithFR() throws TaskExecutionException, UnsupportedEncodingException {      LocaleContextHolder.setLocale(Locale.FRANCE);      httpReq.addHeader("Accept-Language", "fr"); -     +      task.execute(pendingReq, executionContext); -     -    //result validation -    String html = doBasicValidation(); -     -    Assert.assertTrue("No english text",  -        html.contains("Information on Logins with European eIDs")); -     + +    doBasicValidation(); +    } -   -  private String doBasicValidation() throws UnsupportedEncodingException { + +  private void doBasicValidation() throws UnsupportedEncodingException {      Assert.assertEquals("Wrong http StatusCode", 200, httpResp.getStatus());      Assert.assertEquals("Wrong http ContentType", "text/html;charset=UTF-8", httpResp.getContentType()); -     +      String html = httpResp.getContentAsString();      Assert.assertNotNull("html result is null", html); -    Assert.assertFalse("html result is empty", html.isEmpty());     -     -    Assert.assertTrue("Missing IDA Login",  +    Assert.assertFalse("html result is empty", html.isEmpty()); + +    Assert.assertTrue("Missing IDA Login",          html.contains(MessageFormat.format(TEST_PATTER_REQ_PARAM, SelectedLoginMethod.MOBILE_PHONE_SIGNATURE_LOGIN))); -    Assert.assertTrue("Missing residence infos",  +    Assert.assertTrue("Missing residence infos",          html.contains(MessageFormat.format(TEST_PATTER_REQ_PARAM, SelectedLoginMethod.NO_OTHER_LOGIN))); -         -    Assert.assertTrue("No language selector with pendingRequestId",  + +    Assert.assertTrue("No language selector with pendingRequestId",          html.contains("/otherLoginMethod?pendingid=" + pendingReq.getPendingRequestId())); -    Assert.assertTrue("No country-selection form",  -        html.contains("<form class=\"block\" method=\"post\" action=\"/otherLoginMethod\">")); -         -    return html; -     +    Assert.assertTrue("No country-selection form", +        html.contains("<form method=\"post\" action=\"/otherLoginMethod\">")); +    }  } | 
