1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-25 06:19:22 +00:00
comunicmobile/lib/models/server_config.dart

191 lines
5.1 KiB
Dart
Raw Normal View History

2021-12-30 11:02:18 +00:00
import 'package:comunic/utils/date_utils.dart';
2022-03-18 16:54:19 +00:00
import 'package:comunic/utils/intl_utils.dart';
2021-02-20 08:24:51 +00:00
import 'package:version/version.dart';
/// Server static configuration
///
/// @author Pierre Hubert
2021-04-12 17:26:05 +00:00
class NotificationsPolicy {
final bool hasFirebase;
final bool hasIndependent;
const NotificationsPolicy({
required this.hasFirebase,
required this.hasIndependent,
2022-03-11 16:13:54 +00:00
});
2021-04-12 17:26:05 +00:00
}
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,
2022-03-11 16:09:37 +00:00
});
}
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,
2022-03-11 16:09:37 +00:00
});
}
2021-03-12 15:19:07 +00:00
class ConversationsPolicy {
2021-04-06 15:04:55 +00:00
final int maxConversationNameLen;
2021-03-12 15:19:07 +00:00
final int minMessageLen;
final int maxMessageLen;
final List<String> allowedFilesType;
final int filesMaxSize;
final int writingEventInterval;
final int writingEventLifetime;
2021-03-12 18:36:42 +00:00
final int maxMessageImageWidth;
final int maxMessageImageHeight;
final int maxThumbnailWidth;
final int maxThumbnailHeight;
2021-03-13 10:33:25 +00:00
final int maxLogoWidth;
final int maxLogoHeight;
2021-03-12 15:19:07 +00:00
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,
2022-03-11 16:09:37 +00:00
});
2021-03-12 15:19:07 +00:00
}
2021-04-16 06:14:19 +00:00
class AccountInformationPolicy {
final int minFirstNameLength;
final int maxFirstNameLength;
final int minLastNameLength;
final int maxLastNameLength;
2021-04-17 06:30:00 +00:00
final int maxLocationLength;
2021-04-16 06:14:19 +00:00
const AccountInformationPolicy({
required this.minFirstNameLength,
required this.maxFirstNameLength,
required this.minLastNameLength,
required this.maxLastNameLength,
required this.maxLocationLength,
2022-03-11 16:09:37 +00:00
});
2021-04-16 06:14:19 +00:00
}
2021-12-30 11:02:18 +00:00
enum BannerNature { Information, Warning, Success }
extension BannerNatureExt on BannerNature {
static BannerNature fromStr(String? s) {
2021-12-30 11:02:18 +00:00
switch (s) {
case "information":
return BannerNature.Information;
case "success":
return BannerNature.Success;
case "warning":
default:
return BannerNature.Warning;
}
}
}
class Banner {
final bool enabled;
final int? expire;
2021-12-30 11:02:18 +00:00
final BannerNature nature;
final Map<String, String> message;
final String? link;
2021-12-30 11:02:18 +00:00
const Banner({
required this.enabled,
required this.expire,
required this.nature,
required this.message,
required this.link,
2022-03-11 16:09:37 +00:00
});
2021-12-30 11:02:18 +00:00
bool get visible => enabled && (expire == null || expire! > time());
2021-12-30 11:02:18 +00:00
}
2022-03-18 16:54:19 +00:00
class ReportCause {
final String id;
final Map<String, String> label;
const ReportCause({required this.id, required this.label});
String get localeLabel =>
label.containsKey(shortLang) ? label[shortLang]! : label["en"]!;
}
class ReportPolicy {
final List<ReportCause> causes;
final int maxCommentLength;
const ReportPolicy({required this.causes, required this.maxCommentLength});
}
class ServerConfig {
2021-02-20 08:24:51 +00:00
final Version minSupportedMobileVersion;
final String termsURL;
final String privacyPolicyURL;
final String contactEmail;
final String playStoreURL;
final String androidDirectDownloadURL;
final Banner? banner;
2021-04-12 17:26:05 +00:00
final NotificationsPolicy notificationsPolicy;
final PasswordPolicy passwordPolicy;
final ServerDataConservationPolicy dataConservationPolicy;
2021-03-12 15:19:07 +00:00
final ConversationsPolicy conversationsPolicy;
2021-04-16 06:14:19 +00:00
final AccountInformationPolicy accountInformationPolicy;
2022-03-18 16:54:19 +00:00
final ReportPolicy? reportPolicy;
const ServerConfig({
required this.minSupportedMobileVersion,
required this.termsURL,
required this.privacyPolicyURL,
required this.contactEmail,
required this.playStoreURL,
required this.androidDirectDownloadURL,
required this.banner,
required this.notificationsPolicy,
required this.passwordPolicy,
required this.dataConservationPolicy,
required this.conversationsPolicy,
required this.accountInformationPolicy,
2022-03-18 16:54:19 +00:00
required this.reportPolicy,
2022-03-11 16:09:37 +00:00
});
2022-03-18 16:54:19 +00:00
bool get isReportingEnabled => this.reportPolicy != null;
}