status header

This commit is contained in:
Freya Murphy 2023-07-02 23:44:48 -04:00
parent 77eee644c9
commit bdd87a4d54
7 changed files with 16 additions and 19 deletions

2
Cargo.lock generated
View file

@ -54,7 +54,7 @@ dependencies = [
]
[[package]]
name = "bashhttp"
name = "bashttp"
version = "0.1.0"
dependencies = [
"chrono",

View file

@ -1,5 +1,5 @@
[package]
name = "bashhttp"
name = "bashttp"
version = "0.1.0"
edition = "2021"

View file

@ -21,21 +21,19 @@ Anything written to a scripts stdout will be treated as part of the HTTP Respons
Therefore the first things returned will be treated as headers. To stop reading headers, print a `\n` to stdout to
tell the HTTP Response that the headers have ended.
All content after the headers will be treated as the response body, and the scripts exit code will be treated as the http response code.
All content after the headers will be treated as the response body, and if the Status header is given, it will be treated as the http response code.
An example script that gives custom headers is shown below:
An example script that gives custom headers (with res code) is shown below:
```sh
#!/bin/bash
# print headers that will be returned
printf "Content-Type: text/plain\n"
printf "aaaaaaaa: AAAAAAAAAA\n"
printf "Status: 418\n" # return 418 im a teapot
printf "\n"
printf "joe\n"
# return http code 200
exit 200
```
Finally if you wish to read the request body given by the user, that is always stored in stdin. For example to create a echo endpoint:
@ -48,8 +46,6 @@ printf "\n"
# the body of any http request made will be stored in stdin
cat
exit 200
```
## License

View file

@ -6,5 +6,3 @@ printf "\n"
# the body of any http request made will be stored in stdin
cat
exit 200

View file

@ -5,6 +5,3 @@
printf "\n"
neofetch
exit 200

View file

@ -3,9 +3,7 @@
# print headers that will be returned
printf "Content-Type: text/plain\n"
printf "aaaaaaaa: AAAAAAAAAA\n"
printf "Status: 418\n" # return 418 im a teapot
printf "\n"
printf "joe\n"
# return http code 200
exit 200

View file

@ -37,13 +37,21 @@ impl Script {
Err(err) => return Err(format!("{err}"))
};
let status = output.status.code().unwrap_or(500) as u16;
let response = String::from_utf8_lossy(&output.stdout).into_owned();
let mut lines = response.split('\n').into_iter();
res.headers.serialize(&mut lines);
let status = match res.headers.get("Status") {
Some(header) => {
match header.value.parse::<u16>() {
Ok(status) => status,
Err(err) => return Err(format!("{err}"))
}
},
None => 200
};
let body: String = lines.collect::<Vec<&str>>().join("\n");
res.headers.put(Header::new("Content-Length", &format!("{}", body.len())));