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