refactor(media): share one external proxy url codec across every service (#1794)

This commit is contained in:
Hampus
2026-08-20 19:55:40 +02:00
committed by GitHub
parent 1c920f966e
commit 8f4f9a8601
14 changed files with 341 additions and 345 deletions
+1
View File
@@ -7,6 +7,7 @@ edition.workspace = true
license.workspace = true
[dependencies]
fluxer_common = { path = "../fluxer_common" }
anyhow = "1.0.102"
base64 = "0.22.1"
fluxer-svc = { path = "../fluxer_svc", default-features = false }
+6 -25
View File
@@ -1,12 +1,7 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
use base64::prelude::*;
use hmac::{Hmac, KeyInit, Mac};
use sha2::Sha256;
use url::Url;
const V2_PATH_PREFIX: &str = "v2/";
#[derive(Clone)]
pub struct MediaProxyUrlBuilder {
endpoint: String,
@@ -66,28 +61,14 @@ impl MediaProxyUrlBuilder {
return Some(input_url.to_owned());
}
let proxy_path = build_external_media_proxy_path(parsed.as_str());
let signature = create_signature(&proxy_path, &self.secret_key);
Some(format!(
"{}/external/{signature}/{proxy_path}",
self.endpoint
))
fluxer_common::external_media_path::build_external_media_proxy_url(
&self.endpoint,
parsed.as_str(),
self.secret_key.as_bytes(),
)
}
}
fn build_external_media_proxy_path(input_url: &str) -> String {
format!(
"{V2_PATH_PREFIX}{}",
BASE64_URL_SAFE_NO_PAD.encode(input_url)
)
}
fn create_signature(input: &str, secret: &str) -> String {
let mut mac = Hmac::<Sha256>::new_from_slice(secret.as_bytes()).expect("HMAC accepts any key");
mac.update(input.as_bytes());
BASE64_URL_SAFE_NO_PAD.encode(mac.finalize().into_bytes())
}
#[cfg(test)]
mod tests {
use super::*;
@@ -153,7 +134,7 @@ mod tests {
.expect("proxy url");
assert!(url.starts_with("https://media.example.test/external/"));
assert!(url.contains("/v2/"));
assert!(url.contains("/https/"));
assert_eq!(
builder.external_proxy_url("https://media.example.test/external/existing"),
Some("https://media.example.test/external/existing".to_owned())