add: ensure that for OrgAgent action there is a valid OrgAgent Challenge
authorINOPIAE <m.maengel@inopiae.de>
Wed, 17 Jul 2019 04:06:36 +0000 (06:06 +0200)
committerINOPIAE <m.maengel@inopiae.de>
Sun, 8 Sep 2019 19:28:57 +0000 (21:28 +0200)
related to issue #150

Change-Id: I9e57e82da383c26ccbcb659a0f93d5de59816b15

src/club/wpia/gigi/pages/MainPage.java
src/club/wpia/gigi/pages/MainPage.templ
src/club/wpia/gigi/pages/orga/CreateOrgPage.java
src/club/wpia/gigi/pages/orga/ViewOrgPage.java
tests/club/wpia/gigi/pages/TestMain.java
tests/club/wpia/gigi/pages/orga/TestOrgManagement.java
tests/club/wpia/gigi/testUtils/OrgTest.java

index 9b7e079..e017018 100644 (file)
@@ -51,6 +51,11 @@ public class MainPage extends Page {
                 vars.put("catsinfo", true);
                 vars.put("catssupport", true);
             }
+            if (u.isInGroup(Group.ORG_AGENT) && !u.hasValidOrgAgentChallenge()) {
+                vars.put("catsinfo", true);
+                vars.put("catsorgagent", true);
+            }
+
             Certificate[] c = u.getCertificates(false);
             vars.put("c-no", c.length);
 
index 52b805b..e8ecee4 100644 (file)
@@ -20,6 +20,9 @@
   <? if($catssupport) { ?>
     <p><?=_To act as supporter you need to pass the Support Challenge.?></p>
   <? } ?>
+  <? if($catsorgagent) { ?>
+    <p><?=_To act as Organisation Agent you need to pass the Organisation Agent Challenge.?></p>
+  <? } ?>
   </div>
 <? } ?>
 <div class="card card-body bg-light">
index 27a0e4d..a27cf5b 100644 (file)
@@ -21,7 +21,7 @@ public class CreateOrgPage extends ManagedFormPage {
 
     @Override
     public boolean isPermitted(AuthorizationContext ac) {
-        return ac != null && ac.isInGroup(ORG_AGENT) && ac.isStronglyAuthenticated();
+        return ac != null && ac.isInGroup(ORG_AGENT) && ac.isStronglyAuthenticated() && ac.getActor().hasValidOrgAgentChallenge();
     }
 
     @Override
index 0ee3d5d..0327421 100644 (file)
@@ -36,7 +36,7 @@ public class ViewOrgPage extends ManagedMultiFormPage {
 
     @Override
     public boolean isPermitted(AuthorizationContext ac) {
-        return ac != null && (ac.isInGroup(CreateOrgPage.ORG_AGENT) || ac.getActor().getOrganisations(true).size() != 0) && ac.isStronglyAuthenticated();
+        return ac != null && ((ac.isInGroup(CreateOrgPage.ORG_AGENT) && ac.getActor().hasValidOrgAgentChallenge()) || ac.getActor().getOrganisations(true).size() != 0) && ac.isStronglyAuthenticated();
     }
 
     @Override
index 47c4c15..70a71a5 100644 (file)
@@ -142,5 +142,30 @@ public class TestMain extends ClientTest {
         authenticate((HttpURLConnection) uc);
         content = IOUtils.readURL(uc);
         assertThat(content, not(containsString("you need to pass the Support Challenge")));
+
+        // test Org Agent challenge
+        uc = new URL("https://" + getSecureServerName()).openConnection();
+        authenticate((HttpURLConnection) uc);
+        content = IOUtils.readURL(uc);
+        assertThat(content, not(containsString("you need to pass the Organisation Agent Challenge")));
+
+        grant(u, Group.ORG_AGENT);
+        cookie = login(loginPrivateKey, loginCertificate.cert());
+        uc = new URL("https://" + getSecureServerName()).openConnection();
+        authenticate((HttpURLConnection) uc);
+        content = IOUtils.readURL(uc);
+        assertThat(content, containsString("you need to pass the Organisation Agent Challenge"));
+
+        addChallengeInPast(u.getId(), CATSType.ORG_AGENT_CHALLENGE);
+        uc = new URL("https://" + getSecureServerName()).openConnection();
+        authenticate((HttpURLConnection) uc);
+        content = IOUtils.readURL(uc);
+        assertThat(content, containsString("you need to pass the Organisation Agent Challenge"));
+
+        addChallenge(u.getId(), CATSType.ORG_AGENT_CHALLENGE);
+        uc = new URL("https://" + getSecureServerName()).openConnection();
+        authenticate((HttpURLConnection) uc);
+        content = IOUtils.readURL(uc);
+        assertThat(content, not(containsString("you need to pass the Organisation Agent Challenge")));
     }
 }
index 6565d25..164facf 100644 (file)
@@ -17,6 +17,7 @@ import org.junit.After;
 import org.junit.Test;
 
 import club.wpia.gigi.GigiApiException;
+import club.wpia.gigi.dbObjects.CATS.CATSType;
 import club.wpia.gigi.dbObjects.Certificate;
 import club.wpia.gigi.dbObjects.Country;
 import club.wpia.gigi.dbObjects.Country.CountryCodeType;
@@ -286,4 +287,16 @@ public class TestOrgManagement extends OrgTest {
         uc = get(cookie, CreateOrgPage.DEFAULT_PATH);
         assertEquals(403, ((HttpURLConnection) uc).getResponseCode());
     }
+
+    @Test
+    public void testAgentWithoutValidChallenge() throws IOException, GigiApiException {
+        User agent = User.getById(createVerificationUser("testworker", "testname", createUniqueName() + "@testdom.com", TEST_PASSWORD));
+        addChallenge(agent.getId(), CATSType.ORG_AGENT_CHALLENGE);
+        loginCertificate = null;
+        cookie = cookieWithCertificateLogin(agent);
+        URLConnection uc = get(cookie, ViewOrgPage.DEFAULT_PATH);
+        assertEquals(403, ((HttpURLConnection) uc).getResponseCode());
+        uc = get(cookie, CreateOrgPage.DEFAULT_PATH);
+        assertEquals(403, ((HttpURLConnection) uc).getResponseCode());
+    }
 }
index 6c3ba7c..9f33686 100644 (file)
@@ -3,6 +3,7 @@ package club.wpia.gigi.testUtils;
 import java.io.IOException;
 
 import club.wpia.gigi.GigiApiException;
+import club.wpia.gigi.dbObjects.CATS.CATSType;
 import club.wpia.gigi.dbObjects.Country;
 import club.wpia.gigi.dbObjects.Country.CountryCodeType;
 import club.wpia.gigi.dbObjects.Group;
@@ -14,6 +15,7 @@ public class OrgTest extends ClientTest {
     public OrgTest() throws IOException, GigiApiException {
         makeAgent(u.getId());
         u.grantGroup(getSupporter(), Group.ORG_AGENT);
+        addChallenge(u.getId(), CATSType.ORG_AGENT_CHALLENGE);
         clearCaches();
         cookie = cookieWithCertificateLogin(u);
     }