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