mirror of
				https://gitlab.com/comunic/comunicapiv3
				synced 2025-11-04 09:34:04 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			203 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
//! Project constants
 | 
						|
//!
 | 
						|
//! This module contains all the hard-coded value that might be used everywhere in the project.
 | 
						|
//!
 | 
						|
//! @author Pierre Hubert
 | 
						|
 | 
						|
use std::time::Duration;
 | 
						|
 | 
						|
/// The name of the tables
 | 
						|
pub mod database_tables_names {
 | 
						|
    /// API services tokens table
 | 
						|
    pub const CLIENTS_TABLE: &str = "comunic_clients";
 | 
						|
 | 
						|
    /// User access tokens table
 | 
						|
    pub const USER_ACCESS_TOKENS_TABLE: &str = "comunic_user_access_tokens";
 | 
						|
 | 
						|
    /// User table
 | 
						|
    pub const USERS_TABLE: &str = "utilisateurs";
 | 
						|
 | 
						|
    /// Friends table
 | 
						|
    pub const FRIENDS_TABLE: &str = "amis";
 | 
						|
 | 
						|
    /// Custom emojis table
 | 
						|
    pub const EMOJIS_TABLE: &str = "comunic_custom_emojis";
 | 
						|
 | 
						|
    /// Likes table
 | 
						|
    pub const LIKES_TABLE: &str = "aime";
 | 
						|
 | 
						|
    /// Groups list table
 | 
						|
    pub const GROUPS_LIST_TABLE: &str = "comunic_groups";
 | 
						|
 | 
						|
    /// Groups members table
 | 
						|
    pub const GROUPS_MEMBERS_TABLE: &str = "comunic_groups_members";
 | 
						|
 | 
						|
    /// Conversations tables
 | 
						|
    pub const CONV_LIST_TABLE: &str = "comunic_conversations_list";
 | 
						|
    pub const CONV_MEMBERS_TABLE: &str = "comunic_conversations_members";
 | 
						|
    pub const CONV_MESSAGES_TABLE: &str = "comunic_conversations_messages";
 | 
						|
 | 
						|
    /// Posts table
 | 
						|
    pub const POSTS_TABLE: &str = "texte";
 | 
						|
 | 
						|
    /// Movies table
 | 
						|
    pub const MOVIES_TABLE: &str = "galerie_video";
 | 
						|
 | 
						|
    /// Survey info table
 | 
						|
    pub const SURVEY_INFO_TABLE: &str = "sondage";
 | 
						|
 | 
						|
    /// Survey choices table
 | 
						|
    pub const SURVEY_CHOICES_TABLE: &str = "sondage_choix";
 | 
						|
 | 
						|
    /// Survey responses table
 | 
						|
    pub const SURVEY_RESPONSE_TABLE: &str = "sondage_reponse";
 | 
						|
 | 
						|
    /// Comments table
 | 
						|
    pub const COMMENTS_TABLE: &str = "commentaires";
 | 
						|
 | 
						|
    /// Notifications table
 | 
						|
    pub const NOTIFICATIONS_TABLE: &str = "comunic_notifications";
 | 
						|
}
 | 
						|
 | 
						|
/// Password policy
 | 
						|
pub mod password_policy {
 | 
						|
    /// Allow email in password ?
 | 
						|
    pub const ALLOW_EMAIL_IN_PASSWORD: bool = false;
 | 
						|
 | 
						|
    /// Allow user name in password ?
 | 
						|
    pub const ALLOW_NAME_IN_PASSWORD: bool = false;
 | 
						|
 | 
						|
    /// Minimal length of password
 | 
						|
    pub const MIN_PASSWORD_LENGTH: u64 = 8;
 | 
						|
 | 
						|
    /// Password composition policy
 | 
						|
    pub const MIN_NUMBER_LOWERCASE_LETTER: u64 = 1;
 | 
						|
    pub const MIN_NUMBER_UPPERCASE_LETTER: u64 = 1;
 | 
						|
    pub const MIN_NUMBER_DIGITS: u64 = 1;
 | 
						|
    pub const MIN_NUMBER_SPECIAL_CHARACTERS: u64 = 1;
 | 
						|
    pub const MIN_CATEGORIES_PRESENCE: u64 = 2;
 | 
						|
}
 | 
						|
 | 
						|
