feat: save user key to keyring
This commit is contained in:
@@ -27,3 +27,9 @@ chrono = "0.4.38"
|
||||
tracing = "0.1.40"
|
||||
anyhow = "1.0.44"
|
||||
smallvec = "1.13.2"
|
||||
keyring-search = "1.2.0"
|
||||
keyring = { version = "3", features = [
|
||||
"apple-native",
|
||||
"windows-native",
|
||||
"sync-secret-service",
|
||||
] }
|
||||
|
||||
@@ -8,3 +8,5 @@ gpui.workspace = true
|
||||
nostr-sdk.workspace = true
|
||||
dirs.workspace = true
|
||||
tokio.workspace = true
|
||||
keyring-search.workspace = true
|
||||
keyring.workspace = true
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use gpui::Global;
|
||||
use keyring::Entry;
|
||||
use nostr_sdk::prelude::*;
|
||||
use state::get_client;
|
||||
|
||||
@@ -17,4 +18,15 @@ impl NostrClient {
|
||||
|
||||
Self { client }
|
||||
}
|
||||
|
||||
pub fn add_account(&self, keys: Keys) -> Result<()> {
|
||||
let public_key = keys.public_key().to_bech32()?;
|
||||
let secret = keys.secret_key().to_secret_hex();
|
||||
let entry = Entry::new("Coop Safe Storage", &public_key)?;
|
||||
|
||||
// Add secret to keyring
|
||||
entry.set_password(&secret)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,7 @@ gpui.workspace = true
|
||||
components.workspace = true
|
||||
tokio.workspace = true
|
||||
nostr-sdk.workspace = true
|
||||
keyring-search.workspace = true
|
||||
keyring.workspace = true
|
||||
|
||||
client = { version = "0.1.0", path = "../client" }
|
||||
|
||||
keyring-search = "1.2.0"
|
||||
keyring-lib = { version = "1.0.2", features = ["tokio", "derive"] }
|
||||
|
||||
@@ -4,7 +4,7 @@ use std::collections::HashSet;
|
||||
|
||||
pub fn get_all_accounts_from_keyring() -> HashSet<PublicKey> {
|
||||
let search = Search::new().expect("Keyring not working.");
|
||||
let results = search.by_service("coop");
|
||||
let results = search.by_service("Coop Safe Storage");
|
||||
let list = List::list_credentials(&results, Limit::All);
|
||||
let accounts: HashSet<PublicKey> = list
|
||||
.split_whitespace()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
use ::client::NostrClient;
|
||||
use components::{
|
||||
input::{InputEvent, TextInput},
|
||||
label::Label,
|
||||
@@ -23,9 +24,13 @@ impl SetupView {
|
||||
if let InputEvent::PressEnter = input_event {
|
||||
let content = text_input.read(cx).text().to_string();
|
||||
|
||||
if let Ok(public_key) = PublicKey::parse(content) {
|
||||
cx.global_mut::<AppState>().accounts.insert(public_key);
|
||||
cx.notify();
|
||||
if let Ok(keys) = Keys::parse(content) {
|
||||
let public_key = keys.public_key();
|
||||
|
||||
if cx.global::<NostrClient>().add_account(keys).is_ok() {
|
||||
cx.global_mut::<AppState>().accounts.insert(public_key);
|
||||
cx.notify();
|
||||
}
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user