import 'package:comunic/models/api_request.dart'; import 'package:comunic/models/server_config.dart'; /// Server configuration helper /// /// @author Pierre Hubert class ServerConfigurationHelper { static ServerConfig _config; /// Make sure the configuration has been correctly loaded static Future ensureLoaded() async { if (_config != null) return; final response = (await APIRequest.withoutLogin("server/config").execWithThrow()) .getObject(); final passwordPolicy = response["password_policy"]; final dataConservationPolicy = response["data_conservation_policy"]; _config = ServerConfig( passwordPolicy: PasswordPolicy( allowMailInPassword: passwordPolicy["allow_email_in_password"], allowNameInPassword: passwordPolicy["allow_name_in_password"], minPasswordLength: passwordPolicy["min_password_length"], minNumberUpperCaseLetters: passwordPolicy["min_number_upper_case_letters"], minNumberLowerCaseLetters: passwordPolicy["min_number_lower_case_letters"], minNumberDigits: passwordPolicy["min_number_digits"], minNumberSpecialCharacters: passwordPolicy["min_number_special_characters"], minCategoriesPresence: passwordPolicy["min_categories_presence"], ), dataConservationPolicy: ServerDataConservationPolicy( minInactiveAccountLifetime: dataConservationPolicy["min_inactive_account_lifetime"], minNotificationLifetime: dataConservationPolicy["min_notification_lifetime"], minCommentsLifetime: dataConservationPolicy["min_comments_lifetime"], minPostsLifetime: dataConservationPolicy["min_posts_lifetime"], minConversationMessagesLifetime: dataConservationPolicy["min_conversation_messages_lifetime"], minLikesLifetime: dataConservationPolicy["min_likes_lifetime"], ), ); } /// Get current server configuration, throwing if it is not loaded yet static ServerConfig get config { if (_config == null) throw Exception( "Trying to access server configuration but it is not loaded yet!"); return _config; } }