fix(self-host): unfurl media hosted by the instance itself (#2451)

This commit is contained in:
Hampus authored and GitHub committed 2026-09-04 16:56:35 +02:00
1 parent 4c0f02d8a5
commit c01d22dc05
9 files changed
+390 -20

No files matched your search

+23
View File
@@ -121,6 +121,10 @@ impl UnfurlShard {
) -> anyhow::Result<UnfurlResult> {
let parsed = Url::parse(url_str)?;
if self.media_proxy.is_own_url(parsed.as_str()) {
return Ok(self.resolve_own_media(&parsed, nsfw_mode).await);
}
let (fetch_url, matched_resolver_idx) = self.find_transform(&parsed);
let ctx = ResolveContext {
@@ -177,6 +181,25 @@ impl UnfurlShard {
})
}
async fn resolve_own_media(&self, url: &Url, nsfw_mode: NsfwMode) -> UnfurlResult {
match resolvers::media::build_own_media_embed(&self.media_proxy, url, nsfw_mode).await {
Ok(Some(embed)) => self.finalize_result(ResolverResult {
embeds: vec![embed],
}),
Ok(None) => UnfurlResult {
embeds: Vec::new(),
cache_ttl_seconds: None,
},
Err(err) => {
tracing::warn!(error = %err, url = %url, "own media unfurl failed");
UnfurlResult {
embeds: Vec::new(),
cache_ttl_seconds: None,
}
}
}
}
fn find_transform(&self, url: &Url) -> (Url, Option<usize>) {
for (i, resolver) in self.resolvers.iter().enumerate() {
if let Some(transformed) = resolver.transform_url(url) {