Co-authored-by: Matthew Esposito <matt@matthew.science>
This commit is contained in:
parent
b5fc4bef28
commit
97f0f69059
@ -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. |
|
| `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. |
|
| `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. |
|
| `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
|
## Default User Settings
|
||||||
|
|
||||||
|
3
app.json
3
app.json
@ -58,6 +58,9 @@
|
|||||||
},
|
},
|
||||||
"LIBREDDIT_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION": {
|
"LIBREDDIT_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION": {
|
||||||
"required": false
|
"required": false
|
||||||
|
},
|
||||||
|
"LIBREDDIT_PUSHSHIFT_FRONTEND": {
|
||||||
|
"required": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,12 +9,16 @@ use std::{env::var, fs::read_to_string};
|
|||||||
// first request) and contains the instance settings.
|
// first request) and contains the instance settings.
|
||||||
pub(crate) static CONFIG: Lazy<Config> = Lazy::new(Config::load);
|
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
|
/// Stores the configuration parsed from the environment variables and the
|
||||||
/// config file. `Config::Default()` contains None for each setting.
|
/// config file. `Config::Default()` contains None for each setting.
|
||||||
/// When adding more config settings, add it to `Config::load`,
|
/// When adding more config settings, add it to `Config::load`,
|
||||||
/// `get_setting_from_config`, both below, as well as
|
/// `get_setting_from_config`, both below, as well as
|
||||||
/// instance_info::InstanceInfo.to_string(), README.md and app.json.
|
/// instance_info::InstanceInfo.to_string(), README.md and app.json.
|
||||||
#[derive(Default, Serialize, Deserialize, Clone)]
|
#[derive(Default, Serialize, Deserialize, Clone, Debug)]
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
#[serde(rename = "LIBREDDIT_SFW_ONLY")]
|
#[serde(rename = "LIBREDDIT_SFW_ONLY")]
|
||||||
pub(crate) sfw_only: Option<String>,
|
pub(crate) sfw_only: Option<String>,
|
||||||
@ -63,6 +67,9 @@ pub struct Config {
|
|||||||
|
|
||||||
#[serde(rename = "LIBREDDIT_ROBOTS_DISABLE_INDEXING")]
|
#[serde(rename = "LIBREDDIT_ROBOTS_DISABLE_INDEXING")]
|
||||||
pub(crate) robots_disable_indexing: Option<String>,
|
pub(crate) robots_disable_indexing: Option<String>,
|
||||||
|
|
||||||
|
#[serde(rename = "LIBREDDIT_PUSHSHIFT_FRONTEND")]
|
||||||
|
pub(crate) pushshift: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
@ -77,6 +84,7 @@ impl Config {
|
|||||||
// environment variables with "LIBREDDIT", then check the config, then if
|
// environment variables with "LIBREDDIT", then check the config, then if
|
||||||
// both are `None`, return a `None` via the `map_or_else` function
|
// 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) };
|
let parse = |key: &str| -> Option<String> { var(key).ok().map_or_else(|| get_setting_from_config(key, &config), Some) };
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
sfw_only: parse("LIBREDDIT_SFW_ONLY"),
|
sfw_only: parse("LIBREDDIT_SFW_ONLY"),
|
||||||
default_theme: parse("LIBREDDIT_DEFAULT_THEME"),
|
default_theme: parse("LIBREDDIT_DEFAULT_THEME"),
|
||||||
@ -94,6 +102,7 @@ impl Config {
|
|||||||
default_disable_visit_reddit_confirmation: parse("LIBREDDIT_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION"),
|
default_disable_visit_reddit_confirmation: parse("LIBREDDIT_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION"),
|
||||||
banner: parse("LIBREDDIT_BANNER"),
|
banner: parse("LIBREDDIT_BANNER"),
|
||||||
robots_disable_indexing: parse("LIBREDDIT_ROBOTS_DISABLE_INDEXING"),
|
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_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION" => config.default_disable_visit_reddit_confirmation.clone(),
|
||||||
"LIBREDDIT_BANNER" => config.banner.clone(),
|
"LIBREDDIT_BANNER" => config.banner.clone(),
|
||||||
"LIBREDDIT_ROBOTS_DISABLE_INDEXING" => config.robots_disable_indexing.clone(),
|
"LIBREDDIT_ROBOTS_DISABLE_INDEXING" => config.robots_disable_indexing.clone(),
|
||||||
|
"LIBREDDIT_PUSHSHIFT_FRONTEND" => config.pushshift.clone(),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,6 +138,13 @@ pub(crate) fn get_setting(name: &str) -> Option<String> {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
use {sealed_test::prelude::*, std::fs::write};
|
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]
|
#[test]
|
||||||
#[sealed_test(env = [("LIBREDDIT_SFW_ONLY", "on")])]
|
#[sealed_test(env = [("LIBREDDIT_SFW_ONLY", "on")])]
|
||||||
fn test_env_var() {
|
fn test_env_var() {
|
||||||
|
@ -122,6 +122,8 @@ impl InstanceInfo {
|
|||||||
["Deploy timestamp", &self.deploy_unix_ts.to_string()],
|
["Deploy timestamp", &self.deploy_unix_ts.to_string()],
|
||||||
["Compile mode", &self.compile_mode],
|
["Compile mode", &self.compile_mode],
|
||||||
["SFW only", &convert(&self.config.sfw_only)],
|
["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"]),
|
.with_header_row(["Settings"]),
|
||||||
);
|
);
|
||||||
@ -155,6 +157,7 @@ impl InstanceInfo {
|
|||||||
Deploy timestamp: {}\n
|
Deploy timestamp: {}\n
|
||||||
Compile mode: {}\n
|
Compile mode: {}\n
|
||||||
SFW only: {:?}\n
|
SFW only: {:?}\n
|
||||||
|
Pushshift frontend: {:?}\n
|
||||||
Config:\n
|
Config:\n
|
||||||
Banner: {:?}\n
|
Banner: {:?}\n
|
||||||
Hide awards: {:?}\n
|
Hide awards: {:?}\n
|
||||||
@ -175,6 +178,7 @@ impl InstanceInfo {
|
|||||||
self.deploy_unix_ts,
|
self.deploy_unix_ts,
|
||||||
self.compile_mode,
|
self.compile_mode,
|
||||||
self.config.sfw_only,
|
self.config.sfw_only,
|
||||||
|
self.config.pushshift,
|
||||||
self.config.banner,
|
self.config.banner,
|
||||||
self.config.default_hide_awards,
|
self.config.default_hide_awards,
|
||||||
self.config.default_theme,
|
self.config.default_theme,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
// CRATES
|
// CRATES
|
||||||
use crate::client::json;
|
use crate::client::json;
|
||||||
|
use crate::config::get_setting;
|
||||||
use crate::server::RequestExt;
|
use crate::server::RequestExt;
|
||||||
use crate::subreddit::{can_access_quarantine, quarantine};
|
use crate::subreddit::{can_access_quarantine, quarantine};
|
||||||
use crate::utils::{
|
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 ]" {
|
let body = if (val(comment, "author") == "[deleted]" && val(comment, "body") == "[removed]") || val(comment, "body") == "[ Removed by Reddit ]" {
|
||||||
format!(
|
format!(
|
||||||
"<div class=\"md\"><p>[removed] — <a href=\"https://www.unddit.com{}{}\">view removed comment</a></p></div>",
|
"<div class=\"md\"><p>[removed] — <a href=\"https://{}{}{}\">view removed comment</a></p></div>",
|
||||||
post_link, id
|
get_setting("LIBREDDIT_PUSHSHIFT_FRONTEND").unwrap_or(String::from(crate::config::DEFAULT_PUSHSHIFT_FRONTEND)),
|
||||||
|
post_link,
|
||||||
|
id
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
rewrite_urls(&val(comment, "body_html"))
|
rewrite_urls(&val(comment, "body_html"))
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use crate::config::get_setting;
|
||||||
//
|
//
|
||||||
// CRATES
|
// CRATES
|
||||||
//
|
//
|
||||||
@ -662,7 +663,8 @@ pub async fn parse_post(post: &serde_json::Value) -> Post {
|
|||||||
|
|
||||||
let body = if val(post, "removed_by_category") == "moderator" {
|
let body = if val(post, "removed_by_category") == "moderator" {
|
||||||
format!(
|
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
|
permalink
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user