import 'package:flutter/widgets.dart'; import 'package:version/version.dart'; /// Server static configuration /// /// @author Pierre Hubert class PasswordPolicy { final bool allowMailInPassword; final bool allowNameInPassword; final int minPasswordLength; final int minNumberUpperCaseLetters; final int minNumberLowerCaseLetters; final int minNumberDigits; final int minNumberSpecialCharacters; final int minCategoriesPresence; const PasswordPolicy({ @required this.allowMailInPassword, @required this.allowNameInPassword, @required this.minPasswordLength, @required this.minNumberUpperCaseLetters, @required this.minNumberLowerCaseLetters, @required this.minNumberDigits, @required this.minNumberSpecialCharacters, @required this.minCategoriesPresence, }) : assert(allowMailInPassword != null), assert(allowNameInPassword != null), assert(minPasswordLength != null), assert(minNumberUpperCaseLetters != null), assert(minNumberLowerCaseLetters != null), assert(minNumberDigits != null), assert(minNumberSpecialCharacters != null), assert(minCategoriesPresence != null); } class ServerDataConservationPolicy { final int minInactiveAccountLifetime; final int minNotificationLifetime; final int minCommentsLifetime; final int minPostsLifetime; final int minConversationMessagesLifetime; final int minLikesLifetime; const ServerDataConservationPolicy({ @required this.minInactiveAccountLifetime, @required this.minNotificationLifetime, @required this.minCommentsLifetime, @required this.minPostsLifetime, @required this.minConversationMessagesLifetime, @required this.minLikesLifetime, }) : assert(minInactiveAccountLifetime != null), assert(minNotificationLifetime != null), assert(minCommentsLifetime != null), assert(minPostsLifetime != null), assert(minConversationMessagesLifetime != null), assert(minLikesLifetime != null); } class ConversationsPolicy { final int minMessageLen; final int maxMessageLen; final List allowedFilesType; final int filesMaxSize; final int writingEventInterval; final int writingEventLifetime; final int maxMessageImageWidth; final int maxMessageImageHeight; final int maxThumbnailWidth; final int maxThumbnailHeight; const ConversationsPolicy({ @required this.minMessageLen, @required this.maxMessageLen, @required this.allowedFilesType, @required this.filesMaxSize, @required this.writingEventInterval, @required this.writingEventLifetime, @required this.maxMessageImageWidth, @required this.maxMessageImageHeight, @required this.maxThumbnailWidth, @required this.maxThumbnailHeight, }) : assert(minMessageLen != null), assert(maxMessageLen != null), assert(allowedFilesType != null), assert(filesMaxSize != null), assert(writingEventInterval != null), assert(writingEventLifetime != null), assert(maxMessageImageWidth != null), assert(maxMessageImageHeight != null), assert(maxThumbnailWidth != null), assert(maxThumbnailHeight != null); } class ServerConfig { final Version minSupportedMobileVersion; final String termsURL; final String playStoreURL; final String androidDirectDownloadURL; final PasswordPolicy passwordPolicy; final ServerDataConservationPolicy dataConservationPolicy; final ConversationsPolicy conversationsPolicy; const ServerConfig({ @required this.minSupportedMobileVersion, @required this.termsURL, @required this.playStoreURL, @required this.androidDirectDownloadURL, @required this.passwordPolicy, @required this.dataConservationPolicy, @required this.conversationsPolicy, }) : assert(minSupportedMobileVersion != null), assert(termsURL != null), assert(playStoreURL != null), assert(androidDirectDownloadURL != null), assert(passwordPolicy != null), assert(dataConservationPolicy != null), assert(conversationsPolicy != null); }