Przeglądaj źródła

Rebase #811 (#812)

Co-authored-by: Matthew Esposito <matt@matthew.science>
Nazar 2 lat temu
rodzic
commit
97f0f69059
6 zmienionych plików z 34 dodań i 4 usunięć
  1. 1 0
      README.md
  2. 3 0
      app.json
  3. 18 1
      src/config.rs
  4. 4 0
      src/instance_info.rs
  5. 5 2
      src/post.rs
  6. 3 1
      src/utils.rs

+ 1 - 0
README.md

@@ -214,6 +214,7 @@ Assign a default value for each instance-specific setting by passing environment
 | `SFW_ONLY` | `["on", "off"]` | `off`   | Enables SFW-only mode for the instance, i.e. all NSFW content is filtered. |
 | `BANNER`   | String          | (empty) | Allows the server to set a banner to be displayed. Currently this is displayed on the instance info page. | 
 | `ROBOTS_DISABLE_INDEXING` | `["on", "off"]` | `off` | Disables indexing of the instance by search engines. |
+| `PUSHSHIFT_FRONTEND` | String | `www.unddit.com` | Allows the server to set the Pushshift frontend to be used with "removed" links.
 
 ## Default User Settings
 

+ 3 - 0
app.json

@@ -58,6 +58,9 @@
     },
     "LIBREDDIT_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION": {
       "required": false
+    },
+    "LIBREDDIT_PUSHSHIFT_FRONTEND": {
+      "required": false
     }
   }
 }

+ 18 - 1
src/config.rs

@@ -9,12 +9,16 @@ use std::{env::var, fs::read_to_string};
 // first request) and contains the instance settings.
 pub(crate) static CONFIG: Lazy<Config> = Lazy::new(Config::load);
 
+// This serves as the frontend for the Pushshift API - on removed comments, this URL will
+// be the base of a link, to display removed content (on another site).
+pub(crate) const DEFAULT_PUSHSHIFT_FRONTEND: &str = "www.unddit.com";
+
 /// Stores the configuration parsed from the environment variables and the
 /// config file. `Config::Default()` contains None for each setting.
 /// When adding more config settings, add it to `Config::load`,
 /// `get_setting_from_config`, both below, as well as
 /// instance_info::InstanceInfo.to_string(), README.md and app.json.
