Skip to content

Commit

Permalink
check nip05
Browse files Browse the repository at this point in the history
  • Loading branch information
leo-lox committed Nov 16, 2024
1 parent 5e29eed commit 34375b8
Show file tree
Hide file tree
Showing 7 changed files with 282 additions and 26 deletions.
62 changes: 46 additions & 16 deletions lib/data_layer/db/object_box_ndk/db_object_box.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import 'dart:async';

import 'package:ndk/domain_layer/entities/nip_05.dart';
import 'package:ndk/domain_layer/entities/user_relay_list.dart';
import 'package:ndk/ndk.dart';
import 'package:ndk/shared/nips/nip05/nip05.dart';

import '../../../objectbox.g.dart';
import 'db_init_object_box.dart';
import 'schema/db_contact_list.dart';
import 'schema/db_metadata.dart';
import 'schema/db_nip_01_event.dart';
import 'schema/db_nip_05.dart';

class DbObjectBox implements CacheManager {
final Completer _initCompleter = Completer();
Expand Down Expand Up @@ -219,15 +220,33 @@ class DbObjectBox implements CacheManager {
}

@override
Future<Nip05?> loadNip05(String pubKey) {
// TODO: implement loadNip05
throw UnimplementedError();
Future<Nip05?> loadNip05(String pubKey) async {
await _dbRdy;
final nip05Box = _objectBox.store.box<DbNip05>();
final existingNip05 = nip05Box
.query(DbNip05_.pubKey.equals(pubKey))
.order(DbNip05_.networkFetchTime, flags: Order.descending)
.build()
.findFirst();

if (existingNip05 == null) {
return null;
}

return existingNip05.toNdk();
}

@override
Future<List<Nip05?>> loadNip05s(List<String> pubKeys) {
// TODO: implement loadNip05s
throw UnimplementedError();
Future<List<Nip05?>> loadNip05s(List<String> pubKeys) async {
await _dbRdy;
final nip05Box = _objectBox.store.box<DbNip05>();
final existingNip05s = nip05Box
.query(DbNip05_.pubKey.oneOf(pubKeys))
.order(DbNip05_.networkFetchTime, flags: Order.descending)
.build()
.find();

return existingNip05s.map((dbNip05) => dbNip05.toNdk()).toList();
}

@override
Expand All @@ -243,9 +262,10 @@ class DbObjectBox implements CacheManager {
}

@override
Future<void> removeAllNip05s() {
// TODO: implement removeAllNip05s
throw UnimplementedError();
Future<void> removeAllNip05s() async {
await _dbRdy;
final nip05Box = _objectBox.store.box<DbNip05>();
nip05Box.removeAll();
}

@override
Expand Down Expand Up @@ -297,15 +317,25 @@ class DbObjectBox implements CacheManager {
}

@override
Future<void> saveNip05(Nip05 nip05) {
// TODO: implement saveNip05
throw UnimplementedError();
Future<void> saveNip05(Nip05 nip05) async {
await _dbRdy;
final nip05Box = _objectBox.store.box<DbNip05>();
final existingNip05 = nip05Box
.query(DbNip05_.pubKey.equals(nip05.pubKey))
.order(DbNip05_.networkFetchTime, flags: Order.descending)
.build()
.findFirst();
if (existingNip05 != null) {
nip05Box.remove(existingNip05.dbId);
}
nip05Box.put(DbNip05.fromNdk(nip05));
}

@override
Future<void> saveNip05s(List<Nip05> nip05s) {
// TODO: implement saveNip05s
throw UnimplementedError();
Future<void> saveNip05s(List<Nip05> nip05s) async {
await _dbRdy;
final nip05Box = _objectBox.store.box<DbNip05>();
nip05Box.putMany(nip05s.map((n) => DbNip05.fromNdk(n)).toList());
}

@override
Expand Down
54 changes: 54 additions & 0 deletions lib/data_layer/db/object_box_ndk/schema/db_nip_05.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import 'package:objectbox/objectbox.dart';
import 'package:ndk/entities.dart' as ndk_entities;

@Entity()
class DbNip05 {
@Id()
int dbId = 0;

@Property()
late String pubKey;

@Property()
late String nip05;

@Property()
bool valid = false;

@Property()
int? networkFetchTime;

@Property()
List<String> relays = [];

DbNip05({
required this.pubKey,
required this.nip05,
this.valid = false,
this.networkFetchTime,
this.relays = const [],
});

ndk_entities.Nip05 toNdk() {
final ndkNip05 = ndk_entities.Nip05(
pubKey: pubKey,
nip05: nip05,
valid: valid,
networkFetchTime: networkFetchTime,
relays: relays,
);

return ndkNip05;
}

factory DbNip05.fromNdk(ndk_entities.Nip05 ndkNip05) {
final dbNip05 = DbNip05(
pubKey: ndkNip05.pubKey,
nip05: ndkNip05.nip05,
valid: ndkNip05.valid,
networkFetchTime: ndkNip05.networkFetchTime,
relays: ndkNip05.relays ?? [],
);
return dbNip05;
}
}
24 changes: 21 additions & 3 deletions lib/data_layer/repositories/metadata_repository_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,34 @@ class MetadataRepositoryImpl implements MetadataRepository {
required this.eventVerifier,
});

/// nip05 is automatically verified if present and removed if invalid
@override
Stream<UserMetadata> getMetadataByPubkey(String pubkey) {
final myMetadata = dartNdkSource.dartNdk.metadata.loadMetadata(pubkey);

final Stream<ndk_entities.Metadata?> myMetadataStream =
myMetadata.asStream();

return myMetadataStream.where((event) => event != null).map(
(event) => UserMetadataModel.fromNDKMetadata(event!),
);
return myMetadataStream.where((event) => event != null).asyncMap(
(event) async {
final metadata = UserMetadataModel.fromNDKMetadata(event!);

// Check if there's a NIP-05 identifier
if (metadata.nip05 != null && metadata.nip05!.isNotEmpty) {
// Perform NIP-05 verification
final nip05Result = await dartNdkSource.dartNdk.nip05
.check(nip05: metadata.nip05!, pubkey: pubkey);

// If verification fails, set NIP-05 to null
if (!nip05Result.valid) {
metadata.nip05 = null;
return metadata;
}
}

return metadata;
},
);
}

@override
Expand Down
3 changes: 2 additions & 1 deletion lib/data_layer/repositories/note_repository_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ class NoteRepositoryImpl implements NoteRepository {
final response = dartNdkSource.dartNdk.broadcast
.broadcast(nostrEvent: noteModel.toNDKEvent());

await response.publishDone;
//todo: fix in dart_ndk
//await response.publishDone;
}
}
41 changes: 40 additions & 1 deletion lib/objectbox-model.json
Original file line number Diff line number Diff line change
Expand Up @@ -254,9 +254,48 @@
}
],
"relations": []
},
{
"id": "6:5273186663970464575",
"lastPropertyId": "6:5681969525518525911",
"name": "DbNip05",
"properties": [
{
"id": "1:7088655004465366886",
"name": "dbId",
"type": 6,
"flags": 1
},
{
"id": "2:3168250410311883614",
"name": "pubKey",
"type": 9
},
{
"id": "3:5527505727715720917",
"name": "nip05",
"type": 9
},
{
"id": "4:8071628081619445263",
"name": "valid",
"type": 1
},
{
"id": "5:7737168682838543815",
"name": "networkFetchTime",
"type": 6
},
{
"id": "6:5681969525518525911",
"name": "relays",
"type": 30
}
],
"relations": []
}
],
"lastEntityId": "5:6462764810841603998",
"lastEntityId": "6:5273186663970464575",
"lastIndexId": "1:6758634951668169698",
"lastRelationId": "0:0",
"lastSequenceId": "0:0",
Expand Down
Loading

0 comments on commit 34375b8

Please sign in to comment.