Skip to content

Commit

Permalink
fix: propagate device kind
Browse files Browse the repository at this point in the history
  • Loading branch information
dufkan committed May 2, 2024
1 parent 857b12c commit 3faf14a
Show file tree
Hide file tree
Showing 11 changed files with 83 additions and 36 deletions.
2 changes: 1 addition & 1 deletion lib/util/qr_coder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@ class QrCoder {
final id = _base64decoder.convert(args.substring(0, i));
final name = args.substring(i + 1);

return Device(name, Uuid(id), DateTime.now());
return Device(name, Uuid(id), DateTime.now(), DeviceKind.user);
}
}
3 changes: 2 additions & 1 deletion meesign_core/example/time_policy.dart
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,8 @@ void main(List<String> args) async {
final challengeRepository =
ChallengeRepository(dispatcher, taskSource, taskDao);

final device = await deviceRepository.register(options['name']);
final device =
await deviceRepository.register(options['name'], DeviceKind.user);
print('Registered as ${device.name}');

await groupRepository.subscribe(device.id);
Expand Down
2 changes: 1 addition & 1 deletion meesign_core/lib/meesign_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ library meesign_data;
export 'meesign_model.dart';

export 'package:meesign_network/meesign_network.dart'
show ClientFactory, MPCClient;
show ClientFactory, MeeSignClient;

export 'src/data/key_store.dart';
export 'src/data/network_dispatcher.dart';
Expand Down
17 changes: 9 additions & 8 deletions meesign_core/lib/src/data/device_repository.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:meesign_core/meesign_core.dart';
import 'package:meesign_native/meesign_native.dart';
import 'package:meesign_network/grpc.dart' as rpc;

Expand All @@ -19,21 +20,19 @@ class DeviceRepository {
Future<Device> register(String name, DeviceKind kind) async {
final key = AuthWrapper.keygen(name);

final resp = await _dispatcher.unauth.register(
rpc.RegistrationRequest()
..name = name
..kind = kind.toNetwork()
..csr = key.csr
);
final resp = await _dispatcher.unauth.register(rpc.RegistrationRequest()
..name = name
..kind = kind.toNetwork()
..csr = key.csr);

final did = Uuid(resp.deviceId);
final pkcs12 = AuthWrapper.certKeyToPkcs12(key.key, resp.certificate);
// TODO: store key in db for consistency?
await _keyStore.store(did, pkcs12);
await _deviceDao.insertDevice(
db.DevicesCompanion.insert(id: did.bytes, name: name),
db.DevicesCompanion.insert(id: did.bytes, name: name, kind: kind),
);
return Device(name, did, DateTime.now());
return Device(name, did, DateTime.now(), kind);
}

Future<Iterable<Device>> _fetchAll() async {
Expand All @@ -46,6 +45,7 @@ class DeviceRepository {
DateTime.fromMillisecondsSinceEpoch(
device.lastActive.toInt() * 1000,
),
DeviceKindConversion.fromNetwork(device.kind),
),
);
}
Expand Down Expand Up @@ -74,6 +74,7 @@ class DeviceRepository {
.map((device) => db.DevicesCompanion.insert(
id: device.id.bytes,
name: device.name,
kind: device.kind,
));
await _deviceDao.upsertDevices(updates);

Expand Down
17 changes: 9 additions & 8 deletions meesign_core/lib/src/data/group_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@ class GroupRepository extends TaskRepository<Group> {
int threshold,
Protocol protocol,
KeyType keyType,
String? note,
) async {
await _dispatcher.unauth.group(
rpc.GroupRequest()
..deviceIds.addAll(members.map((m) => m.id.bytes))
..name = name
..threshold = threshold
..protocol = protocol.toNetwork()
..keyType = keyType.toNetwork(),
);
await _dispatcher.unauth.group(rpc.GroupRequest()
..deviceIds.addAll(members.map((m) => m.id.bytes))
..name = name
..threshold = threshold
..protocol = protocol.toNetwork()
..keyType = keyType.toNetwork()
..note = note ?? '');
}

@override
Expand Down Expand Up @@ -72,6 +72,7 @@ class GroupRepository extends TaskRepository<Group> {
protocol: protocol,
keyType: keyType,
context: Uint8List(0),
note: Value(req.note),
),
);

Expand Down
1 change: 1 addition & 0 deletions meesign_core/lib/src/database/database.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:path/path.dart' as path_pkg;
import 'daos.dart';
import 'tables.dart';
// FIXME: bug in modular generation? necessary for TaskState
import '../model/device_kind.dart';
import '../model/key_type.dart';
import '../model/protocol.dart';
import '../model/task.dart';
Expand Down
55 changes: 47 additions & 8 deletions meesign_core/lib/src/database/database.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions meesign_core/lib/src/database/tables.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import 'package:drift/drift.dart';

import '../model/device_kind.dart';
import '../model/key_type.dart';
import '../model/protocol.dart';
import '../model/task.dart';

class Devices extends Table {
BlobColumn get id => blob()();
TextColumn get name => text()();
TextColumn get kind => textEnum<DeviceKind>()();

@override
Set<Column> get primaryKey => {id};
Expand Down
6 changes: 4 additions & 2 deletions meesign_core/lib/src/model/device.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@ import 'package:meta/meta.dart';

import '../database/database.dart' as db;
import '../util/uuid.dart';
import './device_kind.dart';

@immutable
class Device {
final String name;
final Uuid id;
final DateTime lastActive;
final DeviceKind kind;

const Device(this.name, this.id, this.lastActive);
const Device(this.name, this.id, this.lastActive, this.kind);
}

extension DeviceConversion on db.Device {
Device toModel() => Device(name, Uuid.take(id), DateTime.now());
Device toModel() => Device(name, Uuid.take(id), DateTime.now(), kind);
}
5 changes: 1 addition & 4 deletions meesign_core/lib/src/model/device_kind.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import 'package:meesign_network/grpc.dart' as rpc;

enum DeviceKind {
user,
bot
}
enum DeviceKind { user, bot }

extension DeviceKindConversion on DeviceKind {
rpc.DeviceKind toNetwork() {
Expand Down
9 changes: 6 additions & 3 deletions meesign_core/test/core_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,15 @@ void main() {
required Future<void> Function(TaskRepository, Group) createTask,
}) async {
final ds = await Future.wait(
[for (var i = 0; i < n; ++i) deviceRepository.register('d$i')],
[
for (var i = 0; i < n; ++i)
deviceRepository.register('d$i', DeviceKind.user)
],
);

await Future.wait(ds.map((d) => groupRepository.subscribe(d.id)));
await groupRepository.group(
'$t $n ${keyType.name} ${protocol.name}', ds, t, protocol, keyType);
await groupRepository.group('$t $n ${keyType.name} ${protocol.name}', ds, t,
protocol, keyType, null);
await approveAllFirst(groupRepository, ds);
final gs = await Future.wait(
ds.map((d) => groupRepository.observeGroups(d.id).firstElement()),
Expand Down

0 comments on commit 3faf14a

Please sign in to comment.