Skip to content

Commit a33280a

Browse files
committed
Improve cookies support
1 parent 6c82f64 commit a33280a

2 files changed

Lines changed: 25 additions & 5 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Java httpbin supports a subset of httpbin endpoints:
2525
- `/redirect-to?url=foo` 302 Redirects to the _foo_ URL.
2626
- `/cookies` Returns the cookies.
2727
- `/cookies/set?name=value` Sets one or more simple cookies.
28+
- `/cookies/delete?name` Deletes one or more simple cookies.
2829
- `/basic-auth/:user/:passwd` Challenges HTTP Basic Auth.
2930
- `/html` Returns some HTML.
3031
- `/xml` Returns some XML.

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

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.Base64;
2727
import java.util.Collections;
2828
import java.util.List;
29+
import java.util.Map;
2930

3031
import javax.servlet.http.Cookie;
3132
import javax.servlet.http.HttpServletRequest;
@@ -163,14 +164,32 @@ public void handle(String target, Request baseRequest,
163164
respondJSON(servletResponse, os, response);
164165
baseRequest.setHandled(true);
165166
return;
166-
} else if (uri.startsWith("/cookies/set/")) {
167+
} else if (uri.startsWith("/cookies/set")) {
167168
Utils.copy(is, Utils.NULL_OUTPUT_STREAM);
168169

169-
String[] parts = uri.substring("/cookies/set/".length()).split(
170-
"/");
170+
StringBuilder builder = new StringBuilder();
171+
for (Map.Entry<String, String[]> entry :
172+
request.getParameterMap().entrySet()) {
173+
for (String value : entry.getValue()) {
174+
servletResponse.addHeader("Set-Cookie", String.format(
175+
"%s=%s; Path=/", entry.getKey(), value));
176+
}
177+
}
178+
179+
servletResponse.setHeader("Location", "/cookies");
180+
servletResponse.setStatus(
181+
HttpServletResponse.SC_MOVED_TEMPORARILY);
182+
baseRequest.setHandled(true);
183+
return;
184+
} else if (uri.startsWith("/cookies/delete")) {
185+
Utils.copy(is, Utils.NULL_OUTPUT_STREAM);
171186

172-
servletResponse.addHeader("Set-Cookie",
173-
String.format("%s=%s; Path=/", parts[0], parts[1]));
187+
StringBuilder builder = new StringBuilder();
188+
for (Map.Entry<String, String[]> entry :
189+
request.getParameterMap().entrySet()) {
190+
servletResponse.addHeader("Set-Cookie", String.format(
191+
"%s=; Path=/", entry.getKey()));
192+
}
174193

175194
servletResponse.setHeader("Location", "/cookies");
176195
servletResponse.setStatus(

0 commit comments

Comments
 (0)