From e69a7f83ae4fccd6b9d124d5daa083761ead6417 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 27 Nov 2024 09:17:45 -0800 Subject: [PATCH] refactor: make LoginAction a bit safer We make LoginAction a simple wrapper around processing the unknown action to expose too much internal logic. This allows us to have a must_use on our LoginAction type, otherwise the SingleUnkIdAction's must_use will be lost when returned in the login action. Fixes: a5cdddbb2b7b ("user can upgrade their npub -> nsec") Signed-off-by: William Casarin --- src/accounts/mod.rs | 16 ++++++++++++++-- src/app.rs | 1 - src/test_data.rs | 8 +++----- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/accounts/mod.rs b/src/accounts/mod.rs index 584b359..1c25c10 100644 --- a/src/accounts/mod.rs +++ b/src/accounts/mod.rs @@ -1,7 +1,7 @@ use std::cmp::Ordering; use enostr::{FilledKeypair, FullKeypair, Keypair}; -use nostrdb::Ndb; +use nostrdb::{Ndb, Transaction}; use crate::{ column::Columns, @@ -14,6 +14,7 @@ use crate::{ accounts::{AccountsView, AccountsViewResponse}, }, unknowns::SingleUnkIdAction, + unknowns::UnknownIds, user_account::UserAccount, }; use tracing::{error, info}; @@ -245,11 +246,22 @@ pub fn process_login_view_response( login_action.unk } +#[must_use = "You must call process_login_action on this to handle unknown ids"] pub struct LoginAction { - pub unk: SingleUnkIdAction, + unk: SingleUnkIdAction, pub switch_to_index: usize, } +impl LoginAction { + // Simple wrapper around processing the unknown action to expose too + // much internal logic. This allows us to have a must_use on our + // LoginAction type, otherwise the SingleUnkIdAction's must_use will + // be lost when returned in the login action + pub fn process_action(&mut self, ids: &mut UnknownIds, ndb: &Ndb, txn: &Transaction) { + self.unk.process_action(ids, ndb, txn); + } +} + #[derive(Default)] struct ContainsAccount { pub has_nsec: bool, diff --git a/src/app.rs b/src/app.rs index 85c364b..4e7ee14 100644 --- a/src/app.rs +++ b/src/app.rs @@ -429,7 +429,6 @@ impl Damus { info!("adding account: {}", key.pubkey); accounts .add_account(key) - .unk .process_action(&mut unknown_ids, &ndb, &txn); } } diff --git a/src/test_data.rs b/src/test_data.rs index 7b4a8b1..8e95cf9 100644 --- a/src/test_data.rs +++ b/src/test_data.rs @@ -102,11 +102,9 @@ pub fn test_app() -> Damus { let accounts = get_test_accounts(); let txn = Transaction::new(&app.ndb).expect("txn"); for account in accounts { - app.accounts_mut().add_account(account).unk.process_action( - &mut app.unknown_ids, - &app.ndb, - &txn, - ) + app.accounts_mut() + .add_account(account) + .process_action(&mut app.unknown_ids, &app.ndb, &txn) } app