From: INOPIAE Date: Tue, 30 Jan 2018 06:00:03 +0000 (+0100) Subject: fix: move switch to organisation context to separate page X-Git-Url: https://code.wpia.club/?p=gigi.git;a=commitdiff_plain;h=ea24bc217aacd2f5811288286d251866e498712b fix: move switch to organisation context to separate page fixes issue #125 Change-Id: Id70d645e720cc43a0b28fc5c7355ba3492495d59 --- diff --git a/src/club/wpia/gigi/Gigi.java b/src/club/wpia/gigi/Gigi.java index 6d8996c9..035f1a6f 100644 --- a/src/club/wpia/gigi/Gigi.java +++ b/src/club/wpia/gigi/Gigi.java @@ -71,6 +71,7 @@ import club.wpia.gigi.pages.main.CertStatusRequestPage; import club.wpia.gigi.pages.main.KeyCompromisePage; import club.wpia.gigi.pages.main.RegisterPage; import club.wpia.gigi.pages.orga.CreateOrgPage; +import club.wpia.gigi.pages.orga.SwitchOrganisation; import club.wpia.gigi.pages.orga.ViewOrgPage; import club.wpia.gigi.pages.statistics.StatisticsRoles; import club.wpia.gigi.pages.wot.Points; @@ -164,6 +165,7 @@ public final class Gigi extends HttpServlet { putPage(TTPAdminPage.PATH + "/*", new TTPAdminPage(), admMenu); putPage(CreateOrgPage.DEFAULT_PATH, new CreateOrgPage(), orgAdm); putPage(ViewOrgPage.DEFAULT_PATH + "/*", new ViewOrgPage(), orgAdm); + putPage(SwitchOrganisation.PATH, new SwitchOrganisation(), orgAdm); Menu support = createMenu("Support Console"); putPage(SupportEnterTicketPage.PATH, new SupportEnterTicketPage(), support); diff --git a/src/club/wpia/gigi/pages/account/MyDetails.java b/src/club/wpia/gigi/pages/account/MyDetails.java index 12d127fa..b4a52d4e 100644 --- a/src/club/wpia/gigi/pages/account/MyDetails.java +++ b/src/club/wpia/gigi/pages/account/MyDetails.java @@ -10,6 +10,7 @@ import javax.servlet.http.HttpServletResponse; import club.wpia.gigi.output.template.Form; import club.wpia.gigi.pages.LoginPage; import club.wpia.gigi.pages.Page; +import club.wpia.gigi.pages.orga.MyOrganisationsForm; public class MyDetails extends Page { diff --git a/src/club/wpia/gigi/pages/account/MyOrganisationsForm.templ b/src/club/wpia/gigi/pages/account/MyOrganisationsForm.templ deleted file mode 100644 index 96d7bbe7..00000000 --- a/src/club/wpia/gigi/pages/account/MyOrganisationsForm.templ +++ /dev/null @@ -1,10 +0,0 @@ - -

