]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/util/AuthorizationContext.java
upd: prevent supporter and org-actor at same time
[gigi.git] / src / org / cacert / gigi / util / AuthorizationContext.java
index 4a329a9fd3f1812f92d69795244c7dea567c8b64..412ebc5a66e18872571f70c7d33c47c583802333 100644 (file)
@@ -1,20 +1,38 @@
 package org.cacert.gigi.util;
 
+import java.io.PrintWriter;
+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;
 
-public class AuthorizationContext {
+public class AuthorizationContext implements Outputable {
 
     CertificateOwner target;
 
     User actor;
 
+    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 +41,45 @@ 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);
+    }
+
+    @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"));
+        out.println("</div>");
+        if (supporterTicketId != null) {
+            out.println("<div>");
+            out.println(l.getTranslation("SupportTicket: "));
+            out.println(supporterTicketId);
+            out.println("</div>");
+        }
+    }
 }