|
24 | 24 | import java.io.OutputStreamWriter; |
25 | 25 | import java.io.Writer; |
26 | 26 | import java.nio.charset.StandardCharsets; |
| 27 | +import java.util.Arrays; |
| 28 | +import java.util.Base64; |
27 | 29 | import java.util.Collections; |
28 | 30 | import java.util.Enumeration; |
29 | 31 |
|
@@ -168,13 +170,34 @@ public void handle(String target, Request baseRequest, |
168 | 170 | HttpServletResponse.SC_MOVED_TEMPORARILY); |
169 | 171 | baseRequest.setHandled(true); |
170 | 172 | return; |
171 | | - } else if (uri.startsWith("/basic-auth")) { |
| 173 | + } else if (uri.startsWith("/basic-auth/")) { |
172 | 174 | Utils.copy(is, Utils.NULL_OUTPUT_STREAM); |
173 | 175 |
|
174 | | - // FIXME: we don't actually check the username/password here |
175 | | - servletResponse.addHeader("WWW-Authenticate", |
176 | | - "Basic realm=\"Fake Realm\""); |
177 | | - servletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED); |
| 176 | + String header = request.getHeader("Authorization"); |
| 177 | + if (header == null || !header.startsWith("Basic ")) { |
| 178 | + servletResponse.setStatus( |
| 179 | + HttpServletResponse.SC_UNAUTHORIZED); |
| 180 | + baseRequest.setHandled(true); |
| 181 | + return; |
| 182 | + } |
| 183 | + |
| 184 | + byte[] bytes = Base64.getDecoder().decode( |
| 185 | + header.substring("Basic ".length())); |
| 186 | + String[] parts = new String( |
| 187 | + bytes, StandardCharsets.UTF_8).split(":", 2); |
| 188 | + String[] auth = uri.substring("/basic-auth/".length()).split( |
| 189 | + "/", 2); |
| 190 | + if (auth.length != 2 || !Arrays.equals(auth, parts)) { |
| 191 | + servletResponse.setStatus( |
| 192 | + HttpServletResponse.SC_UNAUTHORIZED); |
| 193 | + baseRequest.setHandled(true); |
| 194 | + return; |
| 195 | + } |
| 196 | + |
| 197 | + JSONObject response = new JSONObject(); |
| 198 | + response.put("authenticated", true); |
| 199 | + response.put("user", parts[0]); |
| 200 | + respondJSON(servletResponse, os, response); |
178 | 201 | baseRequest.setHandled(true); |
179 | 202 | return; |
180 | 203 | } else if (uri.equals("/anything")) { |
|
0 commit comments