forked from neri/datatrash
add error logging for internal server errors
This commit is contained in:
parent
f97b3d79be
commit
f2dfca2b39
|
@ -31,7 +31,10 @@ pub async fn download(
|
||||||
let row: PgRow = rows
|
let row: PgRow = rows
|
||||||
.try_next()
|
.try_next()
|
||||||
.await
|
.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"))?;
|
.ok_or_else(|| error::ErrorNotFound("file does not exist or has expired"))?;
|
||||||
|
|
||||||
let file_id: String = row.get("file_id");
|
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 (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 is_text = file_kind == FileKind::Text.to_string() || content_type.type_() == mime::TEXT;
|
||||||
let response = if is_text && !download {
|
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")
|
error::ErrorInternalServerError("this file should be here but could not be found")
|
||||||
})?;
|
})?;
|
||||||
let encoded = htmlescape::encode_minimal(&content);
|
let encoded = htmlescape::encode_minimal(&content);
|
||||||
|
@ -57,7 +61,8 @@ pub async fn download(
|
||||||
content_disposition.disposition = DispositionType::Attachment;
|
content_disposition.disposition = DispositionType::Attachment;
|
||||||
}
|
}
|
||||||
let file = NamedFile::open(path)
|
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")
|
error::ErrorInternalServerError("this file should be here but could not be found")
|
||||||
})?
|
})?
|
||||||
.set_content_type(content_type)
|
.set_content_type(content_type)
|
||||||
|
@ -67,7 +72,10 @@ pub async fn download(
|
||||||
if delete_on_download {
|
if delete_on_download {
|
||||||
deleter::delete_by_id(&db, &file_id, &config.files_dir)
|
deleter::delete_by_id(&db, &file_id, &config.files_dir)
|
||||||
.await
|
.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
|
response
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,9 +39,10 @@ pub(crate) async fn parse_multipart(
|
||||||
}
|
}
|
||||||
original_name = file_original_name;
|
original_name = file_original_name;
|
||||||
kind = Some(FileKind::Binary);
|
kind = Some(FileKind::Binary);
|
||||||
let mut file = fs::File::create(&filename)
|
let mut file = fs::File::create(&filename).await.map_err(|file_err| {
|
||||||
.await
|
log::error!("could not create file {:?}", file_err);
|
||||||
.map_err(|_| error::ErrorInternalServerError("could not create file"))?;
|
error::ErrorInternalServerError("could not create file")
|
||||||
|
})?;
|
||||||
size = write_to_file(&mut file, field, config.max_file_size).await?;
|
size = write_to_file(&mut file, field, config.max_file_size).await?;
|
||||||
}
|
}
|
||||||
"text" => {
|
"text" => {
|
||||||
|
@ -50,9 +51,10 @@ pub(crate) async fn parse_multipart(
|
||||||
}
|
}
|
||||||
original_name = Some(format!("{}.txt", file_id));
|
original_name = Some(format!("{}.txt", file_id));
|
||||||
kind = Some(FileKind::Text);
|
kind = Some(FileKind::Text);
|
||||||
let mut file = fs::File::create(&filename)
|
let mut file = fs::File::create(&filename).await.map_err(|file_err| {
|
||||||
.await
|
log::error!("could not create file {:?}", file_err);
|
||||||
.map_err(|_| error::ErrorInternalServerError("could not create file"))?;
|
error::ErrorInternalServerError("could not create file")
|
||||||
|
})?;
|
||||||
size = write_to_file(&mut file, field, config.max_file_size).await?;
|
size = write_to_file(&mut file, field, config.max_file_size).await?;
|
||||||
}
|
}
|
||||||
"delete_on_download" => {
|
"delete_on_download" => {
|
||||||
|
@ -157,9 +159,10 @@ async fn write_to_file(
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file.write_all(chunk.as_ref())
|
file.write_all(chunk.as_ref()).await.map_err(|write_err| {
|
||||||
.await
|
log::error!("could not write file {:?}", write_err);
|
||||||
.map_err(|_| error::ErrorInternalServerError("could not write file"))?;
|
error::ErrorInternalServerError("could not write file")
|
||||||
|
})?;
|
||||||
}
|
}
|
||||||
Ok(written_bytes)
|
Ok(written_bytes)
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,8 @@ pub async fn upload(
|
||||||
Ok(data) => data,
|
Ok(data) => data,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
if filename.exists().await {
|
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(
|
error::ErrorInternalServerError(
|
||||||
"could not parse multipart; could not remove file",
|
"could not parse multipart; could not remove file",
|
||||||
)
|
)
|
||||||
|
@ -96,8 +97,10 @@ pub async fn upload(
|
||||||
.bind(delete_on_download)
|
.bind(delete_on_download)
|
||||||
.execute(db.as_ref())
|
.execute(db.as_ref())
|
||||||
.await;
|
.await;
|
||||||
if db_insert.is_err() {
|
if let Err(db_err) = db_insert {
|
||||||
fs::remove_file(filename).await.map_err(|_| {
|
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(
|
error::ErrorInternalServerError(
|
||||||
"could not insert file into database; could not remove file",
|
"could not insert file into database; could not remove file",
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue