]> WPIA git - gigi.git/commitdiff
Merge "add: certificate status check via web form"
authorFelix Dörre <felix@dogcraft.de>
Thu, 18 Jan 2018 10:05:20 +0000 (11:05 +0100)
committerGerrit Code Review <gigi-system@dogcraft.de>
Thu, 18 Jan 2018 10:05:20 +0000 (11:05 +0100)
12 files changed:
src/club/wpia/gigi/Gigi.templ
src/club/wpia/gigi/output/template/Template.java
src/club/wpia/gigi/pages/account/certs/CertificateIssueForm.templ
src/club/wpia/gigi/pages/admin/support/FindCertPage.java
src/club/wpia/gigi/pages/admin/support/FindCertPage.templ
static/static/css/noscript.css [new file with mode: 0644]
tests/club/wpia/gigi/pages/admin/TestSEAdminNotificationMail.java
tests/club/wpia/gigi/pages/admin/TestSEAdminPageCertSearch.java
tests/club/wpia/gigi/pages/admin/TestSEAdminPageDetails.java
tests/club/wpia/gigi/pages/admin/TestSEAdminPageUserDomainSearch.java
tests/club/wpia/gigi/pages/admin/TestSEAdminPageUserMailSearch.java
tests/club/wpia/gigi/testUtils/SEClientTest.java [new file with mode: 0644]

index 99aa265eb95e814a1a2531ea65d17949e93b64a8..1c68829f679c4fcc2665eeabcda597b4cfca8dd1 100644 (file)
@@ -11,6 +11,7 @@
 
         <link rel="stylesheet" href="<?=$static?>/css/bootstrap.min.css">
         <link rel="stylesheet" href="<?=$static?>/css/main.css">
+        <noscript><link rel="stylesheet" href="<?=$static?>/css/noscript.css"></noscript>
 
         <script src="<?=$static?>/js/jquery.min.js"></script>
         <script src="<?=$static?>/js/bootstrap.min.js"></script>
