mirror of
https://github.com/haorendashu/nowser.git
synced 2025-12-17 09:54:19 +01:00
remote signer bugfix and make it support multi relays
This commit is contained in:
@@ -81,7 +81,7 @@ class RemoteSigningProvider extends ChangeNotifier with PermissionCheckMixin {
|
|||||||
var relay = RelayIsolate(relayAddr, RelayStatus(remoteSignerPubkey));
|
var relay = RelayIsolate(relayAddr, RelayStatus(remoteSignerPubkey));
|
||||||
|
|
||||||
var filter = Filter(
|
var filter = Filter(
|
||||||
p: [remoteSigningInfo.remotePubkey!],
|
p: [remoteSignerPubkey],
|
||||||
since: DateTime.now().millisecondsSinceEpoch ~/ 1000);
|
since: DateTime.now().millisecondsSinceEpoch ~/ 1000);
|
||||||
relay.pendingAuthedMessages
|
relay.pendingAuthedMessages
|
||||||
.add(["REQ", StringUtil.rndNameStr(10), filter.toJson()]);
|
.add(["REQ", StringUtil.rndNameStr(10), filter.toJson()]);
|
||||||
@@ -97,7 +97,7 @@ class RemoteSigningProvider extends ChangeNotifier with PermissionCheckMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> onRequest(
|
Future<void> onRequest(
|
||||||
Relay relay,
|
List<Relay> relays,
|
||||||
NostrRemoteRequest request,
|
NostrRemoteRequest request,
|
||||||
RemoteSigningInfo remoteSigningInfo,
|
RemoteSigningInfo remoteSigningInfo,
|
||||||
String localPubkey,
|
String localPubkey,
|
||||||
@@ -114,7 +114,7 @@ class RemoteSigningProvider extends ChangeNotifier with PermissionCheckMixin {
|
|||||||
response = NostrRemoteResponse(request.id, "pong");
|
response = NostrRemoteResponse(request.id, "pong");
|
||||||
|
|
||||||
sendResponse(
|
sendResponse(
|
||||||
relay, response, signerSigner, localPubkey, remoteSignerPubkey);
|
relays, response, signerSigner, localPubkey, remoteSignerPubkey);
|
||||||
} else if (request.method == "connect") {
|
} else if (request.method == "connect") {
|
||||||
if (app != null) {
|
if (app != null) {
|
||||||
response = NostrRemoteResponse(request.id, "ack");
|
response = NostrRemoteResponse(request.id, "ack");
|
||||||
@@ -160,7 +160,7 @@ class RemoteSigningProvider extends ChangeNotifier with PermissionCheckMixin {
|
|||||||
|
|
||||||
if (response != null) {
|
if (response != null) {
|
||||||
sendResponse(
|
sendResponse(
|
||||||
relay, response, signerSigner, localPubkey, remoteSignerPubkey);
|
relays, response, signerSigner, localPubkey, remoteSignerPubkey);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (remoteSigningInfo.localPubkey != localPubkey) {
|
if (remoteSigningInfo.localPubkey != localPubkey) {
|
||||||
@@ -168,7 +168,7 @@ class RemoteSigningProvider extends ChangeNotifier with PermissionCheckMixin {
|
|||||||
response = NostrRemoteResponse(request.id, "",
|
response = NostrRemoteResponse(request.id, "",
|
||||||
error: "Local pubkey not allow.");
|
error: "Local pubkey not allow.");
|
||||||
sendResponse(
|
sendResponse(
|
||||||
relay, response, signerSigner, localPubkey, remoteSignerPubkey);
|
relays, response, signerSigner, localPubkey, remoteSignerPubkey);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (app == null) {
|
if (app == null) {
|
||||||
@@ -176,7 +176,7 @@ class RemoteSigningProvider extends ChangeNotifier with PermissionCheckMixin {
|
|||||||
response = NostrRemoteResponse(request.id, "",
|
response = NostrRemoteResponse(request.id, "",
|
||||||
error: "Remote signing should connect first.");
|
error: "Remote signing should connect first.");
|
||||||
sendResponse(
|
sendResponse(
|
||||||
relay, response, signerSigner, localPubkey, remoteSignerPubkey);
|
relays, response, signerSigner, localPubkey, remoteSignerPubkey);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,7 +213,7 @@ class RemoteSigningProvider extends ChangeNotifier with PermissionCheckMixin {
|
|||||||
eventKind: eventKind, authDetail: authDetail, (app) {
|
eventKind: eventKind, authDetail: authDetail, (app) {
|
||||||
response = NostrRemoteResponse(request.id, "", error: "forbid");
|
response = NostrRemoteResponse(request.id, "", error: "forbid");
|
||||||
sendResponse(
|
sendResponse(
|
||||||
relay, response, signerSigner, localPubkey, remoteSignerPubkey);
|
relays, response, signerSigner, localPubkey, remoteSignerPubkey);
|
||||||
}, (app, signer) async {
|
}, (app, signer) async {
|
||||||
if (request.method == "sign_event") {
|
if (request.method == "sign_event") {
|
||||||
var tags = eventObj["tags"];
|
var tags = eventObj["tags"];
|
||||||
@@ -249,12 +249,12 @@ class RemoteSigningProvider extends ChangeNotifier with PermissionCheckMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sendResponse(
|
sendResponse(
|
||||||
relay, response, signerSigner, localPubkey, remoteSignerPubkey);
|
relays, response, signerSigner, localPubkey, remoteSignerPubkey);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> sendResponse(Relay relay, NostrRemoteResponse? response,
|
Future<void> sendResponse(List<Relay> relays, NostrRemoteResponse? response,
|
||||||
NostrSigner signer, String localPubkey, String remoteSignerPubkey) async {
|
NostrSigner signer, String localPubkey, String remoteSignerPubkey) async {
|
||||||
if (response != null) {
|
if (response != null) {
|
||||||
var result = await response.encrypt(signer, localPubkey);
|
var result = await response.encrypt(signer, localPubkey);
|
||||||
@@ -271,11 +271,15 @@ class RemoteSigningProvider extends ChangeNotifier with PermissionCheckMixin {
|
|||||||
// print("response:");
|
// print("response:");
|
||||||
if (event != null) {
|
if (event != null) {
|
||||||
// print(event.toJson());
|
// print(event.toJson());
|
||||||
relay.send(["EVENT", event.toJson()]);
|
for (var relay in relays) {
|
||||||
|
relay.send(["EVENT", event.toJson()]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map<String, int> handledIds = {};
|
||||||
|
|
||||||
Future<void> _onEvent(Relay relay, List<dynamic> json) async {
|
Future<void> _onEvent(Relay relay, List<dynamic> json) async {
|
||||||
// print("request");
|
// print("request");
|
||||||
// print(json);
|
// print(json);
|
||||||
@@ -303,11 +307,19 @@ class RemoteSigningProvider extends ChangeNotifier with PermissionCheckMixin {
|
|||||||
event.sources.add(relay.url);
|
event.sources.add(relay.url);
|
||||||
|
|
||||||
if (event.kind == EventKind.NOSTR_REMOTE_SIGNING) {
|
if (event.kind == EventKind.NOSTR_REMOTE_SIGNING) {
|
||||||
var request = await NostrRemoteRequest.decrypt(
|
if (handledIds[event.id] == null) {
|
||||||
event.content, signer, event.pubkey);
|
var request = await NostrRemoteRequest.decrypt(
|
||||||
if (request != null) {
|
event.content, signer, event.pubkey);
|
||||||
onRequest(relay, request, remoteSigningInfo, event.pubkey,
|
var relays = relayMap[remoteSignerPubkey];
|
||||||
appMap[remoteSignerPubkey]);
|
if (relays == null || relays.isEmpty) {
|
||||||
|
relays = [relay];
|
||||||
|
}
|
||||||
|
if (request != null) {
|
||||||
|
onRequest(relays, request, remoteSigningInfo, event.pubkey,
|
||||||
|
appMap[remoteSignerPubkey]);
|
||||||
|
}
|
||||||
|
|
||||||
|
handledIds[event.id] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
@@ -309,6 +309,8 @@ class _AddRemoteAppRouter extends State<AddRemoteAppRouter> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String remoteSignerKey = generatePrivateKey();
|
||||||
|
|
||||||
void confirmNostrConnect() {
|
void confirmNostrConnect() {
|
||||||
var remoteSigningInfo =
|
var remoteSigningInfo =
|
||||||
RemoteSigningInfo.parseNostrConnectUrl(nostrconnectConn.text);
|
RemoteSigningInfo.parseNostrConnectUrl(nostrconnectConn.text);
|
||||||
@@ -317,21 +319,19 @@ class _AddRemoteAppRouter extends State<AddRemoteAppRouter> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
remoteSigningInfo.remoteSignerKey = generatePrivateKey();
|
remoteSigningInfo.remoteSignerKey = remoteSignerKey;
|
||||||
remoteSigningInfo.createdAt = DateTime.now().millisecondsSinceEpoch ~/ 1000;
|
remoteSigningInfo.createdAt = DateTime.now().millisecondsSinceEpoch ~/ 1000;
|
||||||
remoteSigningInfo.updatedAt = remoteSigningInfo.createdAt;
|
remoteSigningInfo.updatedAt = remoteSigningInfo.createdAt;
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
TextEditingController remoteSignerKeyController = TextEditingController();
|
|
||||||
|
|
||||||
TextEditingController relayAddrController = TextEditingController();
|
TextEditingController relayAddrController = TextEditingController();
|
||||||
|
|
||||||
TextEditingController secretController = TextEditingController();
|
TextEditingController secretController = TextEditingController();
|
||||||
|
|
||||||
void refreshBunkerUrl() {
|
void refreshBunkerUrl() {
|
||||||
remoteSignerKeyController.text = generatePrivateKey();
|
remoteSignerKey = generatePrivateKey();
|
||||||
secretController.text = StringUtil.rndNameStr(20);
|
secretController.text = StringUtil.rndNameStr(20);
|
||||||
relayAddrController.text = "wss://relay.nsec.app";
|
relayAddrController.text = "wss://relay.nsec.app";
|
||||||
|
|
||||||
@@ -354,7 +354,6 @@ class _AddRemoteAppRouter extends State<AddRemoteAppRouter> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var remoteSignerKey = remoteSignerKeyController.text;
|
|
||||||
var relays = [relayAddrController.text];
|
var relays = [relayAddrController.text];
|
||||||
|
|
||||||
var remoteSigningInfo = RemoteSigningInfo(
|
var remoteSigningInfo = RemoteSigningInfo(
|
||||||
@@ -371,12 +370,8 @@ class _AddRemoteAppRouter extends State<AddRemoteAppRouter> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void reloadBunker() {
|
void reloadBunker() {
|
||||||
if (StringUtil.isBlank(pubkey)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var nostrRemoteSignerInfo = NostrRemoteSignerInfo(
|
var nostrRemoteSignerInfo = NostrRemoteSignerInfo(
|
||||||
remoteUserPubkey: pubkey!,
|
remoteSignerPubkey: getPublicKey(remoteSignerKey),
|
||||||
relays: [relayAddrController.text],
|
relays: [relayAddrController.text],
|
||||||
optionalSecret: secretController.text,
|
optionalSecret: secretController.text,
|
||||||
);
|
);
|
||||||
|
|||||||
Submodule packages/nostr_sdk updated: 537e516f2a...f6b25c40a9
Reference in New Issue
Block a user