1 package org.cacert.gigi.util;
3 import java.io.PrintWriter;
4 import java.util.Arrays;
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;
16 public class AuthorizationContext implements Outputable {
18 CertificateOwner target;
22 String supporterTicketId;
24 public AuthorizationContext(CertificateOwner target, User actor) {
29 public AuthorizationContext(User actor, String supporterTicket) throws GigiApiException {
32 if ( !isInGroup(Group.SUPPORTER)) {
33 throw new GigiApiException("requires a supporter");
35 supporterTicketId = supporterTicket;
38 public CertificateOwner getTarget() {
42 public User getActor() {
46 public boolean isInGroup(Group g) {
47 return actor.isInGroup(g);
50 public User getActor(AuthorizationContext ac) {
57 public String getSupporterTicketId() {
58 return supporterTicketId;
61 public boolean canSupport() {
62 return getSupporterTicketId() != null && isInGroup(Group.SUPPORTER);
65 private static final SprintfCommand sp = new SprintfCommand("Logged in as {0} via {1}.", Arrays.asList("${username}", "${loginMethod}"));
67 private static final SprintfCommand inner = new SprintfCommand("{0} (on behalf of {1})", Arrays.asList("${user}", "${target}"));
70 public void output(PrintWriter out, Language l, Map<String, Object> vars) {
72 vars.put("username", new Outputable() {
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.getName().toString());
79 inner.output(out, l, vars);
81 out.println(actor.getName().toString());
85 sp.output(out, l, vars);
86 out.println("</div>");
87 if (supporterTicketId != null) {
89 out.println(l.getTranslation("SupportTicket: "));
90 out.println(HTMLEncoder.encodeHTML(supporterTicketId));
91 out.println("</div>");
95 public boolean canAssure() {
96 return target instanceof User && ((User) target).canAssure();