From e064b23a82b8680035c933f195e3b77a849183b2 Mon Sep 17 00:00:00 2001 From: Alexander Cyon Date: Sat, 30 Nov 2024 11:53:24 +0100 Subject: [PATCH] cleanup --- .../src/matrices/builder/matrix_template.rs | 581 ++++++------------ .../factor_source_kind_level/role_template.rs | 58 +- 2 files changed, 226 insertions(+), 413 deletions(-) diff --git a/crates/rules/src/matrices/builder/matrix_template.rs b/crates/rules/src/matrices/builder/matrix_template.rs index a2da17f6..20cc95b5 100644 --- a/crates/rules/src/matrices/builder/matrix_template.rs +++ b/crates/rules/src/matrices/builder/matrix_template.rs @@ -72,459 +72,236 @@ impl MatrixTemplate { } impl MatrixTemplate { - pub fn config_11() -> Self { + fn new( + primary_role: PrimaryRoleTemplate, + recovery_role: RecoveryRoleTemplate, + confirmation_role: ConfirmationRoleTemplate, + ) -> Self { Self { built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 2, - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::ledger(0), - ], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::ledger(0), - ], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::password(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, + primary_role, + recovery_role, + confirmation_role, + number_of_days_until_auto_confirm: + MatrixOfFactorSourceIds::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, } } + pub fn config_11() -> Self { + Self::new( + PrimaryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::ledger(), + ]), + RecoveryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::ledger(), + ]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::password()]), + ) + } + pub fn config_12() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 2, - vec![ - FactorSourceTemplate::ledger(0), - FactorSourceTemplate::password(0), - ], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::ledger(0), - ], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::password(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([ + FactorSourceTemplate::ledger(), + FactorSourceTemplate::password(), + ]), + RecoveryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::ledger(), + ]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::password()]), + ) } pub fn config_13() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 2, - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::password(0), - ], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::ledger(0), - ], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::password(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::password(), + ]), + RecoveryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::ledger(), + ]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::password()]), + ) } pub fn config_14() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 1, - vec![FactorSourceTemplate::device(0)], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::ledger(0)], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::password(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([FactorSourceTemplate::device()]), + RecoveryRoleTemplate::new([FactorSourceTemplate::ledger()]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::password()]), + ) } pub fn config_15() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 1, - vec![FactorSourceTemplate::ledger(0)], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::device(0)], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::password(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([FactorSourceTemplate::ledger()]), + RecoveryRoleTemplate::new([FactorSourceTemplate::device()]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::password()]), + ) } pub fn config_21() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 2, - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::ledger(0), - ], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::ledger(0), - FactorSourceTemplate::ledger(1), - ], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::device(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::ledger(), + ]), + RecoveryRoleTemplate::new([ + FactorSourceTemplate::ledger(), + FactorSourceTemplate::ledger_other(), + ]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::device()]), + ) } pub fn config_22() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 2, - vec![ - FactorSourceTemplate::ledger(0), - FactorSourceTemplate::ledger(1), - ], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::ledger(0), - FactorSourceTemplate::ledger(1), - ], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::device(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([ + FactorSourceTemplate::ledger(), + FactorSourceTemplate::ledger_other(), + ]), + RecoveryRoleTemplate::new([ + FactorSourceTemplate::ledger(), + FactorSourceTemplate::ledger_other(), + ]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::device()]), + ) } pub fn config_23() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 1, - vec![FactorSourceTemplate::ledger(0)], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::ledger(1)], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::device(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([FactorSourceTemplate::ledger()]), + RecoveryRoleTemplate::new([FactorSourceTemplate::ledger_other()]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::device()]), + ) } pub fn config_24() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 1, - vec![FactorSourceTemplate::device(0)], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::ledger(0)], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::ledger(1)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([FactorSourceTemplate::device()]), + RecoveryRoleTemplate::new([FactorSourceTemplate::ledger()]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::ledger_other()]), + ) } pub fn config_30() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 2, - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::ledger(0), - ], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::ledger(0), - FactorSourceTemplate::ledger(1), - ], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::password(0), - ], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::ledger(), + ]), + RecoveryRoleTemplate::new([ + FactorSourceTemplate::ledger(), + FactorSourceTemplate::ledger_other(), + ]), + ConfirmationRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::password(), + ]), + ) } pub fn config_40() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 2, - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::ledger(0), - ], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::ledger(0), - ], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::password(0), - FactorSourceTemplate::password(1), - FactorSourceTemplate::off_device_mnemonic(0), - ], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::ledger(), + ]), + RecoveryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::ledger(), + ]), + ConfirmationRoleTemplate::new([ + FactorSourceTemplate::password(), + FactorSourceTemplate::password_other(), + FactorSourceTemplate::off_device_mnemonic(), + ]), + ) } pub fn config_51() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 2, - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::password(0), - ], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::trusted_contact(0)], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::password(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::password(), + ]), + RecoveryRoleTemplate::new([FactorSourceTemplate::trusted_contact()]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::password()]), + ) } pub fn config_52() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 2, - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::password(0), - ], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::trusted_contact(0), - FactorSourceTemplate::trusted_contact(1), - FactorSourceTemplate::device(0), - ], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::password(0), - FactorSourceTemplate::password(1), - FactorSourceTemplate::off_device_mnemonic(0), - ], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::password(), + ]), + RecoveryRoleTemplate::new([ + FactorSourceTemplate::trusted_contact(), + FactorSourceTemplate::trusted_contact_other(), + FactorSourceTemplate::device(), + ]), + ConfirmationRoleTemplate::new([ + FactorSourceTemplate::password(), + FactorSourceTemplate::password_other(), + FactorSourceTemplate::off_device_mnemonic(), + ]), + ) } pub fn config_60() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 1, - vec![FactorSourceTemplate::device(0)], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::trusted_contact(0)], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::security_questions(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([FactorSourceTemplate::device()]), + RecoveryRoleTemplate::new([FactorSourceTemplate::trusted_contact()]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::security_questions()]), + ) } pub fn config_70() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 2, - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::ledger(0), - ], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::trusted_contact(0), - FactorSourceTemplate::ledger(0), - ], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::device(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::ledger(), + ]), + RecoveryRoleTemplate::new([ + FactorSourceTemplate::trusted_contact(), + FactorSourceTemplate::ledger(), + ]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::device()]), + ) } pub fn config_80() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 2, - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::ledger(0), - ], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::ledger(0), - FactorSourceTemplate::device(0), - ], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::security_questions(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::ledger(), + ]), + RecoveryRoleTemplate::new([ + FactorSourceTemplate::ledger(), + FactorSourceTemplate::device(), + ]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::security_questions()]), + ) } pub fn config_90() -> Self { - Self { - built: PhantomData, - primary_role: PrimaryRoleTemplate::with_factors( - 2, - vec![ - FactorSourceTemplate::device(0), - FactorSourceTemplate::ledger(0), - ], - vec![], - ), - recovery_role: RecoveryRoleTemplate::with_factors( - 0, - vec![], - vec![ - FactorSourceTemplate::trusted_contact(0), - FactorSourceTemplate::device(0), - ], - ), - confirmation_role: ConfirmationRoleTemplate::with_factors( - 0, - vec![], - vec![FactorSourceTemplate::security_questions(0)], - ), - number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM, - } + Self::new( + PrimaryRoleTemplate::new([ + FactorSourceTemplate::device(), + FactorSourceTemplate::ledger(), + ]), + RecoveryRoleTemplate::new([ + FactorSourceTemplate::trusted_contact(), + FactorSourceTemplate::device(), + ]), + ConfirmationRoleTemplate::new([FactorSourceTemplate::security_questions()]), + ) } } diff --git a/crates/rules/src/roles/factor_levels/factor_source_kind_level/role_template.rs b/crates/rules/src/roles/factor_levels/factor_source_kind_level/role_template.rs index 4c12762f..7d430e1e 100644 --- a/crates/rules/src/roles/factor_levels/factor_source_kind_level/role_template.rs +++ b/crates/rules/src/roles/factor_levels/factor_source_kind_level/role_template.rs @@ -9,44 +9,80 @@ pub struct FactorSourceTemplate { pub(crate) type PrimaryRoleTemplate = AbstractBuiltRoleWithFactor<{ ROLE_PRIMARY }, FactorSourceTemplate>; +impl PrimaryRoleTemplate { + pub(crate) fn new(threshold_factors: impl IntoIterator) -> Self { + let threshold_factors = threshold_factors.into_iter().collect_vec(); + Self::with_factors(threshold_factors.len() as u8, threshold_factors, []) + } +} + pub(crate) type RecoveryRoleTemplate = AbstractBuiltRoleWithFactor<{ ROLE_RECOVERY }, FactorSourceTemplate>; +impl RecoveryRoleTemplate { + pub(crate) fn new(override_factors: impl IntoIterator) -> Self { + Self::with_factors(0, [], override_factors) + } +} + pub(crate) type ConfirmationRoleTemplate = AbstractBuiltRoleWithFactor<{ ROLE_CONFIRMATION }, FactorSourceTemplate>; +impl ConfirmationRoleTemplate { + pub(crate) fn new(override_factors: impl IntoIterator) -> Self { + Self::with_factors(0, [], override_factors) + } +} + impl FactorSourceTemplate { pub fn new(kind: FactorSourceKind, id: u8) -> Self { Self { kind, id } } - pub fn device(id: u8) -> Self { - Self::new(FactorSourceKind::Device, id) + pub fn device() -> Self { + Self::new(FactorSourceKind::Device, 0) } - pub fn ledger(id: u8) -> Self { + fn ledger_id(id: u8) -> Self { Self::new(FactorSourceKind::LedgerHQHardwareWallet, id) } + pub fn ledger() -> Self { + Self::ledger_id(0) + } - pub fn arculus(id: u8) -> Self { - Self::new(FactorSourceKind::ArculusCard, id) + pub fn ledger_other() -> Self { + Self::ledger_id(1) } - pub fn password(id: u8) -> Self { + fn password_id(id: u8) -> Self { Self::new(FactorSourceKind::Password, id) } + pub fn password() -> Self { + Self::password_id(0) + } + pub fn password_other() -> Self { + Self::password_id(1) + } /// Radix Wallet (UI) calls this "Passphrase" - pub fn off_device_mnemonic(id: u8) -> Self { - Self::new(FactorSourceKind::OffDeviceMnemonic, id) + pub fn off_device_mnemonic() -> Self { + Self::new(FactorSourceKind::OffDeviceMnemonic, 0) } - pub fn trusted_contact(id: u8) -> Self { + fn trusted_contact_id(id: u8) -> Self { Self::new(FactorSourceKind::TrustedContact, id) } - pub fn security_questions(id: u8) -> Self { - Self::new(FactorSourceKind::SecurityQuestions, id) + pub fn trusted_contact() -> Self { + Self::trusted_contact_id(0) + } + + pub fn trusted_contact_other() -> Self { + Self::trusted_contact_id(1) + } + + pub fn security_questions() -> Self { + Self::new(FactorSourceKind::SecurityQuestions, 0) } }