1 package club.wpia.gigi.util;
3 import java.io.PrintWriter;
4 import java.io.Serializable;
5 import java.util.Arrays;
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;
17 public class AuthorizationContext implements Outputable, Serializable {
19 private static final long serialVersionUID = -2596733469159940154L;
21 private final CertificateOwner target;
23 private final User actor;
25 private final String supporterTicketId;
27 public AuthorizationContext(CertificateOwner target, User actor) {
29 throw new Error("Internal Error: The actor of an AuthorizationContext must not be null!");
32 throw new Error("Internal Error: The target of an AuthorizationContext must not be null!");
36 this.supporterTicketId = null;
39 public AuthorizationContext(User actor, String supporterTicket) throws GigiApiException {
41 throw new Error("Internal Error: The actor of an AuthorizationContext must not be null!");
43 if (supporterTicket == null) {
44 throw new Error("Internal Error: The AuthorizationContext for a Support Engineer requires a valid ticket!");
48 if ( !isInGroup(Group.SUPPORTER)) {
49 throw new GigiApiException("requires a supporter");
51 this.supporterTicketId = supporterTicket;
54 public CertificateOwner getTarget() {
58 public User getActor() {
62 public boolean isInGroup(Group g) {
63 return actor.isInGroup(g);
66 public static User getActor(AuthorizationContext ac) {
73 public String getSupporterTicketId() {
74 return supporterTicketId;
77 public boolean canSupport() {
78 return getSupporterTicketId() != null && isInGroup(Group.SUPPORTER);
81 private static final SprintfCommand sp = new SprintfCommand("Logged in as {0} via {1}.", Arrays.asList("${username", "${loginMethod"));
83 private static final SprintfCommand inner = new SprintfCommand("{0}, acting as {1},", Arrays.asList("${user", "${target"));
86 public void output(PrintWriter out, Language l, Map<String, Object> vars) {
88 vars.put("username", new Outputable() {
91 public void output(PrintWriter out, Language l, Map<String, Object> vars) {
92 if (target != actor) {
93 vars.put("target", ((Organisation) target).getName().toString());
94 vars.put("user", actor.getPreferredName().toString());
95 inner.output(out, l, vars);
97 out.println(actor.getPreferredName().toString());
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>");
111 public boolean canVerify() {
112 return target instanceof User && ((User) target).canVerify();