[PATCH notedeck] migrate AccountManagementView to enostr Keypair

4 views
Skip to first unread message

kernelkind

unread,
May 14, 2024, 4:23:57 PMMay 14
to pat...@damus.io, kernelkind
Signed-off-by: kernelkind <kerne...@gmail.com>
---
enostr/src/keypair.rs | 18 ++++++++++++++++++
src/account_manager.rs | 14 +++++++-------
src/key_storage.rs | 18 ++++++++++--------
src/relay_generation.rs | 13 ++++++++-----
src/ui/account_management.rs | 7 +++++--
src/user_account.rs | 4 ++--
6 files changed, 50 insertions(+), 24 deletions(-)

diff --git a/enostr/src/keypair.rs b/enostr/src/keypair.rs
index 1f762bb93313..6d0c4a247f33 100644
--- a/enostr/src/keypair.rs
+++ b/enostr/src/keypair.rs
@@ -46,6 +46,24 @@ impl FullKeypair {
pub fn new(pubkey: Pubkey, secret_key: SecretKey) -> Self {
FullKeypair { pubkey, secret_key }
}
+
+ pub fn generate() -> Self {
+ let mut rng = nostr::secp256k1::rand::rngs::OsRng;
+ let (secret_key, _) = &nostr::SECP256K1.generate_keypair(&mut rng);
+ let (xopk, _) = secret_key.x_only_public_key(&nostr::SECP256K1);
+ let secret_key = nostr::SecretKey::from(*secret_key);
+ FullKeypair {
+ pubkey: Pubkey::new(&xopk.serialize()),
+ secret_key: SecretKey::from(secret_key),
+ }
+ }
+
+ pub fn to_keypair(self) -> Keypair {
+ Keypair {
+ pubkey: self.pubkey,
+ secret_key: Some(self.secret_key),
+ }
+ }
}