index 65db37fe8314938d3b5237c644c47a9874d6a7e8..cb0bed02b0fd8019f18e1eddb01ca070505b539e 100644 (file)
@@ -73,6 +73,8 @@ public class Template implements Outputable {
 
     private static final String UNKOWN_CONTROL_STRUCTURE_MSG = "Unknown control structure \"%s\", did you mean \"%s\"?";
 
+    public static final String UTC_TIMESTAMP_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
+
     /**
      * Creates a new template by parsing the contents from the given URL. This
      * constructor will fail on syntax error. When the URL points to a file,
@@ -267,7 +269,7 @@ public class Template implements Outputable {
             if (vars.containsKey(Outputable.OUT_KEY_PLAIN)) {
                 out.print(sdfUI.format(s));
             } else {
-                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+                SimpleDateFormat sdf = new SimpleDateFormat(UTC_TIMESTAMP_FORMAT);
                 out.print("<time datetime=\"" + sdf.format(s) + "\">");
                 out.print(sdfUI.format(s));
                 out.print(" UTC</time>");
index 68b8713500f20aca4e566936b6affdc0afb7962f..da45ca658dbc9950f5f74f20e2567a097bf1f68b 100644 (file)
   </tr>
   <? if($orga) { ?>
   <tr>
-    <td><?=_Departement?></td>
+    <td><?=_Department?></td>
     <td align="left"><input type='text' name='OU' value='<?=$department?>'/></td>
   </tr>
   <? } ?>
-  <tr class="expertoff">
+  <tr class="expertoff noscript-hidden">
     <td class='check'>
       <input type="checkbox" id="expertbox" name="expertbox"/>
     </td>
index 0d2edbc9bb9032feeb6701a2c3b304621d43d463..ea5ac1e9d8924ef512cf50103444f4919506b9d5 100644 (file)
@@ -9,6 +9,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import club.wpia.gigi.dbObjects.Certificate;
+import club.wpia.gigi.dbObjects.Certificate.CertificateStatus;
 import club.wpia.gigi.dbObjects.Certificate.SubjectAlternateName;
 import club.wpia.gigi.localisation.Language;
 import club.wpia.gigi.output.ArrayIterable;
@@ -59,6 +60,12 @@ public class FindCertPage extends Page {
                         vars.put("id", t.getId());
                         vars.put("serial", t.getSerial());
 
+                        if (t.getStatus() == CertificateStatus.REVOKED) {
+                            vars.put("revoked", t.getRevocationDate());
+                        } else {
+                            vars.put("revoked", l.getTranslation("N/A"));
+                        }
+
                         final List<SubjectAlternateName> san = t.getSANs();
                         vars.put("san", new IterableDataset() {
 
index d8f61c1140d0d970c18a1a9afbb5b160e280a501..0e0fa25b0123e524fec64d6e792f8f789bf9f0d9 100644 (file)
@@ -1,7 +1,7 @@
 <p><?=_Multiple certificates?>: <?=$limit?></p>
 <table class="table">
 <tr>
-<th>Id</th><th><?=_Serial number?></th><th><?=_SAN?></th></tr>
+<th>Id</th><th><?=_Serial number?></th><th><?=_SAN?></th><th><?=_Revocation Date?></th></tr>
 <? foreach($certtable) {?>
   <tr>
     <td><a href="/support/certs/<?=$serial?>"><?=$id?></a></td>
@@ -11,6 +11,7 @@
        <?=$entry?>
     <? } ?>
     </td>
+    <td><?=$revoked?></td>
   </tr>
 <? } ?>
 </table>
diff --git a/static/static/css/noscript.css b/static/static/css/noscript.css
new file mode 100644 (file)
index 0000000..7f85e85
--- /dev/null
@@ -0,0 +1,3 @@
+.noscript-hidden{
+    display: none;
+}
index 9bcaa825411f4e9b311adc601b445c0e57964990..30aeb64f94a3b077acf1bb039ab0689fd470d794 100644 (file)
@@ -17,23 +17,18 @@ import club.wpia.gigi.GigiApiException;
 import club.wpia.gigi.dbObjects.Group;
 import club.wpia.gigi.dbObjects.User;
 import club.wpia.gigi.localisation.Language;
-import club.wpia.gigi.pages.admin.support.SupportEnterTicketPage;
 import club.wpia.gigi.pages.admin.support.SupportUserDetailsPage;
-import club.wpia.gigi.testUtils.ClientTest;
+import club.wpia.gigi.testUtils.SEClientTest;
 import club.wpia.gigi.testUtils.TestEmailReceiver.TestMail;
 import club.wpia.gigi.util.ServerConstants;
 
-public class TestSEAdminNotificationMail extends ClientTest {
+public class TestSEAdminNotificationMail extends SEClientTest {
 
     private int targetID;
 
     private String targetEmail;
 
     public TestSEAdminNotificationMail() throws IOException, GigiApiException {
-        grant(u, Group.SUPPORTER);
-        cookie = login(email, TEST_PASSWORD);
-        assertEquals(302, post(cookie, SupportEnterTicketPage.PATH, "ticketno=a20140808.8&setTicket=action", 0).getResponseCode());
-
         targetEmail = createUniqueName() + "@example.com";
         String fname = "Först";
         String lname = "Secönd";
index e61f559ee8dfed4918679434a107ec9d74165a46..74375f2f500c933baeceaa2f9c5d1a9616dd6b0a 100644 (file)
@@ -7,6 +7,7 @@ import java.net.URLConnection;
 import java.net.URLEncoder;
 import java.security.GeneralSecurityException;
 import java.security.KeyPair;
+import java.text.SimpleDateFormat;
 
 import org.hamcrest.CoreMatchers;
 import org.junit.Test;
@@ -15,37 +16,31 @@ import club.wpia.gigi.GigiApiException;
 import club.wpia.gigi.dbObjects.Certificate;
 import club.wpia.gigi.dbObjects.Certificate.CSRType;
 import club.wpia.gigi.dbObjects.Certificate.CertificateStatus;
+import club.wpia.gigi.dbObjects.Certificate.RevocationType;
 import club.wpia.gigi.dbObjects.Certificate.SANType;
 import club.wpia.gigi.dbObjects.Digest;
-import club.wpia.gigi.dbObjects.Group;
 import club.wpia.gigi.dbObjects.User;
+import club.wpia.gigi.output.template.Template;
 import club.wpia.gigi.pages.account.certs.Certificates;
 import club.wpia.gigi.pages.admin.support.FindCertPage;
-import club.wpia.gigi.pages.admin.support.SupportEnterTicketPage;
-import club.wpia.gigi.testUtils.ClientTest;
 import club.wpia.gigi.testUtils.IOUtils;
+import club.wpia.gigi.testUtils.SEClientTest;
 import club.wpia.gigi.testUtils.TestEmailReceiver.TestMail;
 import club.wpia.gigi.util.ServerConstants;
 import club.wpia.gigi.util.ServerConstants.Host;
 
-public class TestSEAdminPageCertSearch extends ClientTest {
+public class TestSEAdminPageCertSearch extends SEClientTest {
 
     private Certificate c;
 
     private String certMail;
 
-    public TestSEAdminPageCertSearch() throws IOException, GigiApiException, GeneralSecurityException, InterruptedException {
-        grant(u, Group.SUPPORTER);
-        cookie = login(email, TEST_PASSWORD);
-        assertEquals(302, post(cookie, SupportEnterTicketPage.PATH, "ticketno=a20140808.8&setTicket=action", 0).getResponseCode());
+    private int id;
 
+    public TestSEAdminPageCertSearch() throws IOException, GigiApiException, GeneralSecurityException, InterruptedException {
         certMail = uniq + "_certowner@example.com";
-        int id = createVerifiedUser("fn", "ln", certMail, TEST_PASSWORD);
-        User u1 = User.getById(id);
-        KeyPair kp = generateKeypair();
-        String key = generatePEMCSR(kp, "CN=" + certMail);
-        c = new Certificate(u1, u1, Certificate.buildDN("CN", certMail), Digest.SHA512, key, CSRType.CSR, getClientProfile(), new Certificate.SubjectAlternateName(SANType.EMAIL, certMail));
-        await(c.issue(null, "2y", u));
+        id = createVerifiedUser("fn", "ln", certMail, TEST_PASSWORD);
+        c = createCertificate();
     }
 
     @Test
@@ -79,6 +74,27 @@ public class TestSEAdminPageCertSearch extends ClientTest {
             assertThat(tm.getMessage(), CoreMatchers.containsString(c.getSerial()));
         }
         assertEquals(CertificateStatus.REVOKED, c.getStatus());
+
+    }
+
+    @Test
+    public void testShowRevocation() throws GeneralSecurityException, IOException, GigiApiException, InterruptedException {
+        Certificate c1 = createCertificate();
+        await(c1.revoke(RevocationType.SUPPORT));
+        URLConnection uc = post(cookie, FindCertPage.PATH, "certType=email&process=Next&cert=" + URLEncoder.encode(certMail, "UTF-8"), 0);
+        SimpleDateFormat sdf = new SimpleDateFormat(Template.UTC_TIMESTAMP_FORMAT);
+        String revokeDate = sdf.format(c1.getRevocationDate());
+        String result = IOUtils.readURL(uc);
+        assertThat(result, CoreMatchers.containsString(revokeDate));
+        assertThat(result, CoreMatchers.containsString("N/A"));
     }
 
+    private Certificate createCertificate() throws GeneralSecurityException, IOException, GigiApiException, InterruptedException {
+        User u1 = User.getById(id);
+        KeyPair kp = generateKeypair();
+        String key = generatePEMCSR(kp, "CN=" + certMail);
+        Certificate c1 = new Certificate(u1, u1, Certificate.buildDN("CN", certMail), Digest.SHA512, key, CSRType.CSR, getClientProfile(), new Certificate.SubjectAlternateName(SANType.EMAIL, certMail));
+        await(c1.issue(null, "2y", u));
+        return c1;
+    }
 }
index 72930b307de24b7c68318885bfabe4c9b896b9b4..9b92fcbc08dfb20dc52e1d83dc1a8472a242b3c1 100644 (file)
@@ -16,23 +16,18 @@ import org.junit.Test;
 import club.wpia.gigi.GigiApiException;
 import club.wpia.gigi.database.GigiPreparedStatement;
 import club.wpia.gigi.dbObjects.EmailAddress;
-import club.wpia.gigi.dbObjects.Group;
 import club.wpia.gigi.dbObjects.ObjectCache;
 import club.wpia.gigi.dbObjects.User;
 import club.wpia.gigi.pages.account.History;
 import club.wpia.gigi.pages.admin.support.SupportEnterTicketPage;
 import club.wpia.gigi.pages.admin.support.SupportUserDetailsPage;
-import club.wpia.gigi.testUtils.ClientTest;
 import club.wpia.gigi.testUtils.IOUtils;
+import club.wpia.gigi.testUtils.SEClientTest;
 import club.wpia.gigi.util.DayDate;
 
-public class TestSEAdminPageDetails extends ClientTest {
+public class TestSEAdminPageDetails extends SEClientTest {
 
-    public TestSEAdminPageDetails() throws IOException, GigiApiException {
-        grant(u, Group.SUPPORTER);
-        cookie = login(email, TEST_PASSWORD);
-        assertEquals(302, post(cookie, SupportEnterTicketPage.PATH, "ticketno=a20140808.8&setTicket=action", 0).getResponseCode());
-    }
+    public TestSEAdminPageDetails() throws IOException, GigiApiException {}
 
     @Test
     public void testUserDetailsDisplay() throws MalformedURLException, IOException {
index 75741650aeecfe25f11df1f94b049e7ebc9f34c5..383d23265094a5af76d339a773a31a0d22493103 100644 (file)
@@ -14,17 +14,15 @@ import org.junit.Test;
 
 import club.wpia.gigi.GigiApiException;
 import club.wpia.gigi.dbObjects.Domain;
-import club.wpia.gigi.dbObjects.Group;
 import club.wpia.gigi.dbObjects.User;
 import club.wpia.gigi.pages.admin.support.FindUserByDomainPage;
-import club.wpia.gigi.pages.admin.support.SupportEnterTicketPage;
 import club.wpia.gigi.pages.admin.support.SupportUserDetailsPage;
-import club.wpia.gigi.testUtils.ClientTest;
 import club.wpia.gigi.testUtils.IOUtils;
+import club.wpia.gigi.testUtils.SEClientTest;
 import club.wpia.gigi.util.ServerConstants;
 import club.wpia.gigi.util.ServerConstants.Host;
 
-public class TestSEAdminPageUserDomainSearch extends ClientTest {
+public class TestSEAdminPageUserDomainSearch extends SEClientTest {
 
     private Domain d;
 
@@ -35,10 +33,6 @@ public class TestSEAdminPageUserDomainSearch extends ClientTest {
     private int tid;
 
     public TestSEAdminPageUserDomainSearch() throws IOException, GigiApiException {
-        grant(u, Group.SUPPORTER);
-        cookie = login(email, TEST_PASSWORD);
-        assertEquals(302, post(cookie, SupportEnterTicketPage.PATH, "ticketno=a20140808.8&setTicket=action", 0).getResponseCode());
-
         String mail = createUniqueName() + "@example.com";
         tid = createVerifiedUser("Först", "Secönd", mail, TEST_PASSWORD);
         User user = User.getById(tid);
index c4bf8b43e1f256f67725847083931410b794a0f5..a21ca96a492cc109af1186df7cfc753186caea53 100644 (file)
@@ -12,23 +12,17 @@ import java.net.URLEncoder;
 import org.junit.Test;
 
 import club.wpia.gigi.GigiApiException;
-import club.wpia.gigi.dbObjects.Group;
 import club.wpia.gigi.dbObjects.User;
 import club.wpia.gigi.pages.admin.support.FindUserByEmailPage;
-import club.wpia.gigi.pages.admin.support.SupportEnterTicketPage;
 import club.wpia.gigi.pages.admin.support.SupportUserDetailsPage;
-import club.wpia.gigi.testUtils.ClientTest;
 import club.wpia.gigi.testUtils.IOUtils;
+import club.wpia.gigi.testUtils.SEClientTest;
 import club.wpia.gigi.util.ServerConstants;
 import club.wpia.gigi.util.ServerConstants.Host;
 
-public class TestSEAdminPageUserMailSearch extends ClientTest {
+public class TestSEAdminPageUserMailSearch extends SEClientTest {
 
-    public TestSEAdminPageUserMailSearch() throws IOException, GigiApiException {
-        grant(u, Group.SUPPORTER);
-        cookie = login(email, TEST_PASSWORD);
-        assertEquals(302, post(cookie, SupportEnterTicketPage.PATH, "ticketno=a20140808.8&setTicket=action", 0).getResponseCode());
-    }
+    public TestSEAdminPageUserMailSearch() throws IOException, GigiApiException {}
 
     @Test
     public void testFulltextMailSearch() throws MalformedURLException, UnsupportedEncodingException, IOException {
diff --git a/tests/club/wpia/gigi/testUtils/SEClientTest.java b/tests/club/wpia/gigi/testUtils/SEClientTest.java
new file mode 100644 (file)
index 0000000..004f34f
--- /dev/null
@@ -0,0 +1,23 @@
+package club.wpia.gigi.testUtils;
+
+import static org.junit.Assert.*;
+
+import java.io.IOException;
+
+import club.wpia.gigi.GigiApiException;
+import club.wpia.gigi.dbObjects.Group;
+import club.wpia.gigi.pages.admin.support.SupportEnterTicketPage;
+
+/**
+ * Superclass for testsuites in a scenario where there is a supporter, who is
+ * already logged on.
+ */
+public abstract class SEClientTest extends ClientTest {
+
+    public SEClientTest() throws IOException, GigiApiException {
+        grant(u, Group.SUPPORTER);
+        cookie = login(email, TEST_PASSWORD);
+        assertEquals(302, post(cookie, SupportEnterTicketPage.PATH, "ticketno=a20140808.8&setTicket=action", 0).getResponseCode());
+    }
+
+}