]> WPIA git - gigi.git/blob - src/org/cacert/gigi/util/AuthorizationContext.java
upd: fixes wording
[gigi.git] / src / org / cacert / gigi / util / AuthorizationContext.java
1 package org.cacert.gigi.util;
2
3 import java.io.PrintWriter;
4 import java.util.Arrays;
5 import java.util.Map;
6
7 import org.cacert.gigi.GigiApiException;
8 import org.cacert.gigi.dbObjects.CertificateOwner;
9 import org.cacert.gigi.dbObjects.Group;
10 import org.cacert.gigi.dbObjects.Organisation;
11 import org.cacert.gigi.dbObjects.User;
12 import org.cacert.gigi.localisation.Language;
13 import org.cacert.gigi.output.template.Outputable;
14 import org.cacert.gigi.output.template.SprintfCommand;
15
16 public class AuthorizationContext implements Outputable {
17
18     CertificateOwner target;
19
20     User actor;
21
22     String supporterTicketId;
23
24     public AuthorizationContext(CertificateOwner target, User actor) {
25         this.target = target;
26         this.actor = actor;
27     }
28
29     public AuthorizationContext(User actor, String supporterTicket) throws GigiApiException {
30         this.target = actor;
31         this.actor = actor;
32         if ( !isInGroup(Group.SUPPORTER)) {
33             throw new GigiApiException("requires a supporter");
34         }
35         supporterTicketId = supporterTicket;
36     }
37
38     public CertificateOwner getTarget() {
39         return target;
40     }
41
42     public User getActor() {
43         return actor;
44     }
45
46     public boolean isInGroup(Group g) {
47         return actor.isInGroup(g);
48     }
49
50     public User getActor(AuthorizationContext ac) {
51         if (ac == null) {
52             return null;
53         }
54         return ac.getActor();
55     }
56
57     public String getSupporterTicketId() {
58         return supporterTicketId;
59     }
60
61     public boolean canSupport() {
62         return getSupporterTicketId() != null && isInGroup(Group.SUPPORTER);
63     }
64
65     private static final SprintfCommand sp = new SprintfCommand("Logged in as {0} via {1}.", Arrays.asList("${username}", "${loginMethod}"));
66
67     private static final SprintfCommand inner = new SprintfCommand("{0} (on behalf of {1})", Arrays.asList("${user}", "${target}"));
68
69     @Override
70     public void output(PrintWriter out, Language l, Map<String, Object> vars) {
71         out.println("<div>");
72         vars.put("username", new Outputable() {
73
74             @Override
75             public void output(PrintWriter out, Language l, Map<String, Object> vars) {
76                 if (target != actor) {
77                     vars.put("user", ((Organisation) target).getName().toString());
78                     vars.put("target", actor.getPreferredName().toString());
79                     inner.output(out, l, vars);
80                 } else {
81                     out.println(actor.getPreferredName().toString());
82                 }
83             }
84         });
85         sp.output(out, l, vars);
86         out.println("</div>");
87         if (supporterTicketId != null) {
88             out.println("<div>");
89             out.println(l.getTranslation("SupportTicket: "));
90             out.println(HTMLEncoder.encodeHTML(supporterTicketId));
91             out.println("</div>");
92         }
93     }
94
95     public boolean canAssure() {
96         return target instanceof User && ((User) target).canAssure();
97     }
98 }