]> WPIA git - gigi.git/blob - tests/club/wpia/gigi/pages/admin/TestSEAdminTicketSetting.java
e85b03e9a810b86dd62bccaa38381e3038782955
[gigi.git] / tests / club / wpia / gigi / pages / admin / TestSEAdminTicketSetting.java
1 package club.wpia.gigi.pages.admin;
2
3 import static org.hamcrest.CoreMatchers.*;
4 import static org.hamcrest.MatcherAssert.assertThat;
5 import static org.junit.Assert.*;
6
7 import java.io.IOException;
8 import java.io.UnsupportedEncodingException;
9 import java.net.MalformedURLException;
10 import java.security.GeneralSecurityException;
11 import java.security.KeyPair;
12 import java.security.PrivateKey;
13 import java.security.cert.X509Certificate;
14 import java.util.Random;
15
16 import org.junit.Test;
17
18 import club.wpia.gigi.GigiApiException;
19 import club.wpia.gigi.dbObjects.Certificate;
20 import club.wpia.gigi.dbObjects.Certificate.CSRType;
21 import club.wpia.gigi.dbObjects.Digest;
22 import club.wpia.gigi.dbObjects.Group;
23 import club.wpia.gigi.pages.admin.support.FindCertPage;
24 import club.wpia.gigi.pages.admin.support.FindUserByDomainPage;
25 import club.wpia.gigi.pages.admin.support.FindUserByEmailPage;
26 import club.wpia.gigi.pages.admin.support.SupportEnterTicketForm;
27 import club.wpia.gigi.pages.admin.support.SupportEnterTicketPage;
28 import club.wpia.gigi.testUtils.ClientTest;
29 import club.wpia.gigi.testUtils.IOUtils;
30
31 public class TestSEAdminTicketSetting extends ClientTest {
32
33     public TestSEAdminTicketSetting() throws IOException, GigiApiException {
34         grant(u, Group.SUPPORTER);
35         try {
36             KeyPair kp = generateKeypair();
37             String csr = generatePEMCSR(kp, "CN=" + u.getPreferredName().toString());
38             Certificate c = new Certificate(u, u, Certificate.buildDN("CN", u.getPreferredName().toString()), Digest.SHA256, csr, CSRType.CSR, getClientProfile());
39             final PrivateKey pk = kp.getPrivate();
40             await(c.issue(null, "2y", u));
41             final X509Certificate ce = c.cert();
42             c.setLoginEnabled(true);
43             cookie = login(pk, ce);
44             loginCertificate = c;
45             loginPrivateKey = pk;
46         } catch (InterruptedException e) {
47             throw new GigiApiException(e.toString());
48         } catch (GeneralSecurityException e) {
49             throw new GigiApiException(e.toString());
50         }
51     }
52
53     @Test
54     public void testFulltextMailSearch() throws MalformedURLException, UnsupportedEncodingException, IOException {
55         assertEquals(403, get(FindUserByEmailPage.PATH).getResponseCode());
56         assertEquals(302, post(SupportEnterTicketPage.PATH, "ticketno=a20140808.8&setTicket=action", 0).getResponseCode());
57         assertEquals(200, get(FindUserByEmailPage.PATH).getResponseCode());
58         assertEquals(200, get(FindUserByDomainPage.PATH).getResponseCode());
59         assertEquals(302, post(SupportEnterTicketPage.PATH, "ticketno=a20140808.8&deleteTicket=action", 0).getResponseCode());
60         assertEquals(403, get(FindUserByEmailPage.PATH).getResponseCode());
61     }
62
63     @Test
64     public void testSetTicketNumberCharacter() throws MalformedURLException, UnsupportedEncodingException, IOException {
65         String ticket;
66         String alphabet = "abcdefghijklmnopqrstuvwxyz";
67
68         // test allowed character
69         for (char ch : SupportEnterTicketForm.TICKET_PREFIX.toCharArray()) {
70             ticket = ch + "20171212.1";
71             assertEquals(302, post(SupportEnterTicketPage.PATH, "ticketno=" + ticket + "&setTicket=action", 0).getResponseCode());
72             ticket = Character.toUpperCase(ch) + "20171212.1";
73             assertEquals(302, post(SupportEnterTicketPage.PATH, "ticketno=" + ticket + "&setTicket=action", 0).getResponseCode());
74             alphabet = alphabet.replaceAll(Character.toString(ch), "");
75         }
76
77         // test not allowed character
78         Random rnd = new Random();
79         char ch = alphabet.charAt(rnd.nextInt(alphabet.length()));
80         assertWrongTicketNumber(ch + "20171212.1");
81     }
82
83     @Test
84     public void testSetTicketNumberDatepart() throws MalformedURLException, UnsupportedEncodingException, IOException {
85         char ch = getValidCharacter();
86
87         assertWrongTicketNumber(ch + "220171212.1");
88
89         assertWrongTicketNumber(ch + "0171212.1");
90
91         assertWrongTicketNumber(ch + "20171512.1");
92
93         assertWrongTicketNumber(ch + "20170229.1");
94
95         assertWrongTicketNumber(ch + ch + "20171212.1");
96
97         assertWrongTicketNumber("20171212.1");
98
99         assertWrongTicketNumber(ch + "20171212" + ch + ".1");
100
101         assertWrongTicketNumber(ch + "201721" + ch + "21.1");
102     }
103
104     @Test
105     public void testSetTicketNumberNumberpart() throws MalformedURLException, UnsupportedEncodingException, IOException {
106         char ch = getValidCharacter();
107
108         assertWrongTicketNumber(ch + "20171212.");
109
110         assertWrongTicketNumber(ch + "20171212");
111
112         assertWrongTicketNumber(ch + "20171212.1" + ch);
113
114     }
115
116     private char getValidCharacter() {
117         Random rnd = new Random();
118         return SupportEnterTicketForm.TICKET_PREFIX.charAt(rnd.nextInt(SupportEnterTicketForm.TICKET_PREFIX.length()));
119     }
120
121     private void assertWrongTicketNumber(String ticket) throws IOException {
122         String res = IOUtils.readURL(post(SupportEnterTicketPage.PATH, "ticketno=" + ticket + "&setTicket=action"));
123         assertThat(res, containsString("Ticket format malformed"));
124     }
125
126     @Test
127     public void testPWLogin() throws MalformedURLException, UnsupportedEncodingException, IOException {
128         String cookiePW = login(email, TEST_PASSWORD);
129         loginCertificate = null;
130         assertEquals(403, get(cookiePW, SupportEnterTicketPage.PATH).getResponseCode());
131         assertEquals(403, get(cookiePW, FindUserByEmailPage.PATH).getResponseCode());
132         assertEquals(403, get(cookiePW, FindUserByDomainPage.PATH).getResponseCode());
133         assertEquals(403, get(cookiePW, FindCertPage.PATH).getResponseCode());
134     }
135
136 }