/// Minimal conversation policy
 | 
						|
pub mod conservation_policy {
 | 
						|
    use std::time::Duration;
 | 
						|
 | 
						|
    /// Minimum lifetime for inactive account (3 months)
 | 
						|
    pub const MIN_INACTIVE_ACCOUNT_LIFETIME: Duration = Duration::from_secs(60 * 60 * 24 * 30 * 3);
 | 
						|
 | 
						|
    /// Minimum lifetime for notifications (7 days)
 | 
						|
    pub const MIN_NOTIFICATIONS_LIFETIME: Duration = Duration::from_secs(60 * 60 * 24 * 7);
 | 
						|
 | 
						|
    /// Minimum lifetime for comments (1 month)
 | 
						|
    pub const MIN_COMMENTS_LIFETIME: Duration = Duration::from_secs(60 * 60 * 24 * 30);
 | 
						|
 | 
						|
    /// Minimum lifetime for posts (1 month)
 | 
						|
    pub const MIN_POSTS_LIFETIME: Duration = Duration::from_secs(60 * 60 * 24 * 30);
 | 
						|
 | 
						|
    /// Minimum conversation messages lifetime (15 days)
 | 
						|
    pub const MIN_CONVERSATION_MESSAGES_LIFETIME: Duration = Duration::from_secs(60 * 60 * 24 * 15);
 | 
						|
 | 
						|
    /// Minimum likes lifetime (1 month)
 | 
						|
    pub const MIN_LIKES_LIFETIME: Duration = Duration::from_secs(60 * 60 * 24 * 30);
 | 
						|
}
 | 
						|
 | 
						|
/// WebSocket access token lifetime, in seconds
 | 
						|
pub const WS_ACCESS_TOKEN_LIFETIME: u64 = 10;
 | 
						|
 | 
						|
/// WebSocket access token length
 | 
						|
pub const WS_ACCESS_TOKEN_LENGTH: usize = 10;
 | 
						|
 | 
						|
/// Lifetime of limit counter (1 hour)
 | 
						|
pub const LIMIT_COUNTER_LIFETIME: u64 = 60 * 60;
 | 
						|
 | 
						|
/// The account image to show for user who do not have any
 | 
						|
pub const DEFAULT_ACCOUNT_IMAGE: &str = "avatars/0Reverse.png";
 | 
						|
 | 
						|
/// The account image to show for users who are not allowed to access other users account images
 | 
						|
pub const ERROR_ACCOUNT_IMAGE: &str = "avatars/0Red.png";
 | 
						|
 | 
						|
/// The path where groups logos should be stored
 | 
						|
pub const PATH_GROUPS_LOGOS: &str = "groups_logo";
 | 
						|
 | 
						|
/// The group logo to use when no custom logo have been uploaded
 | 
						|
pub const DEFAULT_GROUP_LOGO: &str = "groups_logo/default.png";
 | 
						|
 | 
						|
/// The path where image associated with posts should be stored
 | 
						|
pub const PATH_POST_IMAGES: &str = "imgpost";
 | 
						|
 | 
						|
/// The path were PDF included with posts should be stored
 | 
						|
pub const PATH_POST_PDF: &str = "post_pdf";
 | 
						|
 | 
						|
/// The page where comments images are stored
 | 
						|
pub const PATH_COMMENTS_IMAGES: &str = "imgcommentaire";
 | 
						|
 | 
						|
/// Maximum requests size (50 Mo)
 | 
						|
pub const MAX_REQUEST_SIZE: usize = 50000000;
 | 
						|
 | 
						|
