TF-320 Add capability validator for Jmap request

This commit is contained in:
Dat PHAM HOANG
2022-03-14 12:15:40 +07:00
committed by Dat H. Pham
parent 0d199b5c9a
commit 0c1d069856
3 changed files with 250 additions and 0 deletions
+20
View File
@@ -0,0 +1,20 @@
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:tmail_ui_user/main/error/request_error.dart';
void requireCapability(Session session, List<CapabilityIdentifier> requiredCapabilities) {
final matchedCapabilities = session.capabilities.keys
.fold<Set<CapabilityIdentifier>>(
Set<CapabilityIdentifier>(),
(previousValue, element) {
if (requiredCapabilities.contains(element)) {
previousValue.add(element);
}
return previousValue;
}
);
final missingCapabilities = requiredCapabilities.toSet().difference(matchedCapabilities);
if (missingCapabilities.length > 0) {
throw SessionMissingCapability(missingCapabilities);
}
}
+11
View File
@@ -0,0 +1,11 @@
import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
class SessionMissingCapability extends Equatable implements Exception {
final Set<CapabilityIdentifier> capabilityIdentifiers;
SessionMissingCapability(this.capabilityIdentifiers);
@override
List<Object?> get props => [capabilityIdentifiers];
}