Skip to content

Commit 9401f7e

Browse files
committed
Complete basic-auth endpoint
Needs a replacement for BASE64Decoder.
1 parent 2dcefcb commit 9401f7e

1 file changed

Lines changed: 28 additions & 5 deletions

File tree

src/main/java/org/gaul/httpbin/HttpBinHandler.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import java.io.OutputStreamWriter;
2525
import java.io.Writer;
2626
import java.nio.charset.StandardCharsets;
27+
import java.util.Arrays;
28+
import java.util.Base64;
2729
import java.util.Collections;
2830
import java.util.Enumeration;
2931

@@ -168,13 +170,34 @@ public void handle(String target, Request baseRequest,
168170
HttpServletResponse.SC_MOVED_TEMPORARILY);
169171
baseRequest.setHandled(true);
170172
return;
171-
} else if (uri.startsWith("/basic-auth")) {
173+
} else if (uri.startsWith("/basic-auth/")) {
172174
Utils.copy(is, Utils.NULL_OUTPUT_STREAM);
173175

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);
178201
baseRequest.setHandled(true);
179202
return;
180203
} else if (uri.equals("/anything")) {

0 commit comments

Comments
 (0)