diff --git a/lib/features/home/domain/converter/capability_properties_converter.dart b/lib/features/home/domain/converter/capability_properties_converter.dart index 48f8f9a98..7c80cdb26 100644 --- a/lib/features/home/domain/converter/capability_properties_converter.dart +++ b/lib/features/home/domain/converter/capability_properties_converter.dart @@ -10,6 +10,7 @@ import 'package:jmap_dart_client/jmap/core/capability/submission_capability.dart import 'package:jmap_dart_client/jmap/core/capability/vacation_capability.dart'; import 'package:jmap_dart_client/jmap/core/capability/web_socket_ticket_capability.dart'; import 'package:jmap_dart_client/jmap/core/capability/websocket_capability.dart'; +import 'package:model/saas/saas_account_capability.dart'; import 'package:model/support/contact_support_capability.dart'; class CapabilityPropertiesConverter { @@ -35,6 +36,8 @@ class CapabilityPropertiesConverter { return properties.toJson(); } else if (properties is ContactSupportCapability) { return properties.toJson(); + } else if (properties is SaaSAccountCapability) { + return properties.toJson(); } else if (properties is DefaultCapability) { return properties.properties; } else if (properties is EmptyCapability) { diff --git a/lib/features/home/domain/extensions/session_extensions.dart b/lib/features/home/domain/extensions/session_extensions.dart index a1a063f6a..9ce56c48a 100644 --- a/lib/features/home/domain/extensions/session_extensions.dart +++ b/lib/features/home/domain/extensions/session_extensions.dart @@ -25,6 +25,7 @@ import 'package:tmail_ui_user/main/error/capability_validator.dart'; extension SessionExtensions on Session { static final CapabilityIdentifier linagoraContactSupportCapability = CapabilityIdentifier(Uri.parse('com:linagora:params:jmap:contact:support')); static final CapabilityIdentifier linagoraDownloadAllCapability = CapabilityIdentifier(Uri.parse('com:linagora:params:downloadAll')); + static final CapabilityIdentifier linagoraSaaSCapability = CapabilityIdentifier(Uri.parse('com:linagora:params:saas')); static final Map)> customMapCapabilitiesConverter = { linagoraContactSupportCapability: ContactSupportCapability.deserialize, @@ -149,4 +150,18 @@ extension SessionExtensions on Session { ); return settingsCapability?.readOnlyProperties?.contains('language') == true; } + + SaaSAccountCapability? getSaaSAccountCapability(AccountId accountId) { + try { + final saaSAccountCapability = getCapabilityProperties( + accountId, + linagoraSaaSCapability, + ); + log('SessionExtensions::getSaaSAccountCapability:saaSAccountCapability = $saaSAccountCapability'); + return saaSAccountCapability; + } catch (e) { + logError('SessionExtensions::getSaaSAccountCapability():[Exception] $e'); + return null; + } + } } \ No newline at end of file diff --git a/model/lib/extensions/session_extension.dart b/model/lib/extensions/session_extension.dart index 95a4de506..e035e777e 100644 --- a/model/lib/extensions/session_extension.dart +++ b/model/lib/extensions/session_extension.dart @@ -22,6 +22,7 @@ import 'package:model/principals/capability_principals.dart'; import 'package:uri/uri.dart'; extension SessionExtension on Session { + static const String saaSCapabilityProperties = 'com:linagora:params:saas'; String getDownloadUrl({String? jmapUrl}) { final Uri downloadUrlValid; diff --git a/model/lib/model.dart b/model/lib/model.dart index e8ec8e360..3a8d4d188 100644 --- a/model/lib/model.dart +++ b/model/lib/model.dart @@ -84,4 +84,6 @@ export 'oidc/token_oidc.dart'; export 'upload/file_info.dart'; export 'upload/upload_response.dart'; // Support -export 'support/contact_support_capability.dart'; \ No newline at end of file +export 'support/contact_support_capability.dart'; +// SaaS +export 'saas/saas_account_capability.dart'; \ No newline at end of file diff --git a/model/lib/saas/saas_account_capability.dart b/model/lib/saas/saas_account_capability.dart new file mode 100644 index 000000000..c388438ee --- /dev/null +++ b/model/lib/saas/saas_account_capability.dart @@ -0,0 +1,24 @@ +import 'package:jmap_dart_client/jmap/core/capability/capability_properties.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'saas_account_capability.g.dart'; + +@JsonSerializable(explicitToJson: true, includeIfNull: false) +class SaaSAccountCapability extends CapabilityProperties { + final bool isPaying; + final bool canUpgrade; + + SaaSAccountCapability({this.isPaying = false, this.canUpgrade = false}); + + factory SaaSAccountCapability.fromJson(Map json) => + _$SaaSAccountCapabilityFromJson(json); + + Map toJson() => _$SaaSAccountCapabilityToJson(this); + + static SaaSAccountCapability deserialize(Map json) { + return SaaSAccountCapability.fromJson(json); + } + + @override + List get props => [isPaying, canUpgrade]; +}