X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Futil%2FAuthorizationContext.java;h=892f1175d00d376d5dde56bf3ad25295281b644d;hb=c3feb67ae28e66765dfcd2e7d50ddbceb64d92db;hp=4a329a9fd3f1812f92d69795244c7dea567c8b64;hpb=dc10b875c132eb7840a6b9827ec93916076d34f7;p=gigi.git diff --git a/src/org/cacert/gigi/util/AuthorizationContext.java b/src/org/cacert/gigi/util/AuthorizationContext.java index 4a329a9f..892f1175 100644 --- a/src/org/cacert/gigi/util/AuthorizationContext.java +++ b/src/org/cacert/gigi/util/AuthorizationContext.java @@ -1,20 +1,43 @@ package org.cacert.gigi.util; +import java.io.PrintWriter; +import java.io.Serializable; +import java.util.Arrays; +import java.util.Map; + +import org.cacert.gigi.GigiApiException; import org.cacert.gigi.dbObjects.CertificateOwner; import org.cacert.gigi.dbObjects.Group; +import org.cacert.gigi.dbObjects.Organisation; import org.cacert.gigi.dbObjects.User; +import org.cacert.gigi.localisation.Language; +import org.cacert.gigi.output.template.Outputable; +import org.cacert.gigi.output.template.SprintfCommand; + +public class AuthorizationContext implements Outputable, Serializable { + + private static final long serialVersionUID = -2596733469159940154L; -public class AuthorizationContext { + private CertificateOwner target; - CertificateOwner target; + private User actor; - User actor; + private String supporterTicketId; public AuthorizationContext(CertificateOwner target, User actor) { this.target = target; this.actor = actor; } + public AuthorizationContext(User actor, String supporterTicket) throws GigiApiException { + this.target = actor; + this.actor = actor; + if ( !isInGroup(Group.SUPPORTER)) { + throw new GigiApiException("requires a supporter"); + } + supporterTicketId = supporterTicket; + } + public CertificateOwner getTarget() { return target; } @@ -23,7 +46,56 @@ public class AuthorizationContext { return actor; } - public boolean hasRight(Group g) { + public boolean isInGroup(Group g) { return actor.isInGroup(g); } + + public User getActor(AuthorizationContext ac) { + if (ac == null) { + return null; + } + return ac.getActor(); + } + + public String getSupporterTicketId() { + return supporterTicketId; + } + + public boolean canSupport() { + return getSupporterTicketId() != null && isInGroup(Group.SUPPORTER); + } + + private static final SprintfCommand sp = new SprintfCommand("Logged in as {0} via {1}.", Arrays.asList("${username}", "${loginMethod}")); + + private static final SprintfCommand inner = new SprintfCommand("{0} (on behalf of {1})", Arrays.asList("${user}", "${target}")); + + @Override + public void output(PrintWriter out, Language l, Map vars) { + out.println("
"); + vars.put("username", new Outputable() { + + @Override + public void output(PrintWriter out, Language l, Map vars) { + if (target != actor) { + vars.put("user", ((Organisation) target).getName().toString()); + vars.put("target", actor.getPreferredName().toString()); + inner.output(out, l, vars); + } else { + out.println(actor.getPreferredName().toString()); + } + } + }); + sp.output(out, l, vars); + out.println("
"); + if (supporterTicketId != null) { + out.println("
"); + out.println(l.getTranslation("SupportTicket: ")); + out.println(HTMLEncoder.encodeHTML(supporterTicketId)); + out.println("
"); + } + } + + public boolean canAssure() { + return target instanceof User && ((User) target).canAssure(); + } }