1 package com.atlassian.sal.api.auth;
2
3 import java.io.Serializable;
4 import java.security.Principal;
5
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 import com.atlassian.sal.api.message.Message;
10
11
12
13
14
15
16 public interface Authenticator
17 {
18
19
20
21
22
23
24 Result authenticate(HttpServletRequest request, HttpServletResponse response);
25
26
27
28
29
30 static class Result
31 {
32 private final Result.Status status;
33 private final Message message;
34 private final Principal principal;
35
36 Result(final Result.Status status, final Message message)
37 {
38 this(status, message, null);
39 }
40
41 Result(final Result.Status status, final Message message, final Principal principal)
42 {
43 if (status == null)
44 {
45 throw new NullPointerException("status");
46 }
47 if (message == null)
48 {
49 throw new NullPointerException("message");
50 }
51 this.status = status;
52 this.message = message;
53 this.principal = principal;
54 }
55
56 public Result.Status getStatus()
57 {
58 return status;
59 }
60
61 public String getMessage()
62 {
63 return message.toString();
64 }
65
66 public Principal getPrincipal()
67 {
68 return principal;
69 }
70
71 public static enum Status
72 {
73 SUCCESS("success"),
74 FAILED("failed"),
75 ERROR("error"),
76 NO_ATTEMPT("no attempt");
77
78 private final String name;
79
80 private Status(final String name)
81 {
82 this.name = name;
83 }
84
85 @Override
86 public String toString()
87 {
88 return name;
89 }
90 }
91
92 private static final Message NO_ATTEMPT_MESSAGE = new Message()
93 {
94 public Serializable[] getArguments()
95 {
96 return null;
97 }
98
99 public String getKey()
100 {
101 return "No authentication attempted";
102 }
103 };
104
105 private static final Message SUCCESS_MESSAGE = new Message()
106 {
107 public Serializable[] getArguments()
108 {
109 return null;
110 }
111
112 public String getKey()
113 {
114 return "Successful authentication";
115 }
116 };
117
118 public static final class NoAttempt extends Result
119 {
120 public NoAttempt()
121 {
122 super(Status.NO_ATTEMPT, NO_ATTEMPT_MESSAGE);
123 }
124 }
125
126 public static final class Error extends Result
127 {
128 public Error(final Message message)
129 {
130 super(Status.ERROR, message);
131 }
132 }
133
134 public static final class Failure extends Result
135 {
136 public Failure(final Message message)
137 {
138 super(Status.FAILED, message);
139 }
140 }
141
142 public static final class Success extends Result
143 {
144
145
146
147
148
149
150 @Deprecated
151 public Success(final Principal principal)
152 {
153 this(SUCCESS_MESSAGE, principal);
154 }
155
156
157
158
159
160
161
162
163 public Success(final Message message, final Principal principal)
164 {
165 super(Status.SUCCESS, message, principal);
166 }
167 }
168 }
169 }