Skip to content

Commit

Permalink
Fixed an issue where you could not log into other devices
Browse files Browse the repository at this point in the history
  • Loading branch information
john-sharratt committed Mar 3, 2024
1 parent dafd5b6 commit 2ae6f60
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 16 deletions.
14 changes: 9 additions & 5 deletions crates/model/src/logic/copy_bank.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ use crate::{
ledger_type::LedgerEntry,
password_hash::PasswordHash,
requests::{copy_bank::RequestCopyBank, new_bank::RequestNewBank},
responses::{copy_bank::ResponseCopyBank, create_bank::ResponseCreateBank},
responses::{
copy_bank::{Copied, ResponseCopyBank},
create_bank::ResponseCreateBank,
},
secret::LedgerSecret,
transaction::Transaction,
};
Expand All @@ -35,13 +38,14 @@ impl Ledger {
// Check the password
if bank.password != req.password {
return Ok(ResponseCopyBank::Denied {
err_msg: format!("Invalid bank or password."),
err_msg: format!("Invalid password."),
});
}

// Send the ledger!
Ok(ResponseCopyBank::Copied {
ledger: ledger.clone(),
})
Ok(ResponseCopyBank::Copied(Copied {
bank_secret: ledger.bank_secret.clone(),
entries: ledger.entries.values().cloned().collect(),
}))
}
}
18 changes: 11 additions & 7 deletions crates/model/src/responses/copy_bank.rs
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
use std::fmt::Display;

use crate::{bank_id::BankId, ledger::LedgerForBank};
use crate::{bank_id::BankId, ledger::LedgerMessage, secret::LedgerSecret};
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Copied {
pub bank_secret: LedgerSecret,
pub entries: Vec<LedgerMessage>,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub enum ResponseCopyBank {
Copied { ledger: LedgerForBank },
Copied(Copied),
Denied { err_msg: String },
DoesNotExist { bank_id: BankId },
}

impl Display for ResponseCopyBank {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ResponseCopyBank::Copied { ledger } => write!(
f,
"ResponseCopyBank::Copied (entries={})",
ledger.entries.len()
),
ResponseCopyBank::Copied(Copied { entries, .. }) => {
write!(f, "ResponseCopyBank::Copied (entries={})", entries.len())
}
ResponseCopyBank::Denied { err_msg } => {
write!(f, "ResponseCopyBank::Denied ({})", err_msg)
}
Expand Down
25 changes: 21 additions & 4 deletions crates/web/src/process/login_bank.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
use egui::Ui;
use immutable_bank_model::{
bank_id::BankId, requests::copy_bank::RequestCopyBank, responses::copy_bank::ResponseCopyBank,
bank_id::BankId,
ledger::LedgerForBank,
requests::copy_bank::RequestCopyBank,
responses::copy_bank::{Copied, ResponseCopyBank},
secret::LedgerSecret,
};

use crate::{
Expand Down Expand Up @@ -31,16 +35,29 @@ impl LocalApp {
},
move |res: ResponseCopyBank, app: &mut LocalApp, frame: &mut eframe::Frame| {
match res {
ResponseCopyBank::Copied { ledger } => {
ResponseCopyBank::Copied(Copied {
bank_secret,
entries,
}) => {
app.banks.insert(
bank_id.clone(),
BankWithSecrets {
bank_id: bank_id.clone(),
secret: ledger.bank_secret.clone(),
secret: bank_secret.clone(),
password: password_hash,
},
);
app.ledger.banks.insert(bank_id.clone(), ledger);
app.ledger.banks.insert(
bank_id.clone(),
LedgerForBank {
broker_secret: LedgerSecret::new(),
bank_secret: bank_secret,
entries: entries
.into_iter()
.map(|msg| (msg.broker_signature.clone(), msg))
.collect(),
},
);
app.session.replace(LocalSession::new(bank_id.clone()));
app.mode = Mode::Summary;
app.save_state(frame);
Expand Down

0 comments on commit 2ae6f60

Please sign in to comment.