2021-02-16 18:30:06 +00:00
|
|
|
import 'package:comunic/models/api_request.dart';
|
|
|
|
import 'package:comunic/models/server_config.dart';
|
2021-02-20 08:24:51 +00:00
|
|
|
import 'package:version/version.dart';
|
2021-02-16 18:30:06 +00:00
|
|
|
|
|
|
|
/// Server configuration helper
|
|
|
|
///
|
|
|
|
/// @author Pierre Hubert
|
|
|
|
|
|
|
|
class ServerConfigurationHelper {
|
2022-03-10 18:39:57 +00:00
|
|
|
static ServerConfig? _config;
|
2021-02-16 18:30:06 +00:00
|
|
|
|
|
|
|
/// Make sure the configuration has been correctly loaded
|
|
|
|
static Future<void> ensureLoaded() async {
|
|
|
|
if (_config != null) return;
|
|
|
|
|
|
|
|
final response =
|
|
|
|
(await APIRequest.withoutLogin("server/config").execWithThrow())
|
2022-03-10 19:36:55 +00:00
|
|
|
.getObject();
|
2021-02-16 18:30:06 +00:00
|
|
|
|
2021-12-30 11:02:18 +00:00
|
|
|
final banner = response["banner"];
|
2021-04-12 17:26:05 +00:00
|
|
|
final pushNotificationsPolicy = response["push_notifications"];
|
2021-02-18 17:20:50 +00:00
|
|
|
final passwordPolicy = response["password_policy"];
|
2021-02-16 18:30:06 +00:00
|
|
|
final dataConservationPolicy = response["data_conservation_policy"];
|
2021-03-12 15:19:07 +00:00
|
|
|
final conversationsPolicy = response["conversations_policy"];
|
2021-04-16 06:14:19 +00:00
|
|
|
final accountInformationPolicy = response["account_info_policy"];
|
2022-03-18 16:54:19 +00:00
|
|
|
final reportPolicy = response["report_policy"];
|
2021-02-16 18:30:06 +00:00
|
|
|
|
|
|
|
_config = ServerConfig(
|
2022-03-18 16:54:19 +00:00
|
|
|
minSupportedMobileVersion:
|
|
|
|
Version.parse(response["min_supported_mobile_version"]),
|
|
|
|
termsURL: response["terms_url"],
|
|
|
|
privacyPolicyURL: response["privacy_policy_url"],
|
|
|
|
contactEmail: response["contact_email"],
|
|
|
|
playStoreURL: response["play_store_url"],
|
|
|
|
androidDirectDownloadURL: response["android_direct_download_url"],
|
|
|
|
banner: banner == null
|
|
|
|
? null
|
|
|
|
: Banner(
|
|
|
|
enabled: banner["enabled"],
|
|
|
|
expire: banner["expire"],
|
|
|
|
nature: BannerNatureExt.fromStr(banner["nature"]),
|
|
|
|
message: Map<String, dynamic>.from(banner["message"])
|
|
|
|
.map((key, value) => MapEntry(key, value.toString())),
|
|
|
|
link: banner["link"]),
|
|
|
|
notificationsPolicy: NotificationsPolicy(
|
|
|
|
hasFirebase: pushNotificationsPolicy["has_firebase"],
|
|
|
|
hasIndependent: pushNotificationsPolicy["has_independent"],
|
|
|
|
),
|
|
|
|
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"],
|
|
|
|
),
|
|
|
|
conversationsPolicy: ConversationsPolicy(
|
|
|
|
maxConversationNameLen:
|
|
|
|
conversationsPolicy["max_conversation_name_len"],
|
|
|
|
minMessageLen: conversationsPolicy["min_message_len"],
|
|
|
|
maxMessageLen: conversationsPolicy["max_message_len"],
|
|
|
|
allowedFilesType:
|
|
|
|
conversationsPolicy["allowed_files_type"].cast<String>(),
|
|
|
|
filesMaxSize: conversationsPolicy["files_max_size"],
|
|
|
|
writingEventInterval: conversationsPolicy["writing_event_interval"],
|
|
|
|
writingEventLifetime: conversationsPolicy["writing_event_lifetime"],
|
|
|
|
maxMessageImageWidth: conversationsPolicy["max_message_image_width"],
|
|
|
|
maxMessageImageHeight:
|
|
|
|
conversationsPolicy["max_message_image_height"],
|
|
|
|
maxThumbnailWidth: conversationsPolicy["max_thumbnail_width"],
|
|
|
|
maxThumbnailHeight: conversationsPolicy["max_thumbnail_height"],
|
|
|
|
maxLogoWidth: conversationsPolicy["max_logo_width"],
|
|
|
|
maxLogoHeight: conversationsPolicy["max_logo_height"],
|
|
|
|
),
|
|
|
|
accountInformationPolicy: AccountInformationPolicy(
|
|
|
|
minFirstNameLength: accountInformationPolicy["min_first_name_length"],
|
|
|
|
maxFirstNameLength: accountInformationPolicy["max_first_name_length"],
|
|
|
|
minLastNameLength: accountInformationPolicy["min_last_name_length"],
|
|
|
|
maxLastNameLength: accountInformationPolicy["max_last_name_length"],
|
|
|
|
maxLocationLength: accountInformationPolicy["max_location_length"],
|
|
|
|
),
|
|
|
|
reportPolicy: reportPolicy == null
|
|
|
|
? null
|
|
|
|
: ReportPolicy(
|
|
|
|
causes: List.from(reportPolicy["causes"]
|
|
|
|
.map((cause) => ReportCause(
|
|
|
|
id: cause["id"],
|
|
|
|
label: new Map<String, String>.from(cause["label"])))
|
|
|
|
.toList()),
|
|
|
|
maxCommentLength: reportPolicy["max_comment_length"],
|
|
|
|
));
|
2021-02-16 18:30:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Get current server configuration, throwing if it is not loaded yet
|
2022-03-10 18:39:57 +00:00
|
|
|
static ServerConfig? get config {
|
2021-02-16 18:30:06 +00:00
|
|
|
if (_config == null)
|
|
|
|
throw Exception(
|
|
|
|
"Trying to access server configuration but it is not loaded yet!");
|
|
|
|
|
|
|
|
return _config;
|
|
|
|
}
|
|
|
|
}
|
2021-03-12 17:54:15 +00:00
|
|
|
|
|
|
|
/// Shortcut for server configuration
|
2022-03-10 18:39:57 +00:00
|
|
|
ServerConfig? get srvConfig => ServerConfigurationHelper.config;
|
2021-12-30 11:02:18 +00:00
|
|
|
|
2022-03-18 16:54:19 +00:00
|
|
|
bool get showBanner => srvConfig!.banner != null && srvConfig!.banner!.visible;
|