- - - - -
- - - diff --git a/src/club/wpia/gigi/pages/orga/CreateOrgPage.java b/src/club/wpia/gigi/pages/orga/CreateOrgPage.java index 4eab3d6e..98076fe9 100644 --- a/src/club/wpia/gigi/pages/orga/CreateOrgPage.java +++ b/src/club/wpia/gigi/pages/orga/CreateOrgPage.java @@ -1,7 +1,6 @@ package club.wpia.gigi.pages.orga; import java.io.IOException; -import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -27,6 +26,6 @@ public class CreateOrgPage extends ManagedFormPage { @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { - new CreateOrgForm(req).output(resp.getWriter(), getLanguage(req), new HashMap()); + new CreateOrgForm(req).output(resp.getWriter(), getLanguage(req), getDefaultVars(req)); } } diff --git a/src/club/wpia/gigi/pages/account/MyOrganisationsForm.java b/src/club/wpia/gigi/pages/orga/MyOrganisationsForm.java similarity index 94% rename from src/club/wpia/gigi/pages/account/MyOrganisationsForm.java rename to src/club/wpia/gigi/pages/orga/MyOrganisationsForm.java index 835973a1..8858c5c0 100644 --- a/src/club/wpia/gigi/pages/account/MyOrganisationsForm.java +++ b/src/club/wpia/gigi/pages/orga/MyOrganisationsForm.java @@ -1,4 +1,4 @@ -package club.wpia.gigi.pages.account; +package club.wpia.gigi.pages.orga; import java.io.PrintWriter; import java.util.Enumeration; @@ -33,7 +33,7 @@ public class MyOrganisationsForm extends Form { public SubmissionResult submit(HttpServletRequest req) throws GigiApiException { if (req.getParameter("org-leave") != null) { req.getSession().setAttribute(Gigi.AUTH_CONTEXT, new AuthorizationContext(target.getActor(), target.getActor())); - return new RedirectResult(MyDetails.PATH); + return new RedirectResult(SwitchOrganisation.PATH); } Enumeration i = req.getParameterNames(); int orgId = -1; @@ -52,7 +52,7 @@ public class MyOrganisationsForm extends Form { if (org.getId() == orgId) { req.getSession().setAttribute(Gigi.AUTH_CONTEXT, new AuthorizationContext(org, target.getActor())); - return new RedirectResult(MyDetails.PATH); + return new RedirectResult(SwitchOrganisation.PATH); } } throw new PermamentFormException(new GigiApiException("Context switch failed.")); diff --git a/src/club/wpia/gigi/pages/orga/MyOrganisationsForm.templ b/src/club/wpia/gigi/pages/orga/MyOrganisationsForm.templ new file mode 100644 index 00000000..5c63f04f --- /dev/null +++ b/src/club/wpia/gigi/pages/orga/MyOrganisationsForm.templ @@ -0,0 +1,9 @@ +

+ + + + + + + +
diff --git a/src/club/wpia/gigi/pages/orga/SwitchOrganisation.java b/src/club/wpia/gigi/pages/orga/SwitchOrganisation.java new file mode 100644 index 00000000..16dfe6ed --- /dev/null +++ b/src/club/wpia/gigi/pages/orga/SwitchOrganisation.java @@ -0,0 +1,29 @@ +package club.wpia.gigi.pages.orga; + +import java.io.IOException; +import java.util.HashMap; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import club.wpia.gigi.pages.ManagedFormPage; +import club.wpia.gigi.util.AuthorizationContext; + +public class SwitchOrganisation extends ManagedFormPage { + + public static final String PATH = "/orga/switch-orga"; + + public SwitchOrganisation() { + super("Switch to Organisation", MyOrganisationsForm.class); + } + + @Override + public boolean isPermitted(AuthorizationContext ac) { + return ac != null && ac.getActor().getOrganisations().size() != 0; + } + + @Override + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + new MyOrganisationsForm(req).output(resp.getWriter(), getLanguage(req), new HashMap()); + } +} diff --git a/tests/club/wpia/gigi/pages/orga/TestOrgSwitch.java b/tests/club/wpia/gigi/pages/orga/TestOrgSwitch.java new file mode 100644 index 00000000..94586e34 --- /dev/null +++ b/tests/club/wpia/gigi/pages/orga/TestOrgSwitch.java @@ -0,0 +1,121 @@ +package club.wpia.gigi.pages.orga; + +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.*; + +import java.io.IOException; +import java.net.URLEncoder; +import java.sql.SQLException; + +import org.junit.After; +import org.junit.Test; + +import club.wpia.gigi.GigiApiException; +import club.wpia.gigi.dbObjects.Organisation; +import club.wpia.gigi.dbObjects.User; +import club.wpia.gigi.testUtils.IOUtils; +import club.wpia.gigi.testUtils.OrgTest; + +public class TestOrgSwitch extends OrgTest { + + private User u2; + + private Organisation org1 = createUniqueOrg(); + + private Organisation org2 = createUniqueOrg(); + + public TestOrgSwitch() throws IOException, GigiApiException { + + assertEquals(403, get(SwitchOrganisation.PATH).getResponseCode()); + + String email = createUniqueName() + "@testdom.com"; + u2 = User.getById(createVerificationUser("testworker", "testname", email, TEST_PASSWORD)); + assertNull(executeBasicWebInteraction(cookie, ViewOrgPage.DEFAULT_PATH + "/" + org1.getId(), "email=" + URLEncoder.encode(u2.getEmail(), "UTF-8") + "&do_affiliate=y&master=y", 1)); + assertNull(executeBasicWebInteraction(cookie, ViewOrgPage.DEFAULT_PATH + "/" + org2.getId(), "email=" + URLEncoder.encode(u2.getEmail(), "UTF-8") + "&do_affiliate=y&master=y", 1)); + + // login with new user u2 + cookie = login(email, TEST_PASSWORD); + } + + @After + public void purgeDbAfterTest() throws SQLException, IOException { + purgeDatabase(); + } + + @Test + public void testSwitchToOrg() throws IOException, GigiApiException { + + assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org1.getId() + "=y", 0)); + + String res = IOUtils.readURL(get(SwitchOrganisation.PATH)); + assertThat(res, containsString("Logged in as " + org1.getName() + " (on behalf of " + u2.getPreferredName())); + + } + + @Test + public void testSwitchToNonOrg() throws IOException, GigiApiException { + + String res = IOUtils.readURL(post(SwitchOrganisation.PATH, "org:5000=y")); + assertThat(res, containsString("Context switch failed")); + + } + + @Test + public void testSwitchToPersonal() throws IOException, GigiApiException { + + assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org-leave=personal", 0)); + + String res = IOUtils.readURL(get(SwitchOrganisation.PATH)); + assertThat(res, containsString("Logged in as " + u2.getPreferredName())); + + assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org-leave=personal", 0)); + + res = IOUtils.readURL(get(SwitchOrganisation.PATH)); + assertThat(res, containsString("Logged in as " + u2.getPreferredName())); + + } + + @Test + public void testSwitchOrgToOrg() throws IOException, GigiApiException { + + assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org1.getId() + "=y", 0)); + assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org2.getId() + "=y", 0)); + + String res = IOUtils.readURL(get(SwitchOrganisation.PATH)); + assertThat(res, containsString("Logged in as " + org2.getName() + " (on behalf of " + u2.getPreferredName())); + + } + + @Test + public void testSwitchOrgToSameOrg() throws IOException, GigiApiException { + + assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org1.getId() + "=y", 0)); + assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org1.getId() + "=y", 0)); + + String res = IOUtils.readURL(get(SwitchOrganisation.PATH)); + assertThat(res, containsString("Logged in as " + org1.getName() + " (on behalf of " + u2.getPreferredName())); + + } + + @Test + public void testSwitchOrgToNonOrg() throws IOException, GigiApiException { + + assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org1.getId() + "=y", 0)); + String res = IOUtils.readURL(post(SwitchOrganisation.PATH, "org:5000=y")); + assertThat(res, containsString("Context switch failed")); + + } + + @Test + public void testSwitchOrgToPersonal() throws IOException, GigiApiException { + + assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org:" + org1.getId() + "=y", 0)); + assertNull(executeBasicWebInteraction(cookie, SwitchOrganisation.PATH, "org-leave=personal", 0)); + + String res = IOUtils.readURL(get(SwitchOrganisation.PATH)); + assertThat(res, containsString("Logged in as " + u2.getPreferredName())); + + } + +}