From d467b0d230aee400b307bc114da59e0285c84520 Mon Sep 17 00:00:00 2001 From: Shanin Roman Date: Mon, 15 Jan 2024 14:00:32 +0300 Subject: [PATCH] [fix] #3962: Revoke associated tokens on entity unregistretration Signed-off-by: Shanin Roman --- client/tests/integration/permissions.rs | 47 ++ configs/peer/executor.wasm | Bin 505536 -> 521318 bytes smart_contract/executor/src/default.rs | 439 +++++++++++++++--- smart_contract/executor/src/default/tokens.rs | 22 + smart_contract/executor/src/permission.rs | 16 + 5 files changed, 472 insertions(+), 52 deletions(-) diff --git a/client/tests/integration/permissions.rs b/client/tests/integration/permissions.rs index 7887afac906..72cf36738b7 100644 --- a/client/tests/integration/permissions.rs +++ b/client/tests/integration/permissions.rs @@ -337,3 +337,50 @@ fn stored_vs_granted_token_payload() -> Result<()> { Ok(()) } + +#[test] +fn associated_permission_tokens_removed_on_unregister() { + let (_rt, _peer, iroha_client) = ::new().with_port(11_240).start_with_runtime(); + wait_for_genesis_committed(&[iroha_client.clone()], 0); + + let bob_id: AccountId = "bob@wonderland".parse().expect("Valid"); + let kingdom_id: DomainId = "kingdom".parse().expect("Valid"); + let kingdom = Domain::new(kingdom_id.clone()); + + // register kingdom and give bob permissions in this domain + let register_domain = RegisterExpr::new(kingdom); + let bob_to_set_kv_in_domain_token = PermissionToken::new( + "CanSetKeyValueInDomain".parse().unwrap(), + &json!({ "domain_id": kingdom_id }), + ); + let allow_bob_to_set_kv_in_domain = + GrantExpr::new(bob_to_set_kv_in_domain_token.clone(), bob_id.clone()); + + iroha_client + .submit_all_blocking([ + InstructionExpr::from(register_domain), + allow_bob_to_set_kv_in_domain.into(), + ]) + .expect("failed to register domain and grant permission"); + + // check that bob indeed have granted permission + assert!(iroha_client + .request(client::permission::by_account_id(bob_id.clone())) + .and_then(std::iter::Iterator::collect::>>) + .expect("failed to get permissions for bob") + .into_iter() + .any(|token| { token == bob_to_set_kv_in_domain_token })); + + // unregister kingdom + iroha_client + .submit_blocking(UnregisterExpr::new(kingdom_id)) + .expect("failed to unregister domain"); + + // check that permission is removed from bob + assert!(iroha_client + .request(client::permission::by_account_id(bob_id)) + .and_then(std::iter::Iterator::collect::>>) + .expect("failed to get permissions for bob") + .into_iter() + .all(|token| { token != bob_to_set_kv_in_domain_token })); +} diff --git a/configs/peer/executor.wasm b/configs/peer/executor.wasm index 1f39e4222e435e5b1a9fe733ec2eda345888d933..294cd2ef7f96dcc765dec2e6b6e0c2a8b8873f68 100644 GIT binary patch delta 161538 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

