2021-02-15 17:03:25 +01:00
|
|
|
//! # Server configuration
|
|
|
|
//!
|
|
|
|
//! @author Pierre Hubert
|
|
|
|
use serde::Serialize;
|
2021-02-17 16:32:49 +01:00
|
|
|
|
2021-03-12 16:02:54 +01:00
|
|
|
use crate::constants::{conservation_policy, MIN_SUPPORTED_MOBILE_VERSION, password_policy};
|
2021-03-13 11:28:20 +01:00
|
|
|
use crate::constants::conversations::{ALLOWED_CONVERSATION_FILES_TYPES, CONVERSATION_FILES_MAX_SIZE, CONVERSATION_WRITING_EVENT_INTERVAL, CONVERSATION_WRITING_EVENT_LIFETIME, MAX_CONV_IMAGE_MESSAGE_WIDTH, MAX_CONV_LOGO_HEIGHT, MAX_CONV_LOGO_WIDTH, MAX_CONV_MESSAGE_THUMBNAIL_HEIGHT, MAX_CONV_MESSAGE_THUMBNAIL_WIDTH, MAX_CONVERSATION_MESSAGE_LENGTH, MIN_CONVERSATION_MESSAGE_LENGTH};
|
2021-02-20 09:31:38 +01:00
|
|
|
use crate::data::config::conf;
|
2021-02-17 16:32:49 +01:00
|
|
|
|
|
|
|
#[derive(Serialize)]
|
|
|
|
struct PasswordPolicy {
|
|
|
|
allow_email_in_password: bool,
|
|
|
|
allow_name_in_password: bool,
|
|
|
|
min_password_length: u64,
|
|
|
|
min_number_upper_case_letters: u64,
|
|
|
|
min_number_lower_case_letters: u64,
|
|
|
|
min_number_digits: u64,
|
|
|
|
min_number_special_characters: u64,
|
|
|
|
min_categories_presence: u64,
|
|
|
|
}
|
2021-02-15 17:03:25 +01:00
|
|
|
|
|
|
|
#[derive(Serialize)]
|
|
|
|
struct DataConservationPolicy {
|
|
|
|
min_inactive_account_lifetime: u64,
|
|
|
|
min_notification_lifetime: u64,
|
|
|
|
min_comments_lifetime: u64,
|
|
|
|
min_posts_lifetime: u64,
|
|
|
|
min_conversation_messages_lifetime: u64,
|
|
|
|
min_likes_lifetime: u64,
|
|
|
|
}
|
|
|
|
|
2021-03-12 16:02:54 +01:00
|
|
|
#[derive(Serialize)]
|
|
|
|
struct ConversationsPolicy {
|
2021-03-12 16:08:47 +01:00
|
|
|
min_message_len: usize,
|
|
|
|
max_message_len: usize,
|
|
|
|
allowed_files_type: [&'static str; 17],
|
|
|
|
files_max_size: usize,
|
|
|
|
writing_event_interval: u64,
|
|
|
|
writing_event_lifetime: u64,
|
2021-03-12 19:17:53 +01:00
|
|
|
max_message_image_width: u32,
|
|
|
|
max_message_image_height: u32,
|
|
|
|
max_thumbnail_width: u32,
|
|
|
|
max_thumbnail_height: u32,
|
2021-03-13 11:28:20 +01:00
|
|
|
max_logo_width: u32,
|
|
|
|
max_logo_height: u32,
|
2021-03-12 16:02:54 +01:00
|
|
|
}
|
|
|
|
|
2021-02-15 17:03:25 +01:00
|
|
|
#[derive(Serialize)]
|
|
|
|
pub struct ServerConfig {
|
2021-02-20 09:07:30 +01:00
|
|
|
min_supported_mobile_version: &'static str,
|
2021-02-20 11:21:45 +01:00
|
|
|
terms_url: &'static str,
|
|
|
|
privacy_policy_url: &'static str,
|
|
|
|
play_store_url: &'static str,
|
2021-02-20 09:44:34 +01:00
|
|
|
android_direct_download_url: String,
|
2021-02-17 16:32:49 +01:00
|
|
|
password_policy: PasswordPolicy,
|
2021-02-15 17:03:25 +01:00
|
|
|
data_conservation_policy: DataConservationPolicy,
|
2021-03-12 16:02:54 +01:00
|
|
|
conversations_policy: ConversationsPolicy,
|
2021-02-15 17:03:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
impl ServerConfig {
|
|
|
|
pub fn new() -> Self {
|
|
|
|
ServerConfig {
|
2021-02-20 09:07:30 +01:00
|
|
|
min_supported_mobile_version: MIN_SUPPORTED_MOBILE_VERSION,
|
2021-02-20 11:21:45 +01:00
|
|
|
terms_url: &conf().terms_url,
|
|
|
|
privacy_policy_url: &conf().privacy_policy_url,
|
|
|
|
play_store_url: &conf().play_store_url,
|
2021-02-20 09:44:34 +01:00
|
|
|
android_direct_download_url: conf().android_direct_download_url.clone(),
|
2021-03-05 12:30:40 +01:00
|
|
|
|
2021-02-17 16:32:49 +01:00
|
|
|
password_policy: PasswordPolicy {
|
|
|
|
allow_email_in_password: password_policy::ALLOW_EMAIL_IN_PASSWORD,
|
|
|
|
allow_name_in_password: password_policy::ALLOW_NAME_IN_PASSWORD,
|
|
|
|
min_password_length: password_policy::MIN_PASSWORD_LENGTH,
|
|
|
|
min_number_upper_case_letters: password_policy::MIN_NUMBER_UPPERCASE_LETTER,
|
|
|
|
min_number_lower_case_letters: password_policy::MIN_NUMBER_LOWERCASE_LETTER,
|
|
|
|
min_number_digits: password_policy::MIN_NUMBER_DIGITS,
|
|
|
|
min_number_special_characters: password_policy::MIN_NUMBER_SPECIAL_CHARACTERS,
|
|
|
|
min_categories_presence: password_policy::MIN_CATEGORIES_PRESENCE,
|
|
|
|
},
|
|
|
|
|
2021-02-15 17:03:25 +01:00
|
|
|
data_conservation_policy: DataConservationPolicy {
|
|
|
|
min_inactive_account_lifetime: conservation_policy::MIN_INACTIVE_ACCOUNT_LIFETIME.as_secs(),
|
|
|
|
min_notification_lifetime: conservation_policy::MIN_NOTIFICATIONS_LIFETIME.as_secs(),
|
|
|
|
min_comments_lifetime: conservation_policy::MIN_COMMENTS_LIFETIME.as_secs(),
|
|
|
|
min_posts_lifetime: conservation_policy::MIN_POSTS_LIFETIME.as_secs(),
|
|
|
|
min_conversation_messages_lifetime: conservation_policy::MIN_CONVERSATION_MESSAGES_LIFETIME.as_secs(),
|
|
|
|
min_likes_lifetime: conservation_policy::MIN_LIKES_LIFETIME.as_secs(),
|
2021-02-17 16:32:49 +01:00
|
|
|
},
|
2021-03-12 16:02:54 +01:00
|
|
|
|
|
|
|
conversations_policy: ConversationsPolicy {
|
2021-03-12 16:08:47 +01:00
|
|
|
min_message_len: MIN_CONVERSATION_MESSAGE_LENGTH,
|
|
|
|
max_message_len: MAX_CONVERSATION_MESSAGE_LENGTH,
|
|
|
|
allowed_files_type: ALLOWED_CONVERSATION_FILES_TYPES,
|
|
|
|
files_max_size: CONVERSATION_FILES_MAX_SIZE,
|
|
|
|
writing_event_interval: CONVERSATION_WRITING_EVENT_INTERVAL,
|
|
|
|
writing_event_lifetime: CONVERSATION_WRITING_EVENT_LIFETIME,
|
2021-03-12 19:17:53 +01:00
|
|
|
max_message_image_width: MAX_CONV_IMAGE_MESSAGE_WIDTH,
|
|
|
|
max_message_image_height: MAX_CONV_IMAGE_MESSAGE_WIDTH,
|
|
|
|
max_thumbnail_width: MAX_CONV_MESSAGE_THUMBNAIL_WIDTH,
|
|
|
|
max_thumbnail_height: MAX_CONV_MESSAGE_THUMBNAIL_HEIGHT,
|
2021-03-13 11:28:20 +01:00
|
|
|
max_logo_width: MAX_CONV_LOGO_WIDTH,
|
|
|
|
max_logo_height: MAX_CONV_LOGO_HEIGHT,
|
2021-03-12 16:02:54 +01:00
|
|
|
},
|
2021-02-15 17:03:25 +01:00
|
|
|
}
|
|
|
|
}
|
2021-03-12 19:17:53 +01:00
|
|
|
}
|