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