-#[derive(Default, Serialize, Deserialize, Clone)]
+#[derive(Default, Serialize, Deserialize, Clone, Debug)]
 pub struct Config {
 	#[serde(rename = "LIBREDDIT_SFW_ONLY")]
 	pub(crate) sfw_only: Option<String>,
@@ -63,6 +67,9 @@ pub struct Config {
 
 	#[serde(rename = "LIBREDDIT_ROBOTS_DISABLE_INDEXING")]
 	pub(crate) robots_disable_indexing: Option<String>,
+
+	#[serde(rename = "LIBREDDIT_PUSHSHIFT_FRONTEND")]
+	pub(crate) pushshift: Option<String>,
 }
 
 impl Config {
@@ -77,6 +84,7 @@ impl Config {
 		// environment variables with "LIBREDDIT", then check the config, then if
 		// both are `None`, return a `None` via the `map_or_else` function
 		let parse = |key: &str| -> Option<String> { var(key).ok().map_or_else(|| get_setting_from_config(key, &config), Some) };
+
 		Self {
 			sfw_only: parse("LIBREDDIT_SFW_ONLY"),
 			default_theme: parse("LIBREDDIT_DEFAULT_THEME"),
@@ -94,6 +102,7 @@ impl Config {
 			default_disable_visit_reddit_confirmation: parse("LIBREDDIT_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION"),
 			banner: parse("LIBREDDIT_BANNER"),
 			robots_disable_indexing: parse("LIBREDDIT_ROBOTS_DISABLE_INDEXING"),
+			pushshift: parse("LIBREDDIT_PUSHSHIFT_FRONTEND"),
 		}
 	}
 }
@@ -116,6 +125,7 @@ fn get_setting_from_config(name: &str, config: &Config) -> Option<String> {
 		"LIBREDDIT_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION" => config.default_disable_visit_reddit_confirmation.clone(),
 		"LIBREDDIT_BANNER" => config.banner.clone(),
 		"LIBREDDIT_ROBOTS_DISABLE_INDEXING" => config.robots_disable_indexing.clone(),
+		"LIBREDDIT_PUSHSHIFT_FRONTEND" => config.pushshift.clone(),
 		_ => None,
 	}
 }
@@ -128,6 +138,13 @@ pub(crate) fn get_setting(name: &str) -> Option<String> {
 #[cfg(test)]
 use {sealed_test::prelude::*, std::fs::write};
 
+#[test]
+fn test_deserialize() {
+	// Must handle empty input
+	let result = toml::from_str::<Config>("");
+	assert!(result.is_ok(), "Error: {}", result.unwrap_err());
+}
+
 #[test]
 #[sealed_test(env = [("LIBREDDIT_SFW_ONLY", "on")])]
 fn test_env_var() {

+ 4 - 0
src/instance_info.rs

@@ -122,6 +122,8 @@ impl InstanceInfo {
 				["Deploy timestamp", &self.deploy_unix_ts.to_string()],
 				["Compile mode", &self.compile_mode],
 				["SFW only", &convert(&self.config.sfw_only)],
+				["Pushshift frontend", &convert(&self.config.pushshift)],
+				//TODO: fallback to crate::config::DEFAULT_PUSHSHIFT_FRONTEND
 			])
 			.with_header_row(["Settings"]),
 		);
@@ -155,6 +157,7 @@ impl InstanceInfo {
                 Deploy timestamp: {}\n
                 Compile mode: {}\n
 				SFW only: {:?}\n
+				Pushshift frontend: {:?}\n
                 Config:\n
                     Banner: {:?}\n
                     Hide awards: {:?}\n
@@ -175,6 +178,7 @@ impl InstanceInfo {
 					self.deploy_unix_ts,
 					self.compile_mode,
 					self.config.sfw_only,
+					self.config.pushshift,
 					self.config.banner,
 					self.config.default_hide_awards,
 					self.config.default_theme,

+ 5 - 2
src/post.rs

@@ -1,5 +1,6 @@
 // CRATES
 use crate::client::json;
+use crate::config::get_setting;
 use crate::server::RequestExt;
 use crate::subreddit::{can_access_quarantine, quarantine};
 use crate::utils::{
@@ -169,8 +170,10 @@ fn build_comment(
 
 	let body = if (val(comment, "author") == "[deleted]" && val(comment, "body") == "[removed]") || val(comment, "body") == "[ Removed by Reddit ]" {
 		format!(
-			"<div class=\"md\"><p>[removed] — <a href=\"https://www.unddit.com{}{}\">view removed comment</a></p></div>",
-			post_link, id
+			"<div class=\"md\"><p>[removed] — <a href=\"https://{}{}{}\">view removed comment</a></p></div>",
+			get_setting("LIBREDDIT_PUSHSHIFT_FRONTEND").unwrap_or(String::from(crate::config::DEFAULT_PUSHSHIFT_FRONTEND)),
+			post_link,
+			id
 		)
 	} else {
 		rewrite_urls(&val(comment, "body_html"))

+ 3 - 1
src/utils.rs

@@ -1,3 +1,4 @@
+use crate::config::get_setting;
 //
 // CRATES
 //
@@ -662,7 +663,8 @@ pub async fn parse_post(post: &serde_json::Value) -> Post {
 
 	let body = if val(post, "removed_by_category") == "moderator" {
 		format!(
-			"<div class=\"md\"><p>[removed] — <a href=\"https://www.unddit.com{}\">view removed post</a></p></div>",
+			"<div class=\"md\"><p>[removed] — <a href=\"https://{}{}\">view removed post</a></p></div>",
+			get_setting("LIBREDDIT_PUSHSHIFT_FRONTEND").unwrap_or(String::from(crate::config::DEFAULT_PUSHSHIFT_FRONTEND)),
 			permalink
 		)
 	} else {