feat: save user key to keyring
This commit is contained in:
@@ -27,3 +27,9 @@ chrono = "0.4.38"
|
|||||||
tracing = "0.1.40"
|
tracing = "0.1.40"
|
||||||
anyhow = "1.0.44"
|
anyhow = "1.0.44"
|
||||||
smallvec = "1.13.2"
|
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
|
nostr-sdk.workspace = true
|
||||||
dirs.workspace = true
|
dirs.workspace = true
|
||||||
tokio.workspace = true
|
tokio.workspace = true
|
||||||
|
keyring-search.workspace = true
|
||||||
|
keyring.workspace = true
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use gpui::Global;
|
use gpui::Global;
|
||||||
|
use keyring::Entry;
|
||||||
use nostr_sdk::prelude::*;
|
use nostr_sdk::prelude::*;
|
||||||
use state::get_client;
|
use state::get_client;
|
||||||
|
|
||||||
@@ -17,4 +18,15 @@ impl NostrClient {
|
|||||||
|
|
||||||
Self { client }
|
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
|
components.workspace = true
|
||||||
tokio.workspace = true
|
tokio.workspace = true
|
||||||
nostr-sdk.workspace = true
|
nostr-sdk.workspace = true
|
||||||
|
keyring-search.workspace = true
|
||||||
|
keyring.workspace = true
|
||||||
|
|
||||||
client = { version = "0.1.0", path = "../client" }
|
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> {
|
pub fn get_all_accounts_from_keyring() -> HashSet<PublicKey> {
|
||||||
let search = Search::new().expect("Keyring not working.");
|
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 list = List::list_credentials(&results, Limit::All);
|
||||||
let accounts: HashSet<PublicKey> = list
|
let accounts: HashSet<PublicKey> = list
|
||||||
.split_whitespace()
|
.split_whitespace()
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
use ::client::NostrClient;
|
||||||
use components::{
|
use components::{
|
||||||
input::{InputEvent, TextInput},
|
input::{InputEvent, TextInput},
|
||||||
label::Label,
|
label::Label,
|
||||||
@@ -23,9 +24,13 @@ impl SetupView {
|
|||||||
if let InputEvent::PressEnter = input_event {
|
if let InputEvent::PressEnter = input_event {
|
||||||
let content = text_input.read(cx).text().to_string();
|
let content = text_input.read(cx).text().to_string();
|
||||||
|
|
||||||
if let Ok(public_key) = PublicKey::parse(content) {
|
if let Ok(keys) = Keys::parse(content) {
|
||||||
cx.global_mut::<AppState>().accounts.insert(public_key);
|
let public_key = keys.public_key();
|
||||||
cx.notify();
|
|
||||||
|
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