Simplify UI for importing private key (no separation between hex and bech32, autodetected)

This commit is contained in:
Mike Dilger 2023-01-06 02:40:35 +13:00
parent 70a78551aa
commit 9fd668bb82
3 changed files with 31 additions and 67 deletions

View File

@ -416,31 +416,26 @@ impl Overlord {
password.zeroize();
GLOBALS.signer.read().await.save_through_settings().await?;
}
"import_bech32" => {
let (mut import_bech32, mut password): (String, String) =
"import_priv" => {
let (mut import_priv, mut password): (String, String) =
serde_json::from_str(&bus_message.json_payload)?;
let pk = PrivateKey::try_from_bech32_string(&import_bech32)?;
import_bech32.zeroize();
GLOBALS
.signer
.write()
.await
.set_private_key(pk, &password)?;
password.zeroize();
GLOBALS.signer.read().await.save_through_settings().await?;
}
"import_hex" => {
let (mut import_hex, mut password): (String, String) =
serde_json::from_str(&bus_message.json_payload)?;
let pk = PrivateKey::try_from_hex_string(&import_hex)?;
import_hex.zeroize();
GLOBALS
.signer
.write()
.await
.set_private_key(pk, &password)?;
password.zeroize();
GLOBALS.signer.read().await.save_through_settings().await?;
let maybe_pk1 = PrivateKey::try_from_bech32_string(&import_priv);
let maybe_pk2 = PrivateKey::try_from_hex_string(&import_priv);
import_priv.zeroize();
if maybe_pk1.is_err() && maybe_pk2.is_err() {
password.zeroize();
*GLOBALS.status_message.write().await =
"Private key not recognized.".to_owned();
} else {
let privkey = maybe_pk1.unwrap_or_else(|_| maybe_pk2.unwrap());
GLOBALS
.signer
.write()
.await
.set_private_key(privkey, &password)?;
password.zeroize();
GLOBALS.signer.read().await.save_through_settings().await?;
}
}
"import_pub" => {
let pubstr: String = serde_json::from_str(&bus_message.json_payload)?;

View File

@ -82,8 +82,7 @@ struct GossipUi {
follow_hex_pubkey: String,
follow_pubkey_at_relay: String,
password: String,
import_bech32: String,
import_hex: String,
import_priv: String,
import_pub: String,
replying_to: Option<Id>,
person_view_pubkey: Option<PublicKeyHex>,
@ -153,8 +152,7 @@ impl GossipUi {
follow_hex_pubkey: "".to_owned(),
follow_pubkey_at_relay: "".to_owned(),
password: "".to_owned(),
import_bech32: "".to_owned(),
import_hex: "".to_owned(),
import_priv: "".to_owned(),
import_pub: "".to_owned(),
replying_to: None,
person_view_pubkey: None,

View File

@ -172,13 +172,13 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
ui.separator();
ui.add_space(10.0);
ui.heading("Import a bech32 private key");
ui.heading("Import a Private Key");
ui.horizontal(|ui| {
ui.label("Enter bech32 private key");
ui.label("Enter private key");
ui.add(
TextEdit::singleline(&mut app.import_bech32)
.hint_text("nsec1...")
TextEdit::singleline(&mut app.import_priv)
.hint_text("nsec1 or hex")
.password(true),
);
});
@ -190,40 +190,11 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
let tx = GLOBALS.to_overlord.clone();
let _ = tx.send(BusMessage {
target: "overlord".to_string(),
kind: "import_bech32".to_string(),
json_payload: serde_json::to_string(&(&app.import_bech32, &app.password)).unwrap(),
kind: "import_priv".to_string(),
json_payload: serde_json::to_string(&(&app.import_priv, &app.password)).unwrap(),
});
app.import_bech32.zeroize();
app.import_bech32 = "".to_owned();
app.password.zeroize();
app.password = "".to_owned();
}
ui.add_space(20.0);
ui.heading("Import a hex private key");
ui.horizontal(|ui| {
ui.label("Enter hex-encoded private key");
ui.add(
TextEdit::singleline(&mut app.import_hex)
.hint_text("0123456789abcdef...")
.password(true),
);
});
ui.horizontal(|ui| {
ui.label("Enter a password to keep it encrypted under");
ui.add(TextEdit::singleline(&mut app.password).password(true));
});
if ui.button("import").clicked() {
let tx = GLOBALS.to_overlord.clone();
let _ = tx.send(BusMessage {
target: "overlord".to_string(),
kind: "import_hex".to_string(),
json_payload: serde_json::to_string(&(&app.import_hex, &app.password)).unwrap(),
});
app.import_hex.zeroize();
app.import_hex = "".to_owned();
app.import_priv.zeroize();
app.import_priv = "".to_owned();
app.password.zeroize();
app.password = "".to_owned();
}
@ -232,10 +203,10 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
ui.separator();
ui.add_space(10.0);
ui.heading("Public Key");
ui.heading("Import a Public Key");
ui.add_space(10.0);
ui.label("You can just import your public key if you only want to view events and don't want to use gossip to create events. This will allow you to (eventually) sync your follow list and follow people on gossip without copying your private key here.");
ui.label("This won't let you post or react to posts, but you can view other people's posts (and fetch your following list) with just a public key.");
if let Some(pk) = GLOBALS.signer.blocking_read().public_key() {
let pkhex: PublicKeyHex = pk.into();