Skip to content

Commit

Permalink
policy: add getGroup function for Task
Browse files Browse the repository at this point in the history
  • Loading branch information
dufkan committed May 1, 2024
1 parent 4e9b0d6 commit 857b12c
Showing 1 changed file with 35 additions and 10 deletions.
45 changes: 35 additions & 10 deletions meesign_core/bin/policy.dart
Original file line number Diff line number Diff line change
@@ -1,18 +1,43 @@
import 'dart:async';
import 'dart:io';
import 'dart:io' hide File;
import 'dart:io' as io;
import 'dart:convert';

import 'package:args/args.dart';
import 'package:meesign_core/meesign_core.dart' hide File;
import 'package:meesign_core/meesign_model.dart' hide File;
import 'package:meesign_core/meesign_core.dart';

Group getGroup<T>(Task<T> task) {
if (task.info is Challenge) {
return (task.info as Challenge).group;
} else if (task.info is Decrypt) {
return (task.info as Decrypt).group;
} else if (task.info is File) {
return (task.info as File).group;
} else if (task.info is Group) {
return task.info as Group;
} else {
throw ArgumentError('Unknown task type');
}
}

extension TaskDecision<T> on TaskRepository<T> {
StreamSubscription<Task<T>> approveAll(Uuid did) {
return observeTasks(did)
.expand((tasks) => tasks)
.where((task) => !task.approved)
.listen((task) async {
await approveTask(did, task.id, agree: true);
});
}

extension Approval<T> on TaskRepository<T> {
StreamSubscription<Task<T>> approveAll(Uuid did,
StreamSubscription<Task<T>> decide(Uuid did,
{required bool Function(Task<T>) agree}) {
return observeTasks(did)
.expand((tasks) => tasks)
.where((task) => !task.approved)
.listen((task) async {
var g = getGroup(task);
print("Deciding: ${g.name}, ${g.note}");
await approveTask(did, task.id, agree: agree(task));
});
}
Expand Down Expand Up @@ -79,7 +104,7 @@ void main(List<String> args) async {
var policyData = <String, dynamic>{};
if (options['policy'] != null) {
try {
policyData = jsonDecode(File(options['policy']).readAsStringSync());
policyData = jsonDecode(io.File(options['policy']).readAsStringSync());
} on Exception catch (e) {
stderr.writeln('Failed to read policy file: $e');
return;
Expand Down Expand Up @@ -126,10 +151,10 @@ void main(List<String> args) async {
await challengeRepository.subscribe(device.id);
await decryptRepository.subscribe(device.id);

groupRepository.approveAll(device.id, agree: (_) => true);
fileRepository.approveAll(device.id, agree: policy);
challengeRepository.approveAll(device.id, agree: policy);
decryptRepository.approveAll(device.id, agree: policy);
groupRepository.approveAll(device.id);
fileRepository.decide(device.id, agree: policy);
challengeRepository.decide(device.id, agree: policy);
decryptRepository.decide(device.id, agree: policy);

ProcessSignal.sigint.watch().listen((signal) {
database.close();
Expand Down

0 comments on commit 857b12c

Please sign in to comment.