]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/account/MyOrganisationsForm.java
upd: use a more strict pattern for handling forms
[gigi.git] / src / org / cacert / gigi / pages / account / MyOrganisationsForm.java
1 package org.cacert.gigi.pages.account;
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 org.cacert.gigi.Gigi;
12 import org.cacert.gigi.GigiApiException;
13 import org.cacert.gigi.dbObjects.Organisation;
14 import org.cacert.gigi.localisation.Language;
15 import org.cacert.gigi.output.template.Form;
16 import org.cacert.gigi.output.template.IterableDataset;
17 import org.cacert.gigi.output.template.Template;
18 import org.cacert.gigi.pages.LoginPage;
19 import org.cacert.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 boolean submit(HttpServletRequest req) throws GigiApiException {
34         if (req.getParameter("org-leave") != null) {
35             req.getSession().setAttribute(Gigi.AUTH_CONTEXT, new AuthorizationContext(target.getActor(), target.getActor()));
36             return true;
37         }
38         Enumeration<String> i = req.getParameterNames();
39         int orgId = -1;
40         while (i.hasMoreElements()) {
41             String s = i.nextElement();
42             if (s.startsWith("org:")) {
43                 int id = Integer.parseInt(s.substring(4));
44                 if (orgId == -1) {
45                     orgId = id;
46                 } else {
47                     throw new GigiApiException("Error: invalid parameter.");
48                 }
49             }
50         }
51         for (Organisation org : target.getActor().getOrganisations()) {
52             if (org.getId() == orgId) {
53
54                 req.getSession().setAttribute(Gigi.AUTH_CONTEXT, new AuthorizationContext(org, target.getActor()));
55                 return true;
56             }
57         }
58         System.out.println("Switch fialed");
59         return false;
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         if (target.getTarget() != target.getActor()) {
66             vars.put("personal", target.getTarget() != target.getActor());
67         }
68         vars.put("orgas", new IterableDataset() {
69
70             Iterator<Organisation> it = o.iterator();
71
72             @Override
73             public boolean next(Language l, Map<String, Object> vars) {
74                 if ( !it.hasNext()) {
75                     return false;
76                 }
77                 Organisation o = it.next();
78                 vars.put("orgName", o.getName());
79                 vars.put("orgID", o.getId());
80                 return true;
81             }
82         });
83         template.output(out, l, vars);
84
85     }
86
87 }