impl std::fmt::Display for Keypair {
diff --git a/src/account_manager.rs b/src/account_manager.rs
index bdc2c993a09f..c8bbc9f6058c 100644
--- a/src/account_manager.rs
+++ b/src/account_manager.rs
@@ -1,4 +1,4 @@
-use nostr_sdk::Keys;
+use enostr::FullKeypair;
use nostrdb::{Ndb, Transaction};

pub use crate::user_account::UserAccount;
@@ -35,7 +35,7 @@ impl<'a> SimpleProfilePreviewController<'a> {
if let Ok(txn) = Transaction::new(self.ndb) {
let profile = self
.ndb
- .get_profile_by_pubkey(&txn, &account.key.public_key().to_bytes());
+ .get_profile_by_pubkey(&txn, account.key.pubkey.bytes());

if let Ok(profile) = profile {
let preview = SimpleProfilePreview::new(&profile, self.img_cache);
@@ -67,7 +67,7 @@ impl<'a> SimpleProfilePreviewController<'a> {
if let Ok(txn) = Transaction::new(self.ndb) {
let profile = self
.ndb
- .get_profile_by_pubkey(&txn, &account.key.public_key().to_bytes());
+ .get_profile_by_pubkey(&txn, account.key.pubkey.bytes());

if let Ok(profile) = profile {
let preview = SimpleProfilePreview::new(&profile, self.img_cache);
@@ -115,16 +115,16 @@ impl<'a> AccountManager<'a> {

pub fn remove_account(&mut self, index: usize) {
if let Some(account) = self.accounts.get(index) {
- self.key_store.remove_key(&account.key);
+ let _ = self.key_store.remove_key(&account.key);
}
if index < self.accounts.len() {
self.accounts.remove(index);
}
}

- pub fn add_account(&'a mut self, key: Keys, ctx: &egui::Context) {
- self.key_store.add_key(&key);
- let relays = self.relay_generator.generate_relays_for(&key, ctx);
+ pub fn add_account(&'a mut self, key: FullKeypair, ctx: &egui::Context) {
+ let _ = self.key_store.add_key(&key);
+ let relays = self.relay_generator.generate_relays_for(&key.pubkey, ctx);
let account = UserAccount { key, relays };

self.accounts.push(account)
diff --git a/src/key_storage.rs b/src/key_storage.rs
index 8bf0f407398b..7b6fb8234340 100644
--- a/src/key_storage.rs
+++ b/src/key_storage.rs
@@ -1,4 +1,4 @@
-use nostr_sdk::Keys;
+use enostr::FullKeypair;

pub enum KeyStorage {
None,
@@ -9,19 +9,21 @@ pub enum KeyStorage {
}

impl KeyStorage {
- pub fn get_keys(&self) -> Result<Vec<Keys>, KeyStorageError> {
+ pub fn get_keys(&self) -> Result<Vec<FullKeypair>, KeyStorageError> {
match self {
Self::None => Ok(Vec::new()),
}
}

- pub fn add_key(&self, key: &Keys) -> Result<(), KeyStorageError> {
+ pub fn add_key(&self, key: &FullKeypair) -> Result<(), KeyStorageError> {
+ let _ = key;
match self {
Self::None => Ok(()),
}
}

- pub fn remove_key(&self, key: &Keys) -> Result<(), KeyStorageError> {
+ pub fn remove_key(&self, key: &FullKeypair) -> Result<(), KeyStorageError> {
+ let _ = key;
match self {
Self::None => Ok(()),
}
@@ -31,16 +33,16 @@ impl KeyStorage {
#[derive(Debug, PartialEq)]
pub enum KeyStorageError<'a> {
Retrieval,
- Addition(&'a Keys),
- Removal(&'a Keys),
+ Addition(&'a FullKeypair),
+ Removal(&'a FullKeypair),
}

impl std::fmt::Display for KeyStorageError<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
Self::Retrieval => write!(f, "Failed to retrieve keys."),
- Self::Addition(key) => write!(f, "Failed to add key: {:?}", key.public_key()),
- Self::Removal(key) => write!(f, "Failed to remove key: {:?}", key.public_key()),
+ Self::Addition(key) => write!(f, "Failed to add key: {:?}", key.pubkey),
+ Self::Removal(key) => write!(f, "Failed to remove key: {:?}", key.pubkey),
}
}
}
diff --git a/src/relay_generation.rs b/src/relay_generation.rs
index eedc94734db4..20df1be81010 100644
--- a/src/relay_generation.rs
+++ b/src/relay_generation.rs
@@ -1,6 +1,5 @@
use crate::relay_pool_manager::create_wakeup;
-use enostr::RelayPool;
-use nostr_sdk::Keys;
+use enostr::{Pubkey, RelayPool};
use tracing::error;

pub enum RelayGenerator {
@@ -10,7 +9,7 @@ pub enum RelayGenerator {
}

impl RelayGenerator {
- pub fn generate_relays_for(&self, key: &Keys, ctx: &egui::Context) -> RelayPool {
+ pub fn generate_relays_for(&self, key: &Pubkey, ctx: &egui::Context) -> RelayPool {
match self {
Self::GossipModel => generate_relays_gossip(key, ctx),
Self::Nip65 => generate_relays_nip65(key, ctx),
@@ -19,11 +18,15 @@ impl RelayGenerator {
}
}

-fn generate_relays_gossip(key: &Keys, ctx: &egui::Context) -> RelayPool {
+fn generate_relays_gossip(key: &Pubkey, ctx: &egui::Context) -> RelayPool {
+ let _ = ctx;
+ let _ = key;
todo!()
}

-fn generate_relays_nip65(key: &Keys, ctx: &egui::Context) -> RelayPool {
+fn generate_relays_nip65(key: &Pubkey, ctx: &egui::Context) -> RelayPool {
+ let _ = ctx;
+ let _ = key;
todo!()
}

diff --git a/src/ui/account_management.rs b/src/ui/account_management.rs
index fc1a66995bb2..998e8899d35c 100644
--- a/src/ui/account_management.rs
+++ b/src/ui/account_management.rs
@@ -292,7 +292,7 @@ impl<'a> AccountSelectionWidget<'a> {
// PREVIEWS

mod preview {
- use nostr_sdk::{Keys, PublicKey};
+ use enostr::{FullKeypair, Pubkey};
use nostrdb::{Config, Ndb};

use super::*;
@@ -325,7 +325,10 @@ mod preview {
ACCOUNT_HEXES
.iter()
.map(|account_hex| {
- let key = Keys::from_public_key(PublicKey::from_hex(account_hex).unwrap());
+ let key = FullKeypair::new(
+ Pubkey::from_hex(account_hex).unwrap(),
+ FullKeypair::generate().secret_key,
+ );

UserAccount {
key,
diff --git a/src/user_account.rs b/src/user_account.rs
index 1f17e7f64151..254be32e50e2 100644
--- a/src/user_account.rs
+++ b/src/user_account.rs
@@ -1,6 +1,6 @@
-use enostr::RelayPool;
+use enostr::{FullKeypair, RelayPool};

pub struct UserAccount {
- pub key: nostr_sdk::Keys,
+ pub key: FullKeypair,
pub relays: RelayPool,
}
--
2.39.3 (Apple Git-146)

William Casarin

unread,
May 14, 2024, 5:39:23 PMMay 14
to kernelkind, pat...@damus.io
On Tue, May 14, 2024 at 04:23:45PM GMT, kernelkind wrote:
>Signed-off-by: kernelkind <kerne...@gmail.com>
>---

thanks!

pushed
Reply all
Reply to author
Forward
0 new messages