]> WPIA git - gigi.git/blob - src/club/wpia/gigi/pages/MainPage.java
add: ensure that for TTPAgent action there is a valid TTPAgent Challenge
[gigi.git] / src / club / wpia / gigi / pages / MainPage.java
1 package club.wpia.gigi.pages;
2
3 import java.io.IOException;
4 import java.util.Iterator;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.Set;
8
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11
12 import club.wpia.gigi.dbObjects.Certificate;
13 import club.wpia.gigi.dbObjects.Domain;
14 import club.wpia.gigi.dbObjects.EmailAddress;
15 import club.wpia.gigi.dbObjects.Group;
16 import club.wpia.gigi.dbObjects.Organisation;
17 import club.wpia.gigi.dbObjects.User;
18 import club.wpia.gigi.localisation.Language;
19 import club.wpia.gigi.output.GroupList;
20 import club.wpia.gigi.output.template.IterableDataset;
21 import club.wpia.gigi.output.template.Template;
22
23 public class MainPage extends Page {
24
25     private static final Template notLog = new Template(MainPage.class.getResource("MainPageNotLogin.templ"));
26
27     public MainPage() {
28         super("Home");
29     }
30
31     @Override
32     public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
33         Map<String, Object> vars = getDefaultVars(req);
34         if (LoginPage.getUser(req) != null) {
35             User u = LoginPage.getUser(req);
36             vars.put("username", u.getPreferredName());
37             final Set<Group> gr = u.getGroups();
38             vars.put("support-groups", new GroupList(gr, true));
39             vars.put("groups", new GroupList(gr, false));
40             vars.put("ra-agent", u.canVerify());
41             vars.put("vp", u.getVerificationPoints());
42             vars.put("xp", u.getExperiencePoints());
43
44
45             vars.put("catsinfo", false);
46             if (u.canVerify() && !u.hasValidRAChallenge()) {
47                 vars.put("catsinfo", true);
48                 vars.put("catsra", true);
49             }
50             if (u.isInGroup(Group.SUPPORTER) && !u.hasValidSupportChallenge()) {
51                 vars.put("catsinfo", true);
52                 vars.put("catssupport", true);
53             }
54             if (u.isInGroup(Group.ORG_AGENT) && !u.hasValidOrgAgentChallenge()) {
55                 vars.put("catsinfo", true);
56                 vars.put("catsorgagent", true);
57             }
58             if (u.isInGroup(Group.TTP_AGENT) && !u.hasValidTTPAgentChallenge()) {
59                 vars.put("catsinfo", true);
60                 vars.put("catsttpagent", true);
61             }
62
63             Certificate[] c = u.getCertificates(false);
64             vars.put("c-no", c.length);
65
66             final EmailAddress[] emails = u.getEmails();
67             IterableDataset ds = new IterableDataset() {
68
69                 private int point = 0;
70
71                 @Override
72                 public boolean next(Language l, Map<String, Object> vars) {
73                     if (point >= emails.length) {
74                         return false;
75                     }
76                     EmailAddress emailAddress = emails[point];
77                     vars.put("verification", l.getTranslation(emailAddress.isVerified() ? "Verified" : "Unverified"));
78                     vars.put("last_verification", emailAddress.getLastPing(true));
79                     vars.put("address", emailAddress.getAddress());
80                     point++;
81                     return true;
82                 }
83             };
84             vars.put("emails", ds);
85
86             final Domain[] doms = u.getDomains();
87             IterableDataset dts = new IterableDataset() {
88
89                 private int point = 0;
90
91                 @Override
92                 public boolean next(Language l, Map<String, Object> vars) {
93                     if (point >= doms.length) {
94                         return false;
95                     }
96                     Domain domain = doms[point];
97                     vars.put("domain", domain.getSuffix());
98                     vars.put("status", l.getTranslation(domain.isVerified() ? "Verified" : "Unverified"));
99                     point++;
100                     return true;
101                 }
102             };
103             vars.put("domains", dts);
104             vars.put("nodomains", doms.length == 0);
105
106             final List<Organisation> o = u.getOrganisations();
107             vars.put("orgas", new IterableDataset() {
108
109                 Iterator<Organisation> it = o.iterator();
110
111                 @Override
112                 public boolean next(Language l, Map<String, Object> vars) {
113                     if ( !it.hasNext()) {
114                         return false;
115                     }
116                     Organisation o = it.next();
117                     vars.put("orgName", o.getName());
118                     vars.put("orgID", o.getId());
119                     return true;
120                 }
121             });
122             vars.put("hasorgs", !o.isEmpty());
123
124             if (u.isInGroup(Group.SUPPORTER) || u.isInGroup(Group.ORG_AGENT) || u.isInGroup(Group.TTP_AGENT) || u.canVerify() || !o.isEmpty()) {
125                 vars.put("certlogin", LoginPage.getAuthorizationContext(req).isStronglyAuthenticated());
126                 vars.put("certlogininfo", true);
127             } else {
128                 vars.put("certlogininfo", false);
129             }
130
131             getDefaultTemplate().output(resp.getWriter(), getLanguage(req), vars);
132
133         } else {
134             notLog.output(resp.getWriter(), getLanguage(req), vars);
135         }
136     }
137
138     @Override
139     public boolean needsLogin() {
140         return false;
141     }
142 }