]> WPIA git - gigi.git/blob - src/club/wpia/gigi/util/AuthorizationContext.java
66c65450bb3fac8180a9025f2af99b465482d3a8
[gigi.git] / src / club / wpia / gigi / util / AuthorizationContext.java
1 package club.wpia.gigi.util;
2
3 import java.io.PrintWriter;
4 import java.io.Serializable;
5 import java.util.Arrays;
6 import java.util.Map;
7
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;
16
17 public class AuthorizationContext implements Outputable, Serializable {
18
19     private static final long serialVersionUID = -2596733469159940154L;
20
21     private final CertificateOwner target;
22
23     private final User actor;
24
25     private final String supporterTicketId;
26
27     private final boolean isStronglyAuthenticated;
28
29     public AuthorizationContext(CertificateOwner target, User actor, boolean isStronglyAuthenticated) {
30         if (actor == null) {
31             throw new Error("Internal Error: The actor of an AuthorizationContext must not be null!");
32         }
33         if (target == null) {
34             throw new Error("Internal Error: The target of an AuthorizationContext must not be null!");
35         }
36         this.target = target;
37         this.actor = actor;
38         this.supporterTicketId = null;
39         this.isStronglyAuthenticated = isStronglyAuthenticated;
40     }
41
42     public AuthorizationContext(User actor, String supporterTicket) throws GigiApiException {
43         if (actor == null) {
44             throw new Error("Internal Error: The actor of an AuthorizationContext must not be null!");
45         }
46         if (supporterTicket == null) {
47             throw new Error("Internal Error: The AuthorizationContext for a Support Engineer requires a valid ticket!");
48         }
49         this.target = actor;
50         this.actor = actor;
51         if ( !isInGroup(Group.SUPPORTER)) {
52             throw new GigiApiException("requires a supporter");
53         }
54         this.supporterTicketId = supporterTicket;
55         this.isStronglyAuthenticated = true;
56     }
57
58     public CertificateOwner getTarget() {
59         return target;
60     }
61
62     public User getActor() {
63         return actor;
64     }
65
66     public boolean isInGroup(Group g) {
67         return actor.isInGroup(g);
68     }
69
70     public static User getActor(AuthorizationContext ac) {
71         if (ac == null) {
72             return null;
73         }
74         return ac.getActor();
75     }
76
77     public String getSupporterTicketId() {
78         return supporterTicketId;
79     }
80
81     public boolean canSupport() {
82         return getSupporterTicketId() != null && isInGroup(Group.SUPPORTER) && isStronglyAuthenticated();
83     }
84
85     private static final SprintfCommand sp = new SprintfCommand("Logged in as {0} via {1}.", Arrays.asList("${username", "${loginMethod"));
86
87     private static final SprintfCommand inner = new SprintfCommand("{0}, acting as {1},", Arrays.asList("${user", "${target"));
88
89     @Override
90     public void output(PrintWriter out, Language l, Map<String, Object> vars) {
91         out.println("<div>");
92         vars.put("username", new Outputable() {
93
94             @Override
95             public void output(PrintWriter out, Language l, Map<String, Object> vars) {
96                 if (target != actor) {
97                     vars.put("target", ((Organisation) target).getName().toString());
98                     vars.put("user", actor.getPreferredName().toString());
99                     inner.output(out, l, vars);
100                 } else {
101                     out.println(actor.getPreferredName().toString());
102                 }
103             }
104         });
105         sp.output(out, l, vars);
106         out.println("</div>");
107         if (supporterTicketId != null) {
108             out.println("<div>");
109             out.println(l.getTranslation("SupportTicket: "));
110             out.println(HTMLEncoder.encodeHTML(supporterTicketId));
111             out.println("</div>");
112         }
113     }
114
115     public boolean canVerify() {
116         return target instanceof User && ((User) target).canVerify() && isStronglyAuthenticated() && ((User) target).hasValidRAChallenge();
117     }
118
119     public boolean isStronglyAuthenticated() {
120         return isStronglyAuthenticated;
121     }
122 }