refactor(server): use more specific HTTP status codes (#262)
* refactor(server): use more specific http status codes * fix: clippy error - oops missed that one * test(fixtures): add check for status code
This commit is contained in:
parent
4987cfe5e5
commit
4774de6652
|
@ -13,6 +13,8 @@ run_test() {
|
||||||
test "$content" = "$(curl -s $file_url)"
|
test "$content" = "$(curl -s $file_url)"
|
||||||
file_url=$(curl -s -F "file=@file" -H "filename:fn_from_header.txt" localhost:8000)
|
file_url=$(curl -s -F "file=@file" -H "filename:fn_from_header.txt" localhost:8000)
|
||||||
test "$file_url" = "file already exists"
|
test "$file_url" = "file already exists"
|
||||||
|
status_code=$(curl -s -F "file=@file" -H "filename:fn_from_header.txt" -w "%{response_code}" -o /dev/null localhost:8000)
|
||||||
|
test "$status_code" = "409"
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown() {
|
teardown() {
|
||||||
|
|
|
@ -11,6 +11,7 @@ setup() {
|
||||||
run_test() {
|
run_test() {
|
||||||
test "this file type is not permitted" = "$(curl -s -F "file=@file.html" localhost:8000)"
|
test "this file type is not permitted" = "$(curl -s -F "file=@file.html" localhost:8000)"
|
||||||
test "this file type is not permitted" = "$(curl -s -F "file=@file.xml" localhost:8000)"
|
test "this file type is not permitted" = "$(curl -s -F "file=@file.xml" localhost:8000)"
|
||||||
|
test "415" = "$(curl -s -F "file=@file.xml" -w "%{response_code}" -o /dev/null localhost:8000)"
|
||||||
file_url=$(curl -s -F "file=@file.txt" localhost:8000)
|
file_url=$(curl -s -F "file=@file.txt" localhost:8000)
|
||||||
test "$content" = "$(curl -s $file_url)"
|
test "$content" = "$(curl -s $file_url)"
|
||||||
}
|
}
|
||||||
|
|
14
src/paste.rs
14
src/paste.rs
|
@ -98,14 +98,13 @@ impl Paste {
|
||||||
expiry_date: Option<u128>,
|
expiry_date: Option<u128>,
|
||||||
header_filename: Option<String>,
|
header_filename: Option<String>,
|
||||||
config: &Config,
|
config: &Config,
|
||||||
) -> IoResult<String> {
|
) -> Result<String, Error> {
|
||||||
let file_type = infer::get(&self.data);
|
let file_type = infer::get(&self.data);
|
||||||
if let Some(file_type) = file_type {
|
if let Some(file_type) = file_type {
|
||||||
for mime_type in &config.paste.mime_blacklist {
|
for mime_type in &config.paste.mime_blacklist {
|
||||||
if mime_type == file_type.mime_type() {
|
if mime_type == file_type.mime_type() {
|
||||||
return Err(IoError::new(
|
return Err(error::ErrorUnsupportedMediaType(
|
||||||
IoErrorKind::Other,
|
"this file type is not permitted",
|
||||||
String::from("this file type is not permitted"),
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -179,10 +178,7 @@ impl Paste {
|
||||||
let file_path = util::glob_match_file(path.clone())
|
let file_path = util::glob_match_file(path.clone())
|
||||||
.map_err(|_| IoError::new(IoErrorKind::Other, String::from("path is not valid")))?;
|
.map_err(|_| IoError::new(IoErrorKind::Other, String::from("path is not valid")))?;
|
||||||
if file_path.is_file() && file_path.exists() {
|
if file_path.is_file() && file_path.exists() {
|
||||||
return Err(IoError::new(
|
return Err(error::ErrorConflict("file already exists\n"));
|
||||||
IoErrorKind::AlreadyExists,
|
|
||||||
String::from("file already exists\n"),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
if let Some(timestamp) = expiry_date {
|
if let Some(timestamp) = expiry_date {
|
||||||
path.set_file_name(format!("{file_name}.{timestamp}"));
|
path.set_file_name(format!("{file_name}.{timestamp}"));
|
||||||
|
@ -248,7 +244,7 @@ impl Paste {
|
||||||
.to_string());
|
.to_string());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(self.store_file(file_name, expiry_date, None, &config)?)
|
self.store_file(file_name, expiry_date, None, &config)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Writes an URL to a file in upload directory.
|
/// Writes an URL to a file in upload directory.
|
||||||
|
|
|
@ -951,15 +951,10 @@ mod tests {
|
||||||
.to_request(),
|
.to_request(),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
assert_eq!(StatusCode::INTERNAL_SERVER_ERROR, response.status());
|
assert_eq!(StatusCode::CONFLICT, response.status());
|
||||||
assert_body(response.into_body(), "file already exists\n").await?;
|
assert_body(response.into_body(), "file already exists\n").await?;
|
||||||
|
|
||||||
fs::remove_file(header_filename)?;
|
fs::remove_file(header_filename)?;
|
||||||
let serve_request = TestRequest::get()
|
|
||||||
.uri(&format!("/{header_filename}"))
|
|
||||||
.to_request();
|
|
||||||
let response = test::call_service(&app, serve_request).await;
|
|
||||||
assert_eq!(StatusCode::NOT_FOUND, response.status());
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue