fix(self-hosting): use instance contacts and live product name (#3333)

This commit is contained in:
Hampus authored and GitHub committed 2026-10-09 01:39:35 +02:00
1 parent 454fefdb92
commit a5c1362f4a
308 files changed
+16533 -13512

No files matched your search

@@ -417,6 +417,8 @@ pub struct AppSetupConfigResponse {
pub struct AppLegalConfigResponse {
pub terms_url: Option<String>,
pub privacy_url: Option<String>,
#[serde(default)]
pub guidelines_url: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
@@ -927,6 +929,8 @@ pub struct AppLegalConfigUpdateRequest {
pub terms_url: Option<Option<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub privacy_url: Option<Option<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub guidelines_url: Option<Option<String>>,
}
#[derive(Clone, Debug, Default, Serialize)]
+42
View File
@@ -709,6 +709,7 @@ fn build_app_legal_update(form: &MultiValueForm) -> InstanceConfigUpdateRequest
legal: Some(AppLegalConfigUpdateRequest {
terms_url: optional("app_terms_url"),
privacy_url: optional("app_privacy_url"),
guidelines_url: optional("app_guidelines_url"),
}),
registration: None,
}),
@@ -1158,6 +1159,47 @@ pub async fn limit_config_post(
mod tests {
use super::*;
#[test]
fn build_app_legal_update_sends_the_guidelines_url_and_clears_blank_fields() {
let form = MultiValueForm::parse(
b"app_terms_url=+https%3A%2F%2Fexample.com%2Fterms+&app_privacy_url=&app_guidelines_url=https%3A%2F%2Fexample.com%2Frules",
);
let request = build_app_legal_update(&form);
let legal = request
.app_public
.expect("app public update")
.legal
.expect("legal update");
assert_eq!(
legal.terms_url,
Some(Some("https://example.com/terms".to_owned()))
);
assert_eq!(legal.privacy_url, Some(None));
assert_eq!(
legal.guidelines_url,
Some(Some("https://example.com/rules".to_owned()))
);
let body = serde_json::to_value(&legal).expect("serialize legal update");
assert_eq!(
body,
serde_json::json!({
"terms_url": "https://example.com/terms",
"privacy_url": null,
"guidelines_url": "https://example.com/rules"
})
);
let cleared = build_app_legal_update(&MultiValueForm::parse(
b"app_terms_url=&app_privacy_url=&app_guidelines_url=+",
));
let body = serde_json::to_value(cleared.app_public.expect("app public").legal)
.expect("serialize cleared legal update");
assert_eq!(
body,
serde_json::json!({"terms_url": null, "privacy_url": null, "guidelines_url": null})
);
}
#[test]
fn build_integrations_update_leaves_email_alone_when_its_fields_are_hidden() {
let hidden = build_integrations_update(&MultiValueForm::parse(
@@ -167,6 +167,7 @@ pub fn instance_config_page(
csrf_token,
&instance_config.integrations,
instance_config.account_identity.mode,
&instance_config.app_public.branding.product_name,
))
},
))
@@ -568,6 +569,7 @@ fn integrations_config_section(
csrf_token: &str,
integrations: &InstanceIntegrationsResponse,
account_identity: AccountIdentityMode,
product_name: &str,
) -> Markup {
let smtp_port = integrations
.email
@@ -629,7 +631,7 @@ fn integrations_config_section(
"integration_email_from_name",
"From name",
integrations.email.from_name.as_deref().unwrap_or(""),
"Fluxer",
product_name,
))
(text_input(
"integration_smtp_host",
@@ -955,9 +957,18 @@ fn app_public_config_section(
app_public.legal.privacy_url.as_deref().unwrap_or(""),
"https://example.com/privacy",
))
(text_input(
"app_guidelines_url",
"Community Guidelines URL",
app_public.legal.guidelines_url.as_deref().unwrap_or(""),
"https://example.com/guidelines",
))
}
p class="text-xs text-neutral-500" {
"Registration asks for agreement only to the documents configured here. Leave both blank to hide legal consent on self-hosted registration."
"Registration asks for agreement only to the terms and privacy documents configured here. Leave both blank to hide legal consent on self-hosted registration."
}
p class="text-xs text-neutral-500" {
"The community guidelines URL is linked from the app, the report flow and enforcement emails. Use an absolute http or https URL. Leave it blank to hide those links."
}
(form_actions(html! {
(submit_button("Save Legal Documents"))
@@ -1966,6 +1977,7 @@ mod tests {
"csrf",
&integrations,
AccountIdentityMode::Username,
"Fluxer",
)
.into_string();
assert!(!username.contains("Email delivery"));
@@ -1978,6 +1990,7 @@ mod tests {
"csrf",
&integrations,
AccountIdentityMode::Email,
"Fluxer",
)
.into_string();
assert!(email.contains("Email delivery"));