mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-14 19:35:23 +00:00
get rid of cache_remote_thumbnails setting, instead automatically
take thumbnail from federation data if available.
This commit is contained in:
parent
ed3e2e0d8c
commit
c2a763d6fb
|
@ -43,8 +43,6 @@
|
||||||
url: "http://localhost:8080/"
|
url: "http://localhost:8080/"
|
||||||
# Set a custom pictrs API key. ( Required for deleting images )
|
# Set a custom pictrs API key. ( Required for deleting images )
|
||||||
api_key: "string"
|
api_key: "string"
|
||||||
# Cache remote images
|
|
||||||
cache_remote_thumbnails: true
|
|
||||||
# If enabled, all images from remote domains are rewritten to pass through `/api/v3/image_proxy`.
|
# If enabled, all images from remote domains are rewritten to pass through `/api/v3/image_proxy`.
|
||||||
# This improves privacy as users don't expose their IP to untrusted servers, and decreases load
|
# This improves privacy as users don't expose their IP to untrusted servers, and decreases load
|
||||||
# on other servers. However it causes more load for the local server.
|
# on other servers. However it causes more load for the local server.
|
||||||
|
|
|
@ -233,37 +233,32 @@ async fn generate_pictrs_thumbnail(
|
||||||
) -> Result<Url, LemmyError> {
|
) -> Result<Url, LemmyError> {
|
||||||
let pictrs_config = context.settings().pictrs_config()?;
|
let pictrs_config = context.settings().pictrs_config()?;
|
||||||
|
|
||||||
if pictrs_config.cache_remote_thumbnails {
|
// fetch remote non-pictrs images for persistent thumbnail link
|
||||||
// fetch remote non-pictrs images for persistent thumbnail link
|
// TODO: should limit size once supported by pictrs
|
||||||
// TODO: should limit size once supported by pictrs
|
let fetch_url = format!(
|
||||||
let fetch_url = format!(
|
"{}image/download?url={}",
|
||||||
"{}image/download?url={}",
|
pictrs_config.url,
|
||||||
pictrs_config.url,
|
encode(image_url.as_str())
|
||||||
encode(image_url.as_str())
|
);
|
||||||
);
|
|
||||||
|
|
||||||
let response = context
|
let response = context
|
||||||
.client()
|
.client()
|
||||||
.get(&fetch_url)
|
.get(&fetch_url)
|
||||||
.timeout(REQWEST_TIMEOUT)
|
.timeout(REQWEST_TIMEOUT)
|
||||||
.send()
|
.send()
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let response: PictrsResponse = response.json().await?;
|
let response: PictrsResponse = response.json().await?;
|
||||||
|
|
||||||
if response.msg == "ok" {
|
if response.msg == "ok" {
|
||||||
let thumbnail_url = Url::parse(&format!(
|
let thumbnail_url = Url::parse(&format!(
|
||||||
"{}/pictrs/image/{}",
|
"{}/pictrs/image/{}",
|
||||||
context.settings().get_protocol_and_hostname(),
|
context.settings().get_protocol_and_hostname(),
|
||||||
response.files.first().expect("missing pictrs file").file
|
response.files.first().expect("missing pictrs file").file
|
||||||
))?;
|
))?;
|
||||||
Ok(thumbnail_url)
|
Ok(thumbnail_url)
|
||||||
} else {
|
|
||||||
Err(LemmyErrorType::PictrsResponseError(response.msg))?
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// return the original image as "thumbnail"
|
Err(LemmyErrorType::PictrsResponseError(response.msg))?
|
||||||
Ok(image_url.clone())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ use lemmy_api_common::{
|
||||||
local_site_opt_to_sensitive,
|
local_site_opt_to_sensitive,
|
||||||
local_site_opt_to_slur_regex,
|
local_site_opt_to_slur_regex,
|
||||||
process_markdown_opt,
|
process_markdown_opt,
|
||||||
|
proxy_image_link_opt_apub,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use lemmy_db_schema::{
|
use lemmy_db_schema::{
|
||||||
|
@ -218,12 +219,17 @@ impl Object for ApubPost {
|
||||||
let local_site = LocalSite::read(&mut context.pool()).await.ok();
|
let local_site = LocalSite::read(&mut context.pool()).await.ok();
|
||||||
let allow_sensitive = local_site_opt_to_sensitive(&local_site);
|
let allow_sensitive = local_site_opt_to_sensitive(&local_site);
|
||||||
let page_is_sensitive = page.sensitive.unwrap_or(false);
|
let page_is_sensitive = page.sensitive.unwrap_or(false);
|
||||||
let generate_thumbnail = allow_sensitive || !page_is_sensitive;
|
let allow_generate_thumbnail = allow_sensitive || !page_is_sensitive;
|
||||||
|
let mut thumbnail_url = page.image.map(|i| i.url);
|
||||||
|
let do_generate_thumbnail = thumbnail_url.is_none() && allow_generate_thumbnail;
|
||||||
|
|
||||||
|
// Generate local thumbnail only if no thumbnail was federated and 'sensitive' attributes allow it.
|
||||||
|
let metadata = fetch_link_metadata_opt(url.as_ref(), do_generate_thumbnail, context).await?;
|
||||||
|
if let Some(thumbnail_url_) = metadata.thumbnail {
|
||||||
|
thumbnail_url = Some(thumbnail_url_.into());
|
||||||
|
}
|
||||||
|
let thumbnail_url = proxy_image_link_opt_apub(thumbnail_url, context).await?;
|
||||||
|
|
||||||
// Only fetch metadata if the post has a url and was not seen previously. We dont want to
|
|
||||||
// waste resources by fetching metadata for the same post multiple times.
|
|
||||||
// Additionally, only fetch image if content is not sensitive or is allowed on local site.
|
|
||||||
let metadata = fetch_link_metadata_opt(url.as_ref(), generate_thumbnail, context).await?;
|
|
||||||
let slur_regex = &local_site_opt_to_slur_regex(&local_site);
|
let slur_regex = &local_site_opt_to_slur_regex(&local_site);
|
||||||
|
|
||||||
let body = read_from_string_or_source_opt(&page.content, &page.media_type, &page.source);
|
let body = read_from_string_or_source_opt(&page.content, &page.media_type, &page.source);
|
||||||
|
@ -246,7 +252,7 @@ impl Object for ApubPost {
|
||||||
embed_title: metadata.title,
|
embed_title: metadata.title,
|
||||||
embed_description: metadata.description,
|
embed_description: metadata.description,
|
||||||
embed_video_url: metadata.embed_video_url,
|
embed_video_url: metadata.embed_video_url,
|
||||||
thumbnail_url: metadata.thumbnail,
|
thumbnail_url,
|
||||||
ap_id: Some(page.id.clone().into()),
|
ap_id: Some(page.id.clone().into()),
|
||||||
local: Some(false),
|
local: Some(false),
|
||||||
language_id,
|
language_id,
|
||||||
|
|
|
@ -168,10 +168,10 @@ impl Page {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Attachment {
|
impl Attachment {
|
||||||
pub(crate) fn new(url: DbUrl, content_type: Option<String>) -> Attachment {
|
pub(crate) fn new(url: DbUrl, media_type: Option<String>) -> Attachment {
|
||||||
Attachment::Link(Link {
|
Attachment::Link(Link {
|
||||||
href: url.into(),
|
href: url.into(),
|
||||||
content_type,
|
media_type,
|
||||||
r#type: Default::default(),
|
r#type: Default::default(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,10 +79,6 @@ pub struct PictrsConfig {
|
||||||
#[default(None)]
|
#[default(None)]
|
||||||
pub api_key: Option<String>,
|
pub api_key: Option<String>,
|
||||||
|
|
||||||
/// Cache remote images
|
|
||||||
#[default(true)]
|
|
||||||
pub cache_remote_thumbnails: bool,
|
|
||||||
|
|
||||||
/// If enabled, all images from remote domains are rewritten to pass through `/api/v3/image_proxy`.
|
/// If enabled, all images from remote domains are rewritten to pass through `/api/v3/image_proxy`.
|
||||||
/// This improves privacy as users don't expose their IP to untrusted servers, and decreases load
|
/// This improves privacy as users don't expose their IP to untrusted servers, and decreases load
|
||||||
/// on other servers. However it causes more load for the local server.
|
/// on other servers. However it causes more load for the local server.
|
||||||
|
|
Loading…
Reference in a new issue