diff --git a/account/src/auth/sign_arb.rs b/account/src/auth/sign_arb.rs index 0fb998c..7000536 100644 --- a/account/src/auth/sign_arb.rs +++ b/account/src/auth/sign_arb.rs @@ -30,8 +30,8 @@ fn wrap_message(msg_bytes: &[u8], signer: Addr) -> Vec { #[cfg(test)] mod tests { use crate::auth::sign_arb::wrap_message; + use crate::auth::util; use crate::auth::Authenticator::Secp256K1; - use crate::auth::{util, Authenticator}; use crate::contract::instantiate; use crate::msg::InstantiateMsg; use base64::{engine::general_purpose, Engine as _}; @@ -122,6 +122,6 @@ mod tests { signature: Binary::from(signature_bytes), }; - let res = instantiate(deps.as_mut(), env.clone(), info, instantiate_msg).unwrap(); + instantiate(deps.as_mut(), env.clone(), info, instantiate_msg).unwrap(); } } diff --git a/account/src/error.rs b/account/src/error.rs index 0832421..39a02ca 100644 --- a/account/src/error.rs +++ b/account/src/error.rs @@ -56,6 +56,9 @@ pub enum ContractError { #[error("invalid token")] InvalidToken, + + #[error("cannot override existing authenticator at index {index}")] + OverridingIndex { index: u8 }, } pub type ContractResult = Result; diff --git a/account/src/execute.rs b/account/src/execute.rs index bb6e198..399abda 100644 --- a/account/src/execute.rs +++ b/account/src/execute.rs @@ -1,6 +1,7 @@ use cosmwasm_std::{Addr, Binary, Deps, DepsMut, Env, Event, MessageInfo, Order, Response}; use crate::auth::{AddAuthenticator, Authenticator}; +use crate::error::ContractError::OverridingIndex; use crate::{ auth, error::{ContractError, ContractResult}, @@ -118,7 +119,7 @@ pub fn add_auth_method( )? { Err(ContractError::InvalidSignature) } else { - AUTHENTICATORS.save(deps.storage, id, &auth)?; + save_authenticator(deps, id, &auth)?; Ok(()) } } @@ -137,7 +138,7 @@ pub fn add_auth_method( )? { Err(ContractError::InvalidSignature) } else { - AUTHENTICATORS.save(deps.storage, id, &auth)?; + save_authenticator(deps, id, &auth)?; Ok(()) } } @@ -156,7 +157,7 @@ pub fn add_auth_method( )? { Err(ContractError::InvalidSignature) } else { - AUTHENTICATORS.save(deps.storage, id, &auth)?; + save_authenticator(deps, id, &auth)?; Ok(()) } } @@ -176,7 +177,7 @@ pub fn add_auth_method( )? { Err(ContractError::InvalidSignature) } else { - AUTHENTICATORS.save(deps.storage, id, &auth)?; + save_authenticator(deps, id, &auth)?; Ok(()) } } @@ -192,6 +193,19 @@ pub fn add_auth_method( ) } +pub fn save_authenticator( + deps: DepsMut, + id: u8, + authenticator: &Authenticator, +) -> ContractResult<()> { + if AUTHENTICATORS.has(deps.storage, id) { + return Err(OverridingIndex { index: id }); + } + + AUTHENTICATORS.save(deps.storage, id, authenticator)?; + Ok(()) +} + pub fn remove_auth_method( deps: DepsMut, env: Env, @@ -237,7 +251,7 @@ mod tests { #[test] fn test_before_tx() { - let authId = 0; + let auth_id = 0; let mut deps = mock_dependencies(); let env = mock_env(); @@ -251,13 +265,15 @@ mod tests { let sig_arr = general_purpose::STANDARD.decode(signature).unwrap(); // The index of the first authenticator is 0. - let credIndex = vec![0u8]; + let cred_index = vec![0u8]; let mut new_vec = Vec::new(); - new_vec.extend_from_slice(&credIndex); + new_vec.extend_from_slice(&cred_index); new_vec.extend_from_slice(&sig_arr); - AUTHENTICATORS.save(deps.as_mut().storage, authId, &auth); + AUTHENTICATORS + .save(deps.as_mut().storage, auth_id, &auth) + .unwrap(); let sig_bytes = Binary::from(new_vec); let tx_bytes = Binary::from(general_purpose::STANDARD.decode("Cp0BCpoBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnoKP3hpb24xbTZ2aDIwcHM3NW0ybjZxeHdwandmOGZzM2t4dzc1enN5M3YycnllaGQ5c3BtbnUwcTlyc2g0NnljeRIreGlvbjFlMmZ1d2UzdWhxOHpkOW5ra2s4NzZuYXdyd2R1bGd2NDYwdnpnNxoKCgV1eGlvbhIBMRJTCksKQwodL2Fic3RyYWN0YWNjb3VudC52MS5OaWxQdWJLZXkSIgog3pl1PDD1NqnoBnBk5J0wjYzvUFAkWKGTN2lgHc+PAUcSBAoCCAESBBDgpxIaFHhpb24tbG9jYWwtdGVzdG5ldC0xIAg=").unwrap());