1 package club.wpia.gigi.pages.orga;
3 import static org.hamcrest.CoreMatchers.*;
4 import static org.hamcrest.MatcherAssert.assertThat;
5 import static org.junit.Assert.*;
7 import java.io.IOException;
8 import java.net.HttpURLConnection;
9 import java.net.URLConnection;
10 import java.net.URLEncoder;
11 import java.security.GeneralSecurityException;
12 import java.security.KeyManagementException;
13 import java.security.NoSuchAlgorithmException;
14 import java.security.PrivateKey;
15 import java.sql.SQLException;
17 import org.junit.After;
18 import org.junit.Test;
20 import club.wpia.gigi.GigiApiException;
21 import club.wpia.gigi.dbObjects.CATS.CATSType;
22 import club.wpia.gigi.dbObjects.Certificate;
23 import club.wpia.gigi.dbObjects.Organisation;
24 import club.wpia.gigi.dbObjects.User;
25 import club.wpia.gigi.testUtils.IOUtils;
26 import club.wpia.gigi.testUtils.OrgTest;
28 public class TestOrgSwitch extends OrgTest {
32 private Organisation org1 = createUniqueOrg();
34 private Organisation org2 = createUniqueOrg();
36 private Certificate cagent;
38 private PrivateKey pkagent;
40 public TestOrgSwitch() throws IOException, GigiApiException {
42 assertEquals(403, get(SwitchOrganisation.PATH).getResponseCode());
44 String email = createUniqueName() + "@testdom.com";
45 u2 = User.getById(createVerificationUser("testworker", "testname", email, TEST_PASSWORD));
46 assertNull(executeBasicWebInteraction(cookie, ViewOrgPage.DEFAULT_PATH + "/" + org1.getId(), "email=" + URLEncoder.encode(u2.getEmail(), "UTF-8") + "&do_affiliate=y&master=y", 1));
47 assertNull(executeBasicWebInteraction(cookie, ViewOrgPage.DEFAULT_PATH + "/" + org2.getId(), "email=" + URLEncoder.encode(u2.getEmail(), "UTF-8") + "&do_affiliate=y&master=y", 1));
48 addChallenge(u2.getId(), CATSType.ORG_ADMIN_DP_CHALLENGE_NAME);
49 cagent = loginCertificate;
50 pkagent = loginPrivateKey;
52 // login with new user u2
53 cookie = cookieWithCertificateLogin(u2);
57 public void purgeDbAfterTest() throws SQLException, IOException {
62 public void testSwitchToOrg() throws IOException, GigiApiException {
64 assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org1.getId() + "=y", 0));
66 String res = IOUtils.readURL(get(SwitchOrganisation.PATH));
67 assertThat(res, containsString("Logged in as " + u2.getPreferredName() + ", acting as " + org1.getName()));
72 public void testSwitchToNonOrg() throws IOException, GigiApiException {
74 String res = IOUtils.readURL(post(SwitchOrganisation.PATH, "org:5000=y"));
75 assertThat(res, containsString("Context switch failed"));
80 public void testSwitchToPersonal() throws IOException, GigiApiException {
82 assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org-leave=personal", 0));
84 String res = IOUtils.readURL(get(SwitchOrganisation.PATH));
85 assertThat(res, containsString("Logged in as " + u2.getPreferredName()));
87 assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org-leave=personal", 0));
89 res = IOUtils.readURL(get(SwitchOrganisation.PATH));
90 assertThat(res, containsString("Logged in as " + u2.getPreferredName()));
95 public void testSwitchOrgToOrg() throws IOException, GigiApiException {
97 assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org1.getId() + "=y", 0));
98 assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org2.getId() + "=y", 0));
100 String res = IOUtils.readURL(get(SwitchOrganisation.PATH));
101 assertThat(res, containsString("Logged in as " + u2.getPreferredName() + ", acting as " + org2.getName()));
106 public void testSwitchOrgToSameOrg() throws IOException, GigiApiException {
108 assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org1.getId() + "=y", 0));
109 assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org1.getId() + "=y", 0));
111 String res = IOUtils.readURL(get(SwitchOrganisation.PATH));
112 assertThat(res, containsString("Logged in as " + u2.getPreferredName() + ", acting as " + org1.getName()));
117 public void testSwitchOrgToNonOrg() throws IOException, GigiApiException {
119 assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org1.getId() + "=y", 0));
120 String res = IOUtils.readURL(post(SwitchOrganisation.PATH, "org:5000=y"));
121 assertThat(res, containsString("Context switch failed"));
126 public void testSwitchOrgToPersonal() throws IOException, GigiApiException {
128 assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org1.getId() + "=y", 0));
129 assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org-leave=personal", 0));
131 String res = IOUtils.readURL(get(SwitchOrganisation.PATH));
132 assertThat(res, containsString("Logged in as " + u2.getPreferredName()));
137 public void testSwitchOrgPasswordLogin() throws IOException, GigiApiException {
138 cookie = login(email, TEST_PASSWORD);
139 loginCertificate = null;
140 URLConnection uc = get(cookie, SwitchOrganisation.PATH);
141 assertEquals(403, ((HttpURLConnection) uc).getResponseCode());
145 public void testSwitchOrgLoginChallenge() throws IOException, GigiApiException, KeyManagementException, NoSuchAlgorithmException, GeneralSecurityException {
146 loginCertificate = cagent;
147 loginPrivateKey = pkagent;
148 cookie = login(pkagent, cagent.cert());
149 String email = createUniqueName() + "@testdom.com";
150 User u3 = User.getById(createVerificationUser("testworker", "testname", email, TEST_PASSWORD));
151 assertNull(executeBasicWebInteraction(cookie, ViewOrgPage.DEFAULT_PATH + "/" + org1.getId(), "email=" + URLEncoder.encode(u3.getEmail(), "UTF-8") + "&do_affiliate=y&master=y", 1));
152 assertNull(executeBasicWebInteraction(cookie, ViewOrgPage.DEFAULT_PATH + "/" + org2.getId(), "email=" + URLEncoder.encode(u3.getEmail(), "UTF-8") + "&do_affiliate=y&master=y", 1));
154 cookie = cookieWithCertificateLogin(u3);
155 URLConnection uc = get(cookie, SwitchOrganisation.PATH);
156 assertEquals(403, ((HttpURLConnection) uc).getResponseCode());
158 addChallenge(u3.getId(), CATSType.ORG_ADMIN_DP_CHALLENGE_NAME);
160 uc = get(cookie, SwitchOrganisation.PATH);
161 assertEquals(200, ((HttpURLConnection) uc).getResponseCode());