mirror of
https://github.com/modrinth/code.git
synced 2026-09-04 05:48:57 +00:00
feat(app-lib): send file hash (#7266)
This commit is contained in:
@@ -823,7 +823,8 @@ pub(super) async fn send_bytes_request(
|
|||||||
) -> crate::Result<reqwest::Response> {
|
) -> crate::Result<reqwest::Response> {
|
||||||
let base_url = service_base_url();
|
let base_url = service_base_url();
|
||||||
let url = service_url(base_url, path);
|
let url = service_url(base_url, path);
|
||||||
send_bytes_request_to_url(operation, method, path, &url, body, state).await
|
send_bytes_request_to_url(operation, method, path, &url, body, None, state)
|
||||||
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) async fn send_bytes_request_to_url(
|
pub(super) async fn send_bytes_request_to_url(
|
||||||
@@ -832,6 +833,7 @@ pub(super) async fn send_bytes_request_to_url(
|
|||||||
path: &str,
|
path: &str,
|
||||||
url: &str,
|
url: &str,
|
||||||
body: Vec<u8>,
|
body: Vec<u8>,
|
||||||
|
file_sha512: Option<&str>,
|
||||||
state: &State,
|
state: &State,
|
||||||
) -> crate::Result<reqwest::Response> {
|
) -> crate::Result<reqwest::Response> {
|
||||||
let service_origin = url::Url::parse(service_base_url())
|
let service_origin = url::Url::parse(service_base_url())
|
||||||
@@ -872,18 +874,20 @@ pub(super) async fn send_bytes_request_to_url(
|
|||||||
"Sending shared instances API request"
|
"Sending shared instances API request"
|
||||||
);
|
);
|
||||||
|
|
||||||
let response = shared_instances_client(url)
|
let mut request = shared_instances_client(url)
|
||||||
.request(method.clone(), url)
|
.request(method.clone(), url)
|
||||||
.bearer_auth(credentials.session)
|
.bearer_auth(credentials.session)
|
||||||
.header(reqwest::header::CONTENT_TYPE, "application/octet-stream")
|
.header(reqwest::header::CONTENT_TYPE, "application/octet-stream")
|
||||||
.body(body)
|
.body(body);
|
||||||
.send()
|
if let Some(file_sha512) = file_sha512 {
|
||||||
.await
|
request = request.header("x-file-sha512", file_sha512);
|
||||||
.map_err(|error| {
|
}
|
||||||
crate::ErrorKind::SharedInstancesApiError(
|
|
||||||
error.without_url().to_string(),
|
let response = request.send().await.map_err(|error| {
|
||||||
)
|
crate::ErrorKind::SharedInstancesApiError(
|
||||||
})?;
|
error.without_url().to_string(),
|
||||||
|
)
|
||||||
|
})?;
|
||||||
|
|
||||||
if response.status().is_success() {
|
if response.status().is_success() {
|
||||||
let request_id = response_request_id(&response);
|
let request_id = response_request_id(&response);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ use super::*;
|
|||||||
use async_walkdir::WalkDir;
|
use async_walkdir::WalkDir;
|
||||||
use async_zip::{Compression, ZipEntryBuilder};
|
use async_zip::{Compression, ZipEntryBuilder};
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
|
use sha2::Digest;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
#[tracing::instrument]
|
#[tracing::instrument]
|
||||||
@@ -1018,12 +1019,18 @@ pub(super) async fn upload_external_files(
|
|||||||
"Invalid shared instance external file upload URL: {error}"
|
"Invalid shared instance external file upload URL: {error}"
|
||||||
))
|
))
|
||||||
})?;
|
})?;
|
||||||
|
let (bytes, file_sha512) = tokio::task::spawn_blocking(move || {
|
||||||
|
let hash = format!("{:x}", sha2::Sha512::digest(&bytes));
|
||||||
|
(bytes, hash)
|
||||||
|
})
|
||||||
|
.await?;
|
||||||
let response = send_bytes_request_to_url(
|
let response = send_bytes_request_to_url(
|
||||||
"upload_external_file",
|
"upload_external_file",
|
||||||
Method::PUT,
|
Method::PUT,
|
||||||
upload_url.path(),
|
upload_url.path(),
|
||||||
&upload.url,
|
&upload.url,
|
||||||
bytes,
|
bytes,
|
||||||
|
Some(&file_sha512),
|
||||||
state,
|
state,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|||||||
Reference in New Issue
Block a user