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