Skip to main content

cloudillo_profile/
settings.rs

1//! Profile-related settings registration
2
3use crate::prelude::*;
4use cloudillo_core::settings::{
5	PermissionLevel, SettingDefinition, SettingScope, SettingValue, SettingsRegistry,
6};
7
8/// Register all profile-related settings
9pub fn register_settings(registry: &mut SettingsRegistry) -> ClResult<()> {
10	// Preferred language for emails and notifications
11	registry.register(
12		SettingDefinition::builder("profile.lang")
13			.description("Preferred language for emails and notifications (e.g., 'hu', 'de')")
14			.scope(SettingScope::Tenant)
15			.permission(PermissionLevel::User)
16			.optional(true)
17			.build()?,
18	)?;
19
20	// Default post visibility
21	registry.register(
22		SettingDefinition::builder("profile.default_visibility")
23			.description("Default visibility for new posts (P=Public, C=Connected, F=Followers)")
24			.default(SettingValue::String("F".into()))
25			.scope(SettingScope::Tenant)
26			.permission(PermissionLevel::User)
27			.validator(|v| {
28				if let SettingValue::String(s) = v {
29					if ["P", "C", "F"].contains(&s.as_str()) {
30						return Ok(());
31					}
32				}
33				Err(Error::ValidationError("Visibility must be P, C, or F".into()))
34			})
35			.build()?,
36	)?;
37
38	// Allow followers
39	registry.register(
40		SettingDefinition::builder("profile.allow_followers")
41			.description("Allow others to follow you")
42			.default(SettingValue::Bool(true))
43			.scope(SettingScope::Tenant)
44			.permission(PermissionLevel::User)
45			.build()?,
46	)?;
47
48	// Connection mode (auto-handling for incoming connection requests)
49	registry.register(
50		SettingDefinition::builder("profile.connection_mode")
51			.description(
52				"Auto-handling for incoming connection requests: M=manual, A=auto-accept, I=ignore",
53			)
54			.default(SettingValue::String("M".into()))
55			.scope(SettingScope::Tenant)
56			.permission(PermissionLevel::User)
57			.validator(|v| {
58				if let SettingValue::String(s) = v {
59					if ["M", "A", "I"].contains(&s.as_str()) {
60						return Ok(());
61					}
62				}
63				Err(Error::ValidationError(
64					"Connection mode must be 'M' (manual), 'A' (auto-accept) or 'I' (ignore)"
65						.into(),
66				))
67			})
68			.build()?,
69	)?;
70
71	// Auto-approve incoming federated actions
72	registry.register(
73		SettingDefinition::builder("profile.auto_approve_actions")
74			.description(
75				"Automatically approve incoming actions (POST, MSG, REPOST) from trusted sources",
76			)
77			.default(SettingValue::Bool(false))
78			.scope(SettingScope::Tenant)
79			.permission(PermissionLevel::User)
80			.build()?,
81	)?;
82
83	Ok(())
84}
85
86// vim: ts=4