Y+PF^w>(yH0I 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 delta 146715 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

li~<`n*tE0W-tmsAX)VE zE}2e0?UvcPW^lF1&YhqKKp5Z{0O8L7K3jEG69RQ~(x7VSz?(w1ekn7vmLU<-zzBRn z0|A_{@mxUGtrjPc>HZ(Gf9(!Sr^tQk-L3|seNBvKm zRsu;kDjSeHEPd&&Fd#6-LpzbfC3MxNNQ<0(H04v7p6(hnN%dw3r)?06?6c_MPl0fh z(WONQkxWoHR^;i95-uv4;mH2su*@&?P3CUEySbbmATb<@Cvf@~YSDfKz<4zCKR}&v zOUVs0XOvtry=0o1^ijbtk;O>*J}fWJ`Uc=U(u4S7q=$ARY9?K}7v};e@0H#2Z=M2u z3h{&RZHD+goD})8EK3>t(1?HTm3_0mM|3g3LilC^3`d7hLh3%*k@EM+_E{6A>i9wU zay*U#c`l_PpMjRf?33wMXe!OxhnZsKK6+xG%i^g;^Ge^IuH_axL$tXB0-sWDYU1KXPn-e?99D#>Qvl{0aTxJD zYV5R_NvA>9Q>mNI&?=1`H+{x5PU-4~a8^xTLt2dVQrAq#06r*QGhuT$8<7ZfX+1`V zUX3tr!sL>hXUv*f;zLF=ZeT!BX1{sCp$RUx&I}yAa+8;kxi>#NiqA$=9;l z+Wr0Nr@oPUQmjWy>7H6loS{-(yRD`4O0DeQxF+x}`uJ*>|LANuT9JFM^Z|9~^qM<4 z29Be1R(JYYCb`o?h^fXej9;yf2L2+iJZDXRuPcP#M*OPqtHzHp#VzBO4u^bkHGVZi zG!|H!WciSPBM?3nzY!pUAnp4_4k=xFE}ZzS!mkp)HTZ?_TaVvH{HpN_<5!Dc9eyKv zz>b99aQs{-Vk*89duhsHbyrD7osbuP;V#i|t|C_@XvcL&p548)>Q|YYWe0{3S deny!(executor, err), - Ok(true) => pass!(executor), - Ok(false) => {} - } - let can_unregister_domain_token = tokens::domain::CanUnregisterDomain { domain_id }; - if can_unregister_domain_token.is_owned_by(authority) { + if is_genesis(executor) + || match is_domain_owner(&domain_id, authority) { + Err(err) => deny!(executor, err), + Ok(is_domain_owner) => is_domain_owner, + } + || { + let can_unregister_domain_token = tokens::domain::CanUnregisterDomain { + domain_id: domain_id.clone(), + }; + can_unregister_domain_token.is_owned_by(authority) + } + { + for (owner_id, permission) in accounts_permission_tokens() { + if is_token_domain_associated(&permission, &domain_id) { + let isi = RevokeExpr::new(permission, owner_id.clone()); + if let Err(_err) = isi.execute() { + deny!(executor, "Can't revoke associated permission token"); + } + } + } pass!(executor); } - deny!(executor, "Can't unregister domain"); } @@ -404,10 +417,113 @@ pub mod domain { deny!(executor, "Can't remove key value in domain metadata"); } + + #[allow(clippy::too_many_lines)] + fn is_token_domain_associated(permission: &PermissionToken, domain_id: &DomainId) -> bool { + let Ok(permission) = AnyPermissionToken::try_from(permission.clone()) else { + return false; + }; + match permission { + AnyPermissionToken::CanUnregisterDomain(permission) => { + &permission.domain_id == domain_id + } + AnyPermissionToken::CanSetKeyValueInDomain(permission) => { + &permission.domain_id == domain_id + } + AnyPermissionToken::CanRemoveKeyValueInDomain(permission) => { + &permission.domain_id == domain_id + } + AnyPermissionToken::CanUnregisterAssetDefinition(permission) => { + permission.asset_definition_id.domain_id() == domain_id + } + AnyPermissionToken::CanSetKeyValueInAssetDefinition(permission) => { + permission.asset_definition_id.domain_id() == domain_id + } + AnyPermissionToken::CanRemoveKeyValueInAssetDefinition(permission) => { + permission.asset_definition_id.domain_id() == domain_id + } + AnyPermissionToken::CanRegisterAssetsWithDefinition(permission) => { + permission.asset_definition_id.domain_id() == domain_id + } + AnyPermissionToken::CanUnregisterAssetsWithDefinition(permission) => { + permission.asset_definition_id.domain_id() == domain_id + } + AnyPermissionToken::CanBurnAssetsWithDefinition(permission) => { + permission.asset_definition_id.domain_id() == domain_id + } + AnyPermissionToken::CanMintAssetsWithDefinition(permission) => { + permission.asset_definition_id.domain_id() == domain_id + } + AnyPermissionToken::CanTransferAssetsWithDefinition(permission) => { + permission.asset_definition_id.domain_id() == domain_id + } + AnyPermissionToken::CanBurnUserAsset(permission) => { + permission.asset_id.definition_id().domain_id() == domain_id + || permission.asset_id.account_id().domain_id() == domain_id + } + AnyPermissionToken::CanTransferUserAsset(permission) => { + permission.asset_id.definition_id().domain_id() == domain_id + || permission.asset_id.account_id().domain_id() == domain_id + } + AnyPermissionToken::CanUnregisterUserAsset(permission) => { + permission.asset_id.definition_id().domain_id() == domain_id + || permission.asset_id.account_id().domain_id() == domain_id + } + AnyPermissionToken::CanSetKeyValueInUserAsset(permission) => { + permission.asset_id.definition_id().domain_id() == domain_id + || permission.asset_id.account_id().domain_id() == domain_id + } + AnyPermissionToken::CanRemoveKeyValueInUserAsset(permission) => { + permission.asset_id.definition_id().domain_id() == domain_id + || permission.asset_id.account_id().domain_id() == domain_id + } + AnyPermissionToken::CanUnregisterAccount(permission) => { + permission.account_id.domain_id() == domain_id + } + AnyPermissionToken::CanMintUserPublicKeys(permission) => { + permission.account_id.domain_id() == domain_id + } + AnyPermissionToken::CanBurnUserPublicKeys(permission) => { + permission.account_id.domain_id() == domain_id + } + AnyPermissionToken::CanMintUserSignatureCheckConditions(permission) => { + permission.account_id.domain_id() == domain_id + } + AnyPermissionToken::CanSetKeyValueInUserAccount(permission) => { + permission.account_id.domain_id() == domain_id + } + AnyPermissionToken::CanRemoveKeyValueInUserAccount(permission) => { + permission.account_id.domain_id() == domain_id + } + AnyPermissionToken::CanUnregisterUserTrigger(permission) => { + permission.trigger_id.domain_id().as_ref() == Some(domain_id) + } + AnyPermissionToken::CanExecuteUserTrigger(permission) => { + permission.trigger_id.domain_id().as_ref() == Some(domain_id) + } + AnyPermissionToken::CanBurnUserTrigger(permission) => { + permission.trigger_id.domain_id().as_ref() == Some(domain_id) + } + AnyPermissionToken::CanMintUserTrigger(permission) => { + permission.trigger_id.domain_id().as_ref() == Some(domain_id) + } + AnyPermissionToken::CanUnregisterAnyPeer(_) + | AnyPermissionToken::CanGrantPermissionToCreateParameters(_) + | AnyPermissionToken::CanRevokePermissionToCreateParameters(_) + | AnyPermissionToken::CanCreateParameters(_) + | AnyPermissionToken::CanGrantPermissionToSetParameters(_) + | AnyPermissionToken::CanRevokePermissionToSetParameters(_) + | AnyPermissionToken::CanSetParameters(_) + | AnyPermissionToken::CanUnregisterAnyRole(_) + | AnyPermissionToken::CanUpgradeExecutor(_) => false, + } + } } pub mod account { - use permission::account::is_account_owner; + use iroha_smart_contract::data_model::permission::PermissionToken; + use permission::{account::is_account_owner, accounts_permission_tokens}; + use tokens::AnyPermissionToken; use super::*; @@ -418,19 +534,28 @@ pub mod account { ) { let account_id = isi.object_id; - if is_genesis(executor) { - pass!(executor); - } - match is_account_owner(&account_id, authority) { - Err(err) => deny!(executor, err), - Ok(true) => pass!(executor), - Ok(false) => {} - } - let can_unregister_user_account = tokens::account::CanUnregisterAccount { account_id }; - if can_unregister_user_account.is_owned_by(authority) { + if is_genesis(executor) + || match is_account_owner(&account_id, authority) { + Err(err) => deny!(executor, err), + Ok(is_account_owner) => is_account_owner, + } + || { + let can_unregister_user_account = tokens::account::CanUnregisterAccount { + account_id: account_id.clone(), + }; + can_unregister_user_account.is_owned_by(authority) + } + { + for (owner_id, permission) in accounts_permission_tokens() { + if is_token_account_associated(&permission, &account_id) { + let isi = RevokeExpr::new(permission, owner_id.clone()); + if let Err(_err) = isi.execute() { + deny!(executor, "Can't revoke associated permission token"); + } + } + } pass!(executor); } - deny!(executor, "Can't unregister another account"); } @@ -560,10 +685,80 @@ pub mod account { "Can't remove value from the metadata of another account" ); } + + fn is_token_account_associated(permission: &PermissionToken, account_id: &AccountId) -> bool { + let Ok(permission) = AnyPermissionToken::try_from(permission.clone()) else { + return false; + }; + match permission { + AnyPermissionToken::CanUnregisterAccount(permission) => { + &permission.account_id == account_id + } + AnyPermissionToken::CanMintUserPublicKeys(permission) => { + &permission.account_id == account_id + } + AnyPermissionToken::CanBurnUserPublicKeys(permission) => { + &permission.account_id == account_id + } + AnyPermissionToken::CanMintUserSignatureCheckConditions(permission) => { + &permission.account_id == account_id + } + AnyPermissionToken::CanSetKeyValueInUserAccount(permission) => { + &permission.account_id == account_id + } + AnyPermissionToken::CanRemoveKeyValueInUserAccount(permission) => { + &permission.account_id == account_id + } + AnyPermissionToken::CanBurnUserAsset(permission) => { + permission.asset_id.account_id() == account_id + } + AnyPermissionToken::CanTransferUserAsset(permission) => { + permission.asset_id.account_id() == account_id + } + AnyPermissionToken::CanUnregisterUserAsset(permission) => { + permission.asset_id.account_id() == account_id + } + AnyPermissionToken::CanSetKeyValueInUserAsset(permission) => { + permission.asset_id.account_id() == account_id + } + AnyPermissionToken::CanRemoveKeyValueInUserAsset(permission) => { + permission.asset_id.account_id() == account_id + } + AnyPermissionToken::CanUnregisterUserTrigger(_) + | AnyPermissionToken::CanExecuteUserTrigger(_) + | AnyPermissionToken::CanBurnUserTrigger(_) + | AnyPermissionToken::CanMintUserTrigger(_) + | AnyPermissionToken::CanUnregisterAnyPeer(_) + | AnyPermissionToken::CanUnregisterDomain(_) + | AnyPermissionToken::CanSetKeyValueInDomain(_) + | AnyPermissionToken::CanRemoveKeyValueInDomain(_) + | AnyPermissionToken::CanUnregisterAssetDefinition(_) + | AnyPermissionToken::CanSetKeyValueInAssetDefinition(_) + | AnyPermissionToken::CanRemoveKeyValueInAssetDefinition(_) + | AnyPermissionToken::CanRegisterAssetsWithDefinition(_) + | AnyPermissionToken::CanUnregisterAssetsWithDefinition(_) + | AnyPermissionToken::CanBurnAssetsWithDefinition(_) + | AnyPermissionToken::CanMintAssetsWithDefinition(_) + | AnyPermissionToken::CanTransferAssetsWithDefinition(_) + | AnyPermissionToken::CanGrantPermissionToCreateParameters(_) + | AnyPermissionToken::CanRevokePermissionToCreateParameters(_) + | AnyPermissionToken::CanCreateParameters(_) + | AnyPermissionToken::CanGrantPermissionToSetParameters(_) + | AnyPermissionToken::CanRevokePermissionToSetParameters(_) + | AnyPermissionToken::CanSetParameters(_) + | AnyPermissionToken::CanUnregisterAnyRole(_) + | AnyPermissionToken::CanUpgradeExecutor(_) => false, + } + } } pub mod asset_definition { - use permission::{account::is_account_owner, asset_definition::is_asset_definition_owner}; + use iroha_smart_contract::data_model::{asset::AssetDefinitionId, permission::PermissionToken}; + use permission::{ + account::is_account_owner, accounts_permission_tokens, + asset_definition::is_asset_definition_owner, + }; + use tokens::AnyPermissionToken; use super::*; @@ -574,22 +769,29 @@ pub mod asset_definition { ) { let asset_definition_id = isi.object_id; - if is_genesis(executor) { - pass!(executor); - } - match is_asset_definition_owner(&asset_definition_id, authority) { - Err(err) => deny!(executor, err), - Ok(true) => pass!(executor), - Ok(false) => {} - } - let can_unregister_asset_definition_token = - tokens::asset_definition::CanUnregisterAssetDefinition { - asset_definition_id, - }; - if can_unregister_asset_definition_token.is_owned_by(authority) { + if is_genesis(executor) + || match is_asset_definition_owner(&asset_definition_id, authority) { + Err(err) => deny!(executor, err), + Ok(is_asset_definition_owner) => is_asset_definition_owner, + } + || { + let can_unregister_asset_definition_token = + tokens::asset_definition::CanUnregisterAssetDefinition { + asset_definition_id: asset_definition_id.clone(), + }; + can_unregister_asset_definition_token.is_owned_by(authority) + } + { + for (owner_id, permission) in accounts_permission_tokens() { + if is_token_asset_definition_associated(&permission, &asset_definition_id) { + let isi = RevokeExpr::new(permission, owner_id.clone()); + if let Err(_err) = isi.execute() { + deny!(executor, "Can't revoke associated permission token"); + } + } + } pass!(executor); } - deny!( executor, "Can't unregister assets registered by other accounts" @@ -681,6 +883,78 @@ pub mod asset_definition { "Can't remove value from the asset definition metadata created by another account" ); } + + fn is_token_asset_definition_associated( + permission: &PermissionToken, + asset_definition_id: &AssetDefinitionId, + ) -> bool { + let Ok(permission) = AnyPermissionToken::try_from(permission.clone()) else { + return false; + }; + match permission { + AnyPermissionToken::CanUnregisterAssetDefinition(permission) => { + &permission.asset_definition_id == asset_definition_id + } + AnyPermissionToken::CanSetKeyValueInAssetDefinition(permission) => { + &permission.asset_definition_id == asset_definition_id + } + AnyPermissionToken::CanRemoveKeyValueInAssetDefinition(permission) => { + &permission.asset_definition_id == asset_definition_id + } + AnyPermissionToken::CanRegisterAssetsWithDefinition(permission) => { + &permission.asset_definition_id == asset_definition_id + } + AnyPermissionToken::CanUnregisterAssetsWithDefinition(permission) => { + &permission.asset_definition_id == asset_definition_id + } + AnyPermissionToken::CanBurnAssetsWithDefinition(permission) => { + &permission.asset_definition_id == asset_definition_id + } + AnyPermissionToken::CanMintAssetsWithDefinition(permission) => { + &permission.asset_definition_id == asset_definition_id + } + AnyPermissionToken::CanTransferAssetsWithDefinition(permission) => { + &permission.asset_definition_id == asset_definition_id + } + AnyPermissionToken::CanBurnUserAsset(permission) => { + permission.asset_id.definition_id() == asset_definition_id + } + AnyPermissionToken::CanTransferUserAsset(permission) => { + permission.asset_id.definition_id() == asset_definition_id + } + AnyPermissionToken::CanUnregisterUserAsset(permission) => { + permission.asset_id.definition_id() == asset_definition_id + } + AnyPermissionToken::CanSetKeyValueInUserAsset(permission) => { + permission.asset_id.definition_id() == asset_definition_id + } + AnyPermissionToken::CanRemoveKeyValueInUserAsset(permission) => { + permission.asset_id.definition_id() == asset_definition_id + } + AnyPermissionToken::CanUnregisterAccount(_) + | AnyPermissionToken::CanMintUserPublicKeys(_) + | AnyPermissionToken::CanBurnUserPublicKeys(_) + | AnyPermissionToken::CanMintUserSignatureCheckConditions(_) + | AnyPermissionToken::CanSetKeyValueInUserAccount(_) + | AnyPermissionToken::CanRemoveKeyValueInUserAccount(_) + | AnyPermissionToken::CanUnregisterUserTrigger(_) + | AnyPermissionToken::CanExecuteUserTrigger(_) + | AnyPermissionToken::CanBurnUserTrigger(_) + | AnyPermissionToken::CanMintUserTrigger(_) + | AnyPermissionToken::CanUnregisterAnyPeer(_) + | AnyPermissionToken::CanUnregisterDomain(_) + | AnyPermissionToken::CanSetKeyValueInDomain(_) + | AnyPermissionToken::CanRemoveKeyValueInDomain(_) + | AnyPermissionToken::CanGrantPermissionToCreateParameters(_) + | AnyPermissionToken::CanRevokePermissionToCreateParameters(_) + | AnyPermissionToken::CanCreateParameters(_) + | AnyPermissionToken::CanGrantPermissionToSetParameters(_) + | AnyPermissionToken::CanRevokePermissionToSetParameters(_) + | AnyPermissionToken::CanSetParameters(_) + | AnyPermissionToken::CanUnregisterAnyRole(_) + | AnyPermissionToken::CanUpgradeExecutor(_) => false, + } + } } pub mod asset { @@ -1058,7 +1332,9 @@ pub mod role { } pub mod trigger { - use permission::trigger::is_trigger_owner; + use iroha_smart_contract::data_model::{permission::PermissionToken, trigger::TriggerId}; + use permission::{accounts_permission_tokens, trigger::is_trigger_owner}; + use tokens::AnyPermissionToken; use super::*; @@ -1069,20 +1345,28 @@ pub mod trigger { ) { let trigger_id = isi.object_id; - if is_genesis(executor) { - pass!(executor); - } - match is_trigger_owner(&trigger_id, authority) { - Err(err) => deny!(executor, err), - Ok(true) => pass!(executor), - Ok(false) => {} - } - let can_unregister_user_trigger_token = - tokens::trigger::CanUnregisterUserTrigger { trigger_id }; - if can_unregister_user_trigger_token.is_owned_by(authority) { + if is_genesis(executor) + || match is_trigger_owner(&trigger_id, authority) { + Err(err) => deny!(executor, err), + Ok(is_trigger_owner) => is_trigger_owner, + } + || { + let can_unregister_user_trigger_token = tokens::trigger::CanUnregisterUserTrigger { + trigger_id: trigger_id.clone(), + }; + can_unregister_user_trigger_token.is_owned_by(authority) + } + { + for (owner_id, permission) in accounts_permission_tokens() { + if is_token_trigger_associated(&permission, &trigger_id) { + let isi = RevokeExpr::new(permission, owner_id.clone()); + if let Err(_err) = isi.execute() { + deny!(executor, "Can't revoke associated permission token"); + } + } + } pass!(executor); } - deny!( executor, "Can't unregister trigger owned by another account" @@ -1163,6 +1447,57 @@ pub mod trigger { deny!(executor, "Can't execute trigger owned by another account"); } + + fn is_token_trigger_associated(permission: &PermissionToken, trigger_id: &TriggerId) -> bool { + let Ok(permission) = AnyPermissionToken::try_from(permission.clone()) else { + return false; + }; + match permission { + AnyPermissionToken::CanUnregisterUserTrigger(permission) => { + &permission.trigger_id == trigger_id + } + AnyPermissionToken::CanExecuteUserTrigger(permission) => { + &permission.trigger_id == trigger_id + } + AnyPermissionToken::CanBurnUserTrigger(permission) => { + &permission.trigger_id == trigger_id + } + AnyPermissionToken::CanMintUserTrigger(permission) => { + &permission.trigger_id == trigger_id + } + AnyPermissionToken::CanUnregisterAnyPeer(_) + | AnyPermissionToken::CanUnregisterDomain(_) + | AnyPermissionToken::CanSetKeyValueInDomain(_) + | AnyPermissionToken::CanRemoveKeyValueInDomain(_) + | AnyPermissionToken::CanUnregisterAccount(_) + | AnyPermissionToken::CanMintUserPublicKeys(_) + | AnyPermissionToken::CanBurnUserPublicKeys(_) + | AnyPermissionToken::CanMintUserSignatureCheckConditions(_) + | AnyPermissionToken::CanSetKeyValueInUserAccount(_) + | AnyPermissionToken::CanRemoveKeyValueInUserAccount(_) + | AnyPermissionToken::CanUnregisterAssetDefinition(_) + | AnyPermissionToken::CanSetKeyValueInAssetDefinition(_) + | AnyPermissionToken::CanRemoveKeyValueInAssetDefinition(_) + | AnyPermissionToken::CanRegisterAssetsWithDefinition(_) + | AnyPermissionToken::CanUnregisterAssetsWithDefinition(_) + | AnyPermissionToken::CanUnregisterUserAsset(_) + | AnyPermissionToken::CanBurnAssetsWithDefinition(_) + | AnyPermissionToken::CanBurnUserAsset(_) + | AnyPermissionToken::CanMintAssetsWithDefinition(_) + | AnyPermissionToken::CanTransferAssetsWithDefinition(_) + | AnyPermissionToken::CanTransferUserAsset(_) + | AnyPermissionToken::CanSetKeyValueInUserAsset(_) + | AnyPermissionToken::CanRemoveKeyValueInUserAsset(_) + | AnyPermissionToken::CanGrantPermissionToCreateParameters(_) + | AnyPermissionToken::CanRevokePermissionToCreateParameters(_) + | AnyPermissionToken::CanCreateParameters(_) + | AnyPermissionToken::CanGrantPermissionToSetParameters(_) + | AnyPermissionToken::CanRevokePermissionToSetParameters(_) + | AnyPermissionToken::CanSetParameters(_) + | AnyPermissionToken::CanUnregisterAnyRole(_) + | AnyPermissionToken::CanUpgradeExecutor(_) => false, + } + } } pub mod permission_token { diff --git a/smart_contract/executor/src/default/tokens.rs b/smart_contract/executor/src/default/tokens.rs index df79280ba40..a3a9645b204 100644 --- a/smart_contract/executor/src/default/tokens.rs +++ b/smart_contract/executor/src/default/tokens.rs @@ -48,6 +48,28 @@ macro_rules! declare_tokens { }; } + /// Enum with every default token + #[allow(clippy::enum_variant_names)] + pub(crate) enum AnyPermissionToken { + $( + $token_ty($($token_path::)+$token_ty), + )* + } + + impl TryFrom<::iroha_smart_contract::data_model::permission::PermissionToken> for AnyPermissionToken { + type Error = $crate::permission::PermissionTokenConversionError; + + fn try_from(token: ::iroha_smart_contract::data_model::permission::PermissionToken) -> Result { + match token.definition_id().as_ref() { $( + stringify!($token_ty) => { + let token = <$($token_path::)+$token_ty>::try_from(token)?; + Ok(Self::$token_ty(token)) + } )+ + _ => Err(Self::Error::Id(token.definition_id().clone())) + } + } + } + pub(crate) use map_token; pub(crate) use map_token_type; }; diff --git a/smart_contract/executor/src/permission.rs b/smart_contract/executor/src/permission.rs index a0f60a6c35e..74898dc06ae 100644 --- a/smart_contract/executor/src/permission.rs +++ b/smart_contract/executor/src/permission.rs @@ -3,6 +3,7 @@ use alloc::borrow::ToOwned as _; use iroha_schema::IntoSchema; +use iroha_smart_contract::data_model::permission::PermissionToken; use iroha_smart_contract_utils::debug::DebugExpectExt as _; use serde::{de::DeserializeOwned, Serialize}; @@ -330,3 +331,18 @@ impl From<&T> for OnlyGenesis { Self } } + +/// Iterator over all accounts and theirs permission tokens +pub(crate) fn accounts_permission_tokens() -> impl Iterator { + FindAllAccounts + .execute() + .dbg_expect("failed to query all accounts") + .into_iter() + .flat_map(|account| { + FindPermissionTokensByAccountId::new(account.id().clone()) + .execute() + .dbg_expect("failed to query permssion token for account") + .into_iter() + .map(move |token| (account.id().clone(), token)) + }) +}