/// Maximum number of choices per survey
 | 
						|
pub const MAXIMUM_NUMBER_SURVEY_CHOICES: usize = 20;
 | 
						|
 | 
						|
/// Length of password reset token
 | 
						|
pub const PASSWORD_RESET_TOKEN_LENGTH: usize = 255;
 | 
						|
 | 
						|
/// Duration of the validity of a password reset token (6 hours)
 | 
						|
pub const PASSWORD_RESET_TOKEN_LIFETIME: u64 = 60 * 60 * 6;
 | 
						|
 | 
						|
/// Minimum password length
 | 
						|
pub const PASSWORD_MIN_LENGTH: usize = 3;
 | 
						|
 | 
						|
/// Supported languages (for ComunicWeb)
 | 
						|
pub const SUPPORTED_LANGUAGES: &'static [&'static str] = &["en", "fr"];
 | 
						|
 | 
						|
/// Interval at which last active time of user should be recorded
 | 
						|
pub const USER_LAST_ACTIVITY_REFRESH: Duration = Duration::from_secs(60);
 | 
						|
 | 
						|
/// Interval at which last activity of an access token should be recorded
 | 
						|
pub const USER_ACCESS_TOKEN_ACTIVITY_REFRESH: Duration = Duration::from_secs(60 * 60);
 | 
						|
 | 
						|
/// Sleep time before initial clean up execution
 | 
						|
pub const INITIAL_REFRESH_LOAD_INTERVAL: Duration = Duration::from_secs(5);
 | 
						|
 | 
						|
/// Interval between each cleanup operation (every hour)
 | 
						|
pub const CLEAN_UP_INTERVAL: Duration = Duration::from_secs(60 * 60);
 | 
						|
 | 
						|
/// Minimal mobile version supported
 | 
						|
pub const MIN_SUPPORTED_MOBILE_VERSION: &str = "1.1.2";
 | 
						|
 | 
						|
/// Conversations constants
 | 
						|
pub mod conversations {
 | 
						|
    /// Minimum message length
 | 
						|
    pub const MIN_CONVERSATION_MESSAGE_LENGTH: usize = 1;
 | 
						|
    pub const MAX_CONVERSATION_MESSAGE_LENGTH: usize = 16000;
 | 
						|
 | 
						|
    /// Allowed files type in conversations
 | 
						|
    pub const ALLOWED_CONVERSATION_FILES_TYPES: [&str; 17] = [
 | 
						|
        "image/png", "image/jpeg", "image/gif", "image/bmp",
 | 
						|
        "application/pdf",
 | 
						|
        "audio/mpeg",
 | 
						|
        "video/mp4",
 | 
						|
        "application/zip",
 | 
						|
 | 
						|
        // MS Office docs
 | 
						|
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
 | 
						|
        "application/vnd.openxmlformats-officedocument.presentationml.presentation",
 | 
						|
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
 | 
						|
 | 
						|
        // Open Office docs
 | 
						|
        "application/vnd.oasis.opendocument.text",
 | 
						|
        "application/vnd.oasis.opendocument.presentation",
 | 
						|
        "application/vnd.oasis.opendocument.spreadsheet",
 | 
						|
 | 
						|
        // Source code docs (UTF-8 encoded)
 | 
						|
        "text/x-csrc", "text/plain", "text/x-c++src"
 | 
						|
    ];
 | 
						|
 | 
						|
    /// File maximum size in conversations (10 Mb)
 | 
						|
    pub const CONVERSATION_FILES_MAX_SIZE: usize = 10 * 1024 * 1024;
 | 
						|
 | 
						|
    /// Minimum interval before notifying again that someone is writing
 | 
						|
    pub const CONVERSATION_WRITING_EVENT_INTERVAL: u64 = 1;
 | 
						|
 | 
						|
    /// Lifetime of conversation writing event
 | 
						|
    pub const CONVERSATION_WRITING_EVENT_LIFETIME: u64 = 3;
 | 
						|
} |