import 'package:flutter/widgets.dart'; import 'package:version/version.dart'; /// Server static configuration /// /// @author Pierre Hubert class NotificationsPolicy { final bool hasFirebase; final bool hasIndependent; const NotificationsPolicy({ @required this.hasFirebase, @required this.hasIndependent, }) : assert(hasFirebase != null), assert(hasIndependent != null); } 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 maxConversationNameLen; 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; final int maxLogoWidth; final int maxLogoHeight; const ConversationsPolicy({ @required this.maxConversationNameLen, @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, @required this.maxLogoWidth, @required this.maxLogoHeight, }) : assert(maxConversationNameLen != null), 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), assert(maxLogoWidth != null), assert(maxLogoHeight != null); } class AccountInformationPolicy { final int minFirstNameLength; final int maxFirstNameLength; final int minLastNameLength; final int maxLastNameLength; const AccountInformationPolicy({ @required this.minFirstNameLength, @required this.maxFirstNameLength, @required this.minLastNameLength, @required this.maxLastNameLength, }) : assert(minFirstNameLength != null), assert(maxFirstNameLength != null), assert(minLastNameLength != null), assert(maxLastNameLength != null); } class ServerConfig { final Version minSupportedMobileVersion; final String termsURL; final String playStoreURL; final String androidDirectDownloadURL; final NotificationsPolicy notificationsPolicy; final PasswordPolicy passwordPolicy; final ServerDataConservationPolicy dataConservationPolicy; final ConversationsPolicy conversationsPolicy; final AccountInformationPolicy accountInformationPolicy; const ServerConfig({ @required this.minSupportedMobileVersion, @required this.termsURL, @required this.playStoreURL, @required this.androidDirectDownloadURL, @required this.notificationsPolicy, @required this.passwordPolicy, @required this.dataConservationPolicy, @required this.conversationsPolicy, @required this.accountInformationPolicy, }) : assert(minSupportedMobileVersion != null), assert(termsURL != null), assert(playStoreURL != null), assert(androidDirectDownloadURL != null), assert(notificationsPolicy != null), assert(passwordPolicy != null), assert(dataConservationPolicy != null), assert(conversationsPolicy != null), assert(accountInformationPolicy != null); }