fix: panics due to async black magic
parent
084660ab46
commit
fdc6a23e58
|
@ -1580,9 +1580,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.142"
|
||||
version = "0.2.144"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
|
||||
checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
|
||||
|
||||
[[package]]
|
||||
name = "libgit2-sys"
|
||||
|
@ -2951,9 +2951,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
|||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.27.0"
|
||||
version = "1.28.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"
|
||||
checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"bytes",
|
||||
|
@ -2964,7 +2964,7 @@ dependencies = [
|
|||
"pin-project-lite",
|
||||
"signal-hook-registry",
|
||||
"socket2",
|
||||
"windows-sys 0.45.0",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
@ -88,15 +88,7 @@ bytes = "1.4.0"
|
|||
shadow-rs = "0.17"
|
||||
|
||||
[features]
|
||||
default = [
|
||||
"desktop",
|
||||
"previews",
|
||||
"previews-image",
|
||||
"extractors-web",
|
||||
"extractors-audio",
|
||||
"extractors-photo",
|
||||
"extractors-media",
|
||||
]
|
||||
default = ["desktop", "previews", "previews-image", "extractors-web", "extractors-audio", "extractors-photo", "extractors-media"]
|
||||
desktop = ["webbrowser", "opener", "is_executable"]
|
||||
previews = []
|
||||
previews-image = ["image", "webp", "kamadak-exif"]
|
||||
|
|
|
@ -6,7 +6,6 @@ use actix_files::NamedFile;
|
|||
use actix_multipart::Multipart;
|
||||
use actix_web::error::{
|
||||
ErrorBadRequest, ErrorInternalServerError, ErrorNotFound, ErrorUnauthorized,
|
||||
ErrorUnprocessableEntity,
|
||||
};
|
||||
use actix_web::http::header::ContentDisposition;
|
||||
use actix_web::{delete, error, get, post, put, web, Either, Error, HttpResponse};
|
||||
|
@ -534,7 +533,11 @@ pub async fn put_blob(
|
|||
}
|
||||
|
||||
let url = Url::parse(&url_buffer).map_err(ErrorBadRequest)?;
|
||||
let (bytes, filename) = fetch_external(url.clone()).await?;
|
||||
|
||||
let _url = url.clone();
|
||||
let (bytes, filename) = web::block(move || fetch_external(_url))
|
||||
.await?
|
||||
.map_err(ErrorInternalServerError)?;
|
||||
file.write_all(&bytes)?;
|
||||
|
||||
(
|
||||
|
@ -686,7 +689,9 @@ pub async fn get_address(
|
|||
)
|
||||
} else if let Some(url) = query.get("url_content") {
|
||||
let url = Url::parse(url).map_err(ErrorBadRequest)?;
|
||||
let (bytes, _) = fetch_external(url).await?;
|
||||
let (bytes, _) = web::block(|| fetch_external(url))
|
||||
.await?
|
||||
.map_err(ErrorInternalServerError)?;
|
||||
let hash_result = hash(&bytes);
|
||||
(Address::Hash(hash_result), false)
|
||||
} else {
|
||||
|
@ -858,12 +863,10 @@ pub async fn get_info(state: web::Data<State>) -> Result<HttpResponse, Error> {
|
|||
|
||||
const MAX_EXTERNAL_SIZE: usize = 128_000_000;
|
||||
#[tracing::instrument(skip(url), fields(url=%url))]
|
||||
async fn fetch_external(url: Url) -> Result<(bytes::Bytes, Option<String>), actix_web::Error> {
|
||||
fn fetch_external(url: Url) -> Result<(bytes::Bytes, Option<String>)> {
|
||||
debug!("Fetching...");
|
||||
|
||||
let response = web::block(|| REQWEST_CLIENT.get(url).send())
|
||||
.await?
|
||||
.map_err(ErrorInternalServerError)?;
|
||||
let response = REQWEST_CLIENT.get(url).send()?;
|
||||
|
||||
if let Some(content_length) = response.headers().get(reqwest::header::CONTENT_LENGTH) {
|
||||
if let Some(content_length) = content_length
|
||||
|
@ -872,15 +875,13 @@ async fn fetch_external(url: Url) -> Result<(bytes::Bytes, Option<String>), acti
|
|||
.and_then(|cl| cl.parse::<usize>().ok())
|
||||
{
|
||||
if content_length > MAX_EXTERNAL_SIZE {
|
||||
return Err(ErrorBadRequest(format!(
|
||||
return Err(anyhow!(format!(
|
||||
"Error: The response is too large ({content_length} > {MAX_EXTERNAL_SIZE})."
|
||||
)));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return Err(ErrorUnprocessableEntity(
|
||||
"Error: Could not ascertain response size.",
|
||||
));
|
||||
return Err(anyhow!("Error: Could not ascertain response size.",));
|
||||
}
|
||||
|
||||
let filename: Option<String> = response
|
||||
|
@ -890,7 +891,7 @@ async fn fetch_external(url: Url) -> Result<(bytes::Bytes, Option<String>), acti
|
|||
.and_then(|cd| cd.get_filename().map(String::from));
|
||||
debug!("Got filename: {filename:?}");
|
||||
|
||||
let bytes = response.bytes().map_err(ErrorInternalServerError)?;
|
||||
let bytes = response.bytes()?;
|
||||
debug!("Got {} bytes.", bytes.len());
|
||||
|
||||
Ok((bytes, filename))
|
||||
|
|
Loading…
Reference in New Issue