add error logging for internal server errors

This commit is contained in:
neri 2021-04-08 00:33:22 +02:00
parent f97b3d79be
commit f2dfca2b39
3 changed files with 30 additions and 16 deletions

View File

@ -31,7 +31,10 @@ pub async fn download(
let row: PgRow = rows
.try_next()
.await
.map_err(|_| error::ErrorInternalServerError("could not run select statement"))?
.map_err(|db_err| {
log::error!("could not run select statement {:?}", db_err);
error::ErrorInternalServerError("could not run select statement")
})?
.ok_or_else(|| error::ErrorNotFound("file does not exist or has expired"))?;
let file_id: String = row.get("file_id");
@ -45,7 +48,8 @@ pub async fn download(
let (content_type, mut content_disposition) = get_content_types(&path, &file_name);
let is_text = file_kind == FileKind::Text.to_string() || content_type.type_() == mime::TEXT;
let response = if is_text && !download {
let content = fs::read_to_string(path).await.map_err(|_| {
let content = fs::read_to_string(path).await.map_err(|file_err| {
log::error!("file could not be read {:?}", file_err);
error::ErrorInternalServerError("this file should be here but could not be found")
})?;
let encoded = htmlescape::encode_minimal(&content);
@ -57,7 +61,8 @@ pub async fn download(
content_disposition.disposition = DispositionType::Attachment;
}
let file = NamedFile::open(path)
.map_err(|_| {
.map_err(|file_err| {
log::error!("file could not be read {:?}", file_err);
error::ErrorInternalServerError("this file should be here but could not be found")
})?
.set_content_type(content_type)
@ -67,7 +72,10 @@ pub async fn download(
if delete_on_download {
deleter::delete_by_id(&db, &file_id, &config.files_dir)
.await
.map_err(|_| error::ErrorInternalServerError("could not delete file"))?;
.map_err(|db_err| {
log::error!("could not delete file {:?}", db_err);
error::ErrorInternalServerError("could not delete file")
})?;
}
response
}

View File

@ -39,9 +39,10 @@ pub(crate) async fn parse_multipart(
}
original_name = file_original_name;
kind = Some(FileKind::Binary);
let mut file = fs::File::create(&filename)
.await
.map_err(|_| error::ErrorInternalServerError("could not create file"))?;
let mut file = fs::File::create(&filename).await.map_err(|file_err| {
log::error!("could not create file {:?}", file_err);
error::ErrorInternalServerError("could not create file")
})?;
size = write_to_file(&mut file, field, config.max_file_size).await?;
}
"text" => {
@ -50,9 +51,10 @@ pub(crate) async fn parse_multipart(
}
original_name = Some(format!("{}.txt", file_id));
kind = Some(FileKind::Text);
let mut file = fs::File::create(&filename)
.await
.map_err(|_| error::ErrorInternalServerError("could not create file"))?;
let mut file = fs::File::create(&filename).await.map_err(|file_err| {
log::error!("could not create file {:?}", file_err);
error::ErrorInternalServerError("could not create file")
})?;
size = write_to_file(&mut file, field, config.max_file_size).await?;
}
"delete_on_download" => {
@ -157,9 +159,10 @@ async fn write_to_file(
)));
}
}
file.write_all(chunk.as_ref())
.await
.map_err(|_| error::ErrorInternalServerError("could not write file"))?;
file.write_all(chunk.as_ref()).await.map_err(|write_err| {
log::error!("could not write file {:?}", write_err);
error::ErrorInternalServerError("could not write file")
})?;
}
Ok(written_bytes)
}

View File

@ -75,7 +75,8 @@ pub async fn upload(
Ok(data) => data,
Err(err) => {
if filename.exists().await {
fs::remove_file(filename).await.map_err(|_| {
fs::remove_file(filename).await.map_err(|file_err| {
log::error!("could not remove file {:?}", file_err);
error::ErrorInternalServerError(
"could not parse multipart; could not remove file",
)
@ -96,8 +97,10 @@ pub async fn upload(
.bind(delete_on_download)
.execute(db.as_ref())
.await;
if db_insert.is_err() {
fs::remove_file(filename).await.map_err(|_| {
if let Err(db_err) = db_insert {
log::error!("could not insert into datebase {:?}", db_err);
fs::remove_file(filename).await.map_err(|file_err| {
log::error!("could not remove file {:?}", file_err);
error::ErrorInternalServerError(
"could not insert file into database; could not remove file",
)