]> Untitled Git - lemmy.git/commitdiff
Fix post thumbnail_url to use full urls. Fixes #632
authorDessalines <tyhou13@gmx.com>
Tue, 28 Jul 2020 15:42:40 +0000 (11:42 -0400)
committerDessalines <tyhou13@gmx.com>
Tue, 28 Jul 2020 15:42:40 +0000 (11:42 -0400)
server/lemmy_db/src/community.rs
server/src/apub/post.rs
server/src/code_migrations.rs
server/src/lib.rs

index 3a78d769d33620ce89550e86c178d76f79315cb0..c4930d7931e958dc3649cc8c9f761adb91e29bf4 100644 (file)
@@ -133,10 +133,7 @@ impl Community {
       .get_result::<Self>(conn)
   }
 
-  fn community_mods_and_admins(
-    conn: &PgConnection,
-    community_id: i32,
-  ) -> Result<Vec<i32>, Error> {
+  fn community_mods_and_admins(conn: &PgConnection, community_id: i32) -> Result<Vec<i32>, Error> {
     use crate::{community_view::CommunityModeratorView, user_view::UserView};
     let mut mods_and_admins: Vec<i32> = Vec::new();
     mods_and_admins.append(
index 9575a6c7c7d5aff708a2422a7f54970ff6271f58..85b472935c66fca347564cfeeb58270e3c82869b 100644 (file)
@@ -33,7 +33,7 @@ use lemmy_db::{
   user::User_,
   Crud,
 };
-use lemmy_utils::{convert_datetime, get_apub_protocol_string, settings::Settings};
+use lemmy_utils::convert_datetime;
 use serde::Deserialize;
 use url::Url;
 
@@ -114,15 +114,8 @@ impl ToApub for Post {
     }
 
     if let Some(thumbnail_url) = &self.thumbnail_url {
-      let full_url = format!(
-        "{}://{}/pictshare/{}",
-        get_apub_protocol_string(),
-        Settings::get().hostname,
-        thumbnail_url
-      );
-
       let mut image = Image::new();
-      image.set_url(full_url);
+      image.set_url(thumbnail_url.to_string());
       page.set_image(image.into_any_base()?);
     }
 
index 7c85fefcbe4039148530dccf037028704e77ca33..a102faf07ea364ae3e6e57ab6346721596219982 100644 (file)
@@ -1,6 +1,9 @@
 // This is for db migrations that require code
 use crate::LemmyError;
-use diesel::*;
+use diesel::{
+  sql_types::{Nullable, Text},
+  *,
+};
 use lemmy_db::{
   comment::Comment,
   community::{Community, CommunityForm},
@@ -10,7 +13,13 @@ use lemmy_db::{
   user::{UserForm, User_},
   Crud,
 };
-use lemmy_utils::{generate_actor_keypair, make_apub_endpoint, EndpointType};
+use lemmy_utils::{
+  generate_actor_keypair,
+  get_apub_protocol_string,
+  make_apub_endpoint,
+  settings::Settings,
+  EndpointType,
+};
 use log::info;
 
 pub fn run_advanced_migrations(conn: &PgConnection) -> Result<(), LemmyError> {
@@ -19,6 +28,7 @@ pub fn run_advanced_migrations(conn: &PgConnection) -> Result<(), LemmyError> {
   post_updates_2020_04_03(&conn)?;
   comment_updates_2020_04_03(&conn)?;
   private_message_updates_2020_05_05(&conn)?;
+  post_thumbnail_url_updates_2020_07_27(&conn)?;
 
   Ok(())
 }
@@ -188,3 +198,32 @@ fn private_message_updates_2020_05_05(conn: &PgConnection) -> Result<(), LemmyEr
 
   Ok(())
 }
+
+fn post_thumbnail_url_updates_2020_07_27(conn: &PgConnection) -> Result<(), LemmyError> {
+  use lemmy_db::schema::post::dsl::*;
+
+  info!("Running post_thumbnail_url_updates_2020_07_27");
+
+  let domain_prefix = format!(
+    "{}://{}/pictrs/image/",
+    get_apub_protocol_string(),
+    Settings::get().hostname
+  );
+
+  let incorrect_thumbnails = post.filter(thumbnail_url.not_like("http%"));
+
+  // Prepend the rows with the update
+  let res = diesel::update(incorrect_thumbnails)
+    .set(
+      thumbnail_url.eq(
+        domain_prefix
+          .into_sql::<Nullable<Text>>()
+          .concat(thumbnail_url),
+      ),
+    )
+    .get_results::<Post>(conn)?;
+
+  info!("{} Post thumbnail_url rows updated.", res.len());
+
+  Ok(())
+}
index 4795cf01ee7bf0afefd138f4241d691492c9d8f9..5dff2ccbd27b3587e11a591f30df346a17a02b79 100644 (file)
@@ -31,6 +31,7 @@ pub mod websocket;
 
 use crate::request::{retry, RecvError};
 use actix_web::{client::Client, dev::ConnectionInfo};
+use lemmy_utils::{get_apub_protocol_string, settings::Settings};
 use log::error;
 use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
 use serde::Deserialize;
@@ -140,7 +141,7 @@ async fn fetch_iframely_and_pictrs_data(
         };
 
       // Fetch pictrs thumbnail
-      let pictrs_thumbnail = match iframely_thumbnail_url {
+      let pictrs_hash = match iframely_thumbnail_url {
         Some(iframely_thumbnail_url) => match fetch_pictrs(client, &iframely_thumbnail_url).await {
           Ok(res) => Some(res.files[0].file.to_owned()),
           Err(e) => {
@@ -158,6 +159,18 @@ async fn fetch_iframely_and_pictrs_data(
         },
       };
 
+      // The full urls are necessary for federation
+      let pictrs_thumbnail = if let Some(pictrs_hash) = pictrs_hash {
+        Some(format!(
+          "{}://{}/pictrs/image/{}",
+          get_apub_protocol_string(),
+          Settings::get().hostname,
+          pictrs_hash
+        ))
+      } else {
+        None
+      };
+
       (
         iframely_title,
         iframely_description,