diff --git a/src-tauri/src/commands/account.rs b/src-tauri/src/commands/account.rs index cc6cdcf2..f10bb9ec 100644 --- a/src-tauri/src/commands/account.rs +++ b/src-tauri/src/commands/account.rs @@ -80,38 +80,40 @@ pub async fn create_account( #[tauri::command] #[specta::specta] -pub async fn import_account( - key: String, - password: Option, - state: State<'_, Nostr>, -) -> Result { - let client = &state.client; - let secret_key = SecretKey::from_bech32(key).map_err(|err| err.to_string())?; - let keys = Keys::new(secret_key.clone()); - let npub = keys.public_key().to_bech32().unwrap(); +pub async fn import_account(key: String, password: String) -> Result { + let (npub, enc_bech32) = match key.starts_with("ncryptsec") { + true => { + let enc = EncryptedSecretKey::from_bech32(key).map_err(|err| err.to_string())?; + let enc_bech32 = enc.to_bech32().map_err(|err| err.to_string())?; + let secret_key = enc.to_secret_key(password).map_err(|err| err.to_string())?; + let keys = Keys::new(secret_key); + let npub = keys.public_key().to_bech32().unwrap(); - let enc_bech32 = match password { - Some(pw) => { - let enc = EncryptedSecretKey::new(&secret_key, pw, 16, KeySecurity::Medium) + (npub, enc_bech32) + } + false => { + let secret_key = SecretKey::from_bech32(key).map_err(|err| err.to_string())?; + let keys = Keys::new(secret_key.clone()); + let npub = keys.public_key().to_bech32().unwrap(); + + let enc = EncryptedSecretKey::new(&secret_key, password, 16, KeySecurity::Medium) .map_err(|err| err.to_string())?; - enc.to_bech32().map_err(|err| err.to_string())? + let enc_bech32 = enc.to_bech32().map_err(|err| err.to_string())?; + + (npub, enc_bech32) } - None => secret_key.to_bech32().map_err(|err| err.to_string())?, }; let keyring = Entry::new("Lume Secret Storage", &npub).map_err(|e| e.to_string())?; + let account = Account { password: enc_bech32, nostr_connect: None, }; - let j = serde_json::to_string(&account).map_err(|e| e.to_string())?; - let _ = keyring.set_password(&j); - let signer = NostrSigner::Keys(keys); - - // Update client's signer - client.set_signer(Some(signer)).await; + let pwd = serde_json::to_string(&account).map_err(|e| e.to_string())?; + keyring.set_password(&pwd).map_err(|e| e.to_string())?; Ok(npub) } diff --git a/src/commands.gen.ts b/src/commands.gen.ts index 28294267..c73276e5 100644 --- a/src/commands.gen.ts +++ b/src/commands.gen.ts @@ -56,7 +56,7 @@ async createAccount(name: string, about: string, picture: string, password: stri else return { status: "error", error: e as any }; } }, -async importAccount(key: string, password: string | null) : Promise> { +async importAccount(key: string, password: string) : Promise> { try { return { status: "ok", data: await TAURI_INVOKE("import_account", { key, password }) }; } catch (e) { diff --git a/src/routes/auth/import.lazy.tsx b/src/routes/auth/import.lazy.tsx index 6a6e1b88..9788beda 100644 --- a/src/routes/auth/import.lazy.tsx +++ b/src/routes/auth/import.lazy.tsx @@ -95,13 +95,15 @@ function Screen() { - {key.length && !key.startsWith("ncryptsec") ? ( + {key.length ? (