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 CertificateOwner target;
25 private String supporterTicketId;
27 public AuthorizationContext(CertificateOwner target, User actor) {
32 public AuthorizationContext(User actor, String supporterTicket) throws GigiApiException {
35 if ( !isInGroup(Group.SUPPORTER)) {
36 throw new GigiApiException("requires a supporter");
38 supporterTicketId = supporterTicket;
41 public CertificateOwner getTarget() {
45 public User getActor() {
49 public boolean isInGroup(Group g) {
50 return actor.isInGroup(g);
53 public User getActor(AuthorizationContext ac) {
60 public String getSupporterTicketId() {
61 return supporterTicketId;
64 public boolean canSupport() {
65 return getSupporterTicketId() != null && isInGroup(Group.SUPPORTER);
68 private static final SprintfCommand sp = new SprintfCommand("Logged in as {0} via {1}.", Arrays.asList("${username", "${loginMethod"));
70 private static final SprintfCommand inner = new SprintfCommand("{0} (on behalf of {1})", Arrays.asList("${user", "${target"));
73 public void output(PrintWriter out, Language l, Map<String, Object> vars) {
75 vars.put("username", new Outputable() {
78 public void output(PrintWriter out, Language l, Map<String, Object> vars) {
79 if (target != actor) {
80 vars.put("user", ((Organisation) target).getName().toString());
81 vars.put("target", actor.getPreferredName().toString());
82 inner.output(out, l, vars);
84 out.println(actor.getPreferredName().toString());
88 sp.output(out, l, vars);
89 out.println("</div>");
90 if (supporterTicketId != null) {
92 out.println(l.getTranslation("SupportTicket: "));
93 out.println(HTMLEncoder.encodeHTML(supporterTicketId));
94 out.println("</div>");
98 public boolean canVerify() {
99 return target instanceof User && ((User) target).canVerify();