mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-10-01 01:36:12 -04:00
Call from apub handlers, cleanup
This commit is contained in:
parent
0533bcf822
commit
dbeeb755d1
@ -12,19 +12,23 @@ use lemmy_utils::{
|
||||
};
|
||||
use url::Url;
|
||||
|
||||
pub async fn markdown_rewrite_remote_post_links_opt(
|
||||
pub async fn markdown_rewrite_remote_links_opt(
|
||||
src: Option<String>,
|
||||
context: &Data<LemmyContext>,
|
||||
) -> Option<String> {
|
||||
match src {
|
||||
Some(t) => Some(markdown_rewrite_remote_post_links(t, context).await),
|
||||
Some(t) => Some(markdown_rewrite_remote_links(t, context).await),
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: call this logic for comment.text etc
|
||||
/// TODO: as it uses ObjectId::dereference, it can currently only be used in apub crate
|
||||
pub async fn markdown_rewrite_remote_post_links(
|
||||
/// Goes through all remote markdown links and attempts to resolve them as Activitypub objects.
|
||||
/// If successful, the link is rewritten to a local link, so it can be viewed without leaving the
|
||||
/// local instance.
|
||||
///
|
||||
/// As it relies on ObjectId::dereference, it can only be used for incoming federated objects, not
|
||||
/// for the API.
|
||||
pub async fn markdown_rewrite_remote_links(
|
||||
mut src: String,
|
||||
context: &Data<LemmyContext>,
|
||||
) -> String {
|
||||
@ -142,7 +146,7 @@ mod tests {
|
||||
|
||||
let context = LemmyContext::init_test_context().await;
|
||||
for &(msg, input, expected) in &tests {
|
||||
let result = markdown_rewrite_remote_post_links(input.to_string(), &context).await;
|
||||
let result = markdown_rewrite_remote_links(input.to_string(), &context).await;
|
||||
|
||||
assert_eq!(
|
||||
result, expected,
|
@ -10,7 +10,7 @@ use lemmy_db_schema::traits::ApubActor;
|
||||
use lemmy_db_views::structs::LocalUserView;
|
||||
use lemmy_utils::error::{LemmyError, LemmyResult};
|
||||
|
||||
pub(crate) mod post_links;
|
||||
pub(crate) mod markdown_links;
|
||||
pub mod post_or_comment;
|
||||
pub mod search;
|
||||
pub mod site_or_community_or_user;
|
||||
|
@ -1,6 +1,7 @@
|
||||
use crate::{
|
||||
activities::{verify_is_public, verify_person_in_community},
|
||||
check_apub_id_valid_with_strictness,
|
||||
fetcher::markdown_links::markdown_rewrite_remote_links,
|
||||
mentions::collect_non_local_mentions,
|
||||
objects::{read_from_string_or_source, verify_is_remote_object},
|
||||
protocol::{
|
||||
@ -169,6 +170,7 @@ impl Object for ApubComment {
|
||||
let slur_regex = &local_site_opt_to_slur_regex(&local_site);
|
||||
let url_blocklist = get_url_blocklist(context).await?;
|
||||
let content = process_markdown(&content, slur_regex, &url_blocklist, context).await?;
|
||||
let content = markdown_rewrite_remote_links(content, context).await;
|
||||
let language_id =
|
||||
LanguageTag::to_language_id_single(note.language, &mut context.pool()).await?;
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
use crate::{
|
||||
activities::GetActorType,
|
||||
check_apub_id_valid,
|
||||
fetcher::markdown_links::markdown_rewrite_remote_links_opt,
|
||||
local_site_data_cached,
|
||||
objects::{instance::fetch_instance_actor_for_object, read_from_string_or_source_opt},
|
||||
protocol::{
|
||||
@ -148,6 +149,7 @@ impl Object for ApubCommunity {
|
||||
let description = read_from_string_or_source_opt(&group.summary, &None, &group.source);
|
||||
let description =
|
||||
process_markdown_opt(&description, slur_regex, &url_blocklist, context).await?;
|
||||
let description = markdown_rewrite_remote_links_opt(description, context).await;
|
||||
let icon = proxy_image_link_opt_apub(group.icon.map(|i| i.url), context).await?;
|
||||
let banner = proxy_image_link_opt_apub(group.image.map(|i| i.url), context).await?;
|
||||
|
||||
|
@ -2,6 +2,7 @@ use super::verify_is_remote_object;
|
||||
use crate::{
|
||||
activities::GetActorType,
|
||||
check_apub_id_valid_with_strictness,
|
||||
fetcher::markdown_links::markdown_rewrite_remote_links_opt,
|
||||
local_site_data_cached,
|
||||
objects::read_from_string_or_source_opt,
|
||||
protocol::{
|
||||
@ -151,6 +152,7 @@ impl Object for ApubSite {
|
||||
let url_blocklist = get_url_blocklist(context).await?;
|
||||
let sidebar = read_from_string_or_source_opt(&apub.content, &None, &apub.source);
|
||||
let sidebar = process_markdown_opt(&sidebar, slur_regex, &url_blocklist, context).await?;
|
||||
let sidebar = markdown_rewrite_remote_links_opt(sidebar, context).await;
|
||||
let icon = proxy_image_link_opt_apub(apub.icon.map(|i| i.url), context).await?;
|
||||
let banner = proxy_image_link_opt_apub(apub.image.map(|i| i.url), context).await?;
|
||||
|
||||
|
@ -2,6 +2,7 @@ use super::verify_is_remote_object;
|
||||
use crate::{
|
||||
activities::GetActorType,
|
||||
check_apub_id_valid_with_strictness,
|
||||
fetcher::markdown_links::markdown_rewrite_remote_links_opt,
|
||||
local_site_data_cached,
|
||||
objects::{instance::fetch_instance_actor_for_object, read_from_string_or_source_opt},
|
||||
protocol::{
|
||||
@ -156,6 +157,7 @@ impl Object for ApubPerson {
|
||||
let url_blocklist = get_url_blocklist(context).await?;
|
||||
let bio = read_from_string_or_source_opt(&person.summary, &None, &person.source);
|
||||
let bio = process_markdown_opt(&bio, slur_regex, &url_blocklist, context).await?;
|
||||
let bio = markdown_rewrite_remote_links_opt(bio, context).await;
|
||||
let avatar = proxy_image_link_opt_apub(person.icon.map(|i| i.url), context).await?;
|
||||
let banner = proxy_image_link_opt_apub(person.image.map(|i| i.url), context).await?;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
use crate::{
|
||||
activities::{verify_is_public, verify_person_in_community},
|
||||
check_apub_id_valid_with_strictness,
|
||||
fetcher::post_links::{markdown_rewrite_remote_post_links_opt, to_local_url},
|
||||
fetcher::markdown_links::{markdown_rewrite_remote_links_opt, to_local_url},
|
||||
local_site_data_cached,
|
||||
objects::{read_from_string_or_source_opt, verify_is_remote_object},
|
||||
protocol::{
|
||||
@ -241,7 +241,7 @@ impl Object for ApubPost {
|
||||
|
||||
let body = read_from_string_or_source_opt(&page.content, &page.media_type, &page.source);
|
||||
let body = process_markdown_opt(&body, slur_regex, &url_blocklist, context).await?;
|
||||
let body = markdown_rewrite_remote_post_links_opt(body, context).await;
|
||||
let body = markdown_rewrite_remote_links_opt(body, context).await;
|
||||
let language_id =
|
||||
LanguageTag::to_language_id_single(page.language, &mut context.pool()).await?;
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
use super::verify_is_remote_object;
|
||||
use crate::{
|
||||
check_apub_id_valid_with_strictness,
|
||||
fetcher::markdown_links::markdown_rewrite_remote_links,
|
||||
objects::read_from_string_or_source,
|
||||
protocol::{
|
||||
objects::chat_message::{ChatMessage, ChatMessageType},
|
||||
@ -134,6 +135,7 @@ impl Object for ApubPrivateMessage {
|
||||
let url_blocklist = get_url_blocklist(context).await?;
|
||||
let content = read_from_string_or_source(¬e.content, &None, ¬e.source);
|
||||
let content = process_markdown(&content, slur_regex, &url_blocklist, context).await?;
|
||||
let content = markdown_rewrite_remote_links(content, context).await;
|
||||
|
||||
let form = PrivateMessageInsertForm {
|
||||
creator_id: creator.id,
|
||||
|
Loading…
Reference in New Issue
Block a user