feat(web/bubblegum): allow passing status as an int
The whole pass the name of the status as a string thing was mostly born out of an overeager use of yants. It is still very neat especially for common cases like "OK", so we'll keep it, but also allow passing the integer variant of the status as well which probably feels more natural for a lot of people, especially over getting the casing right for "I'm a teapot". Change-Id: I3f012a291447ef385efdd28132292a8b331998c0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2850 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
parent
1c0f89f4ca
commit
386afdc794
2 changed files with 16 additions and 9 deletions
|
@ -89,12 +89,12 @@ let
|
|||
|
||||
See the [README](./README.md) for an example.
|
||||
|
||||
Type: string -> attrs string -> string -> string
|
||||
Type: either int string -> attrs string -> string -> string
|
||||
*/
|
||||
respond =
|
||||
# response status as the textual representation in the
|
||||
# HTTP protocol. See `statusCodes` for a list of valid
|
||||
# options.
|
||||
# response status as an integer (status code) or its
|
||||
# textual representation in the HTTP protocol.
|
||||
# See `statusCodes` for a list of valid options.
|
||||
statusArg:
|
||||
# headers as an attribute set of strings
|
||||
headers:
|
||||
|
@ -102,7 +102,14 @@ let
|
|||
bodyArg:
|
||||
let
|
||||
status =
|
||||
if builtins.isString statusArg then {
|
||||
if builtins.isInt statusArg
|
||||
then {
|
||||
code = statusArg;
|
||||
line = lib.findFirst
|
||||
(line: statusCodes."${line}" == statusArg)
|
||||
null
|
||||
(builtins.attrNames statusCodes);
|
||||
} else if builtins.isString statusArg then {
|
||||
code = statusCodes."${statusArg}" or null;
|
||||
line = statusArg;
|
||||
} else {
|
||||
|
|
|
@ -108,24 +108,24 @@ let
|
|||
if pathInfo == "/"
|
||||
then {
|
||||
title = "blog";
|
||||
status = "OK";
|
||||
status = 200;
|
||||
inner = index posts;
|
||||
}
|
||||
else if !(validatePathInfo pathInfo)
|
||||
then {
|
||||
title = "Bad Request";
|
||||
status = "Bad Request";
|
||||
status = 400;
|
||||
inner = "No slashes in post names 😡";
|
||||
}
|
||||
# CGI should already url.decode for us
|
||||
else if builtins.pathExists (blogdir + "/" + pathInfo)
|
||||
then rec {
|
||||
title = parseTitle pathInfo;
|
||||
status = "OK";
|
||||
status = 200;
|
||||
inner = post title pathInfo;
|
||||
} else {
|
||||
title = "Not Found";
|
||||
status = "Not Found";
|
||||
status = 404;
|
||||
inner = "<h1>404 — not found</h1>";
|
||||
};
|
||||
in
|
||||
|
|
Loading…
Reference in a new issue