]> WPIA git - gigi.git/blob - src/club/wpia/gigi/pages/orga/MyOrganisationsForm.java
add: ensure that for Org Administrator actions certificate login is used
[gigi.git] / src / club / wpia / gigi / pages / orga / MyOrganisationsForm.java
1 package club.wpia.gigi.pages.orga;
2
3 import java.io.PrintWriter;
4 import java.util.Enumeration;
5 import java.util.Iterator;
6 import java.util.List;
7 import java.util.Map;
8
9 import javax.servlet.http.HttpServletRequest;
10
11 import club.wpia.gigi.Gigi;
12 import club.wpia.gigi.GigiApiException;
13 import club.wpia.gigi.dbObjects.Organisation;
14 import club.wpia.gigi.localisation.Language;
15 import club.wpia.gigi.output.template.Form;
16 import club.wpia.gigi.output.template.IterableDataset;
17 import club.wpia.gigi.output.template.Template;
18 import club.wpia.gigi.pages.LoginPage;
19 import club.wpia.gigi.util.AuthorizationContext;
20
21 public class MyOrganisationsForm extends Form {
22
23     private AuthorizationContext target;
24
25     public MyOrganisationsForm(HttpServletRequest hsr) {
26         super(hsr);
27         target = LoginPage.getAuthorizationContext(hsr);
28     }
29
30     private static final Template template = new Template(MyOrganisationsForm.class.getResource("MyOrganisationsForm.templ"));
31
32     @Override
33     public SubmissionResult submit(HttpServletRequest req) throws GigiApiException {
34         AuthorizationContext sessionAc = (AuthorizationContext) req.getSession().getAttribute(Gigi.AUTH_CONTEXT);
35         if (req.getParameter("org-leave") != null) {
36             req.getSession().setAttribute(Gigi.AUTH_CONTEXT, new AuthorizationContext(target.getActor(), target.getActor(), sessionAc.isStronglyAuthenticated()));
37             return new RedirectResult(SwitchOrganisation.PATH);
38         }
39         Enumeration<String> i = req.getParameterNames();
40         int orgId = -1;
41         while (i.hasMoreElements()) {
42             String s = i.nextElement();
43             if (s.startsWith("org:")) {
44                 int id = Integer.parseInt(s.substring(4));
45                 if (orgId == -1) {
46                     orgId = id;
47                 } else {
48                     throw new GigiApiException("Error: invalid parameter.");
49                 }
50             }
51         }
52         for (Organisation org : target.getActor().getOrganisations()) {
53             if (org.getId() == orgId) {
54
55                 req.getSession().setAttribute(Gigi.AUTH_CONTEXT, new AuthorizationContext(org, target.getActor(), sessionAc.isStronglyAuthenticated()));
56                 return new RedirectResult(SwitchOrganisation.PATH);
57             }
58         }
59         throw new PermamentFormException(new GigiApiException("Context switch failed."));
60     }
61
62     @Override
63     protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
64         final List<Organisation> o = target.getActor().getOrganisations();
65         vars.put("certlogin", target.isStronglyAuthenticated());
66         if (target.getTarget() != target.getActor()) {
67             vars.put("personal", target.getTarget() != target.getActor());
68         }
69         vars.put("orgas", new IterableDataset() {
70
71             Iterator<Organisation> it = o.iterator();
72
73             @Override
74             public boolean next(Language l, Map<String, Object> vars) {
75                 if ( !it.hasNext()) {
76                     return false;
77                 }
78                 Organisation o = it.next();
79                 vars.put("orgName", o.getName());
80                 vars.put("orgID", o.getId());
81                 return true;
82             }
83         });
84         template.output(out, l, vars);
85
86     }
87
88 }