]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/util/AuthorizationContext.java
add: Implement (de)serialisation support for CertificateOwner and derived classes
[gigi.git] / src / org / cacert / gigi / util / AuthorizationContext.java
index 16f458cafd09d934d29686acfab91ce4caac0a80..892f1175d00d376d5dde56bf3ad25295281b644d 100644 (file)
@@ -1,6 +1,8 @@
 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;
@@ -10,20 +12,32 @@ 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 {
+public class AuthorizationContext implements Outputable, Serializable {
 
-    CertificateOwner target;
+    private static final long serialVersionUID = -2596733469159940154L;
 
-    User actor;
+    private CertificateOwner target;
 
-    String supporterTicketId;
+    private 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;
     }
@@ -43,13 +57,6 @@ public class AuthorizationContext implements Outputable {
         return ac.getActor();
     }
 
-    public void setSupporterTicketId(String supporterTicketId) throws GigiApiException {
-        if ( !isInGroup(Group.SUPPORTER)) {
-            throw new GigiApiException("requires a supporter");
-        }
-        this.supporterTicketId = supporterTicketId;
-    }
-
     public String getSupporterTicketId() {
         return supporterTicketId;
     }
@@ -58,26 +65,37 @@ public class AuthorizationContext implements Outputable {
         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<String, Object> vars) {
         out.println("<div>");
-        out.println(l.getTranslation("Logged in as"));
-        out.println(": ");
-
-        if (target != actor) {
-            out.println(((Organisation) target).getName() + " (" + actor.getName().toString() + ")");
-        } else {
-            out.println(actor.getName().toString());
-        }
-
-        out.println(l.getTranslation("with"));
-        out.println(vars.get("loginMethod"));
+        vars.put("username", new Outputable() {
+
+            @Override
+            public void output(PrintWriter out, Language l, Map<String, Object> 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("</div>");
         if (supporterTicketId != null) {
             out.println("<div>");
             out.println(l.getTranslation("SupportTicket: "));
-            out.println(supporterTicketId);
+            out.println(HTMLEncoder.encodeHTML(supporterTicketId));
             out.println("</div>");
         }
     }
+
+    public boolean canAssure() {
+        return target instanceof User && ((User) target).canAssure();
+    }
 }