From edfed085aa44cba8f81f16ab121520c1dd87bec9 Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Fri, 27 May 2022 16:37:39 +0000 Subject: [PATCH] CORE-346 Fix tokenURI permissions checks --- --- a/pallets/nonfungible/src/erc.rs +++ b/pallets/nonfungible/src/erc.rs @@ -162,9 +162,8 @@ #[solidity(rename_selector = "tokenURI")] fn token_uri(&self, token_id: uint256) -> Result { let key = pallet_common::eth::KEY_TOKEN_URI.clone(); - let permission = get_token_permission::(self.id, &key)?; - if !permission.collection_admin { - return Err("Operation is not allowed".into()); + if !has_token_permission::(self.id, &key) { + return Err("No tokenURI permission".into()); } self.consume_store_reads(1)?; @@ -423,10 +422,21 @@ let a = token_property_permissions .get(key) .map(|p| p.clone()) - .ok_or_else(|| Error::Revert("No permission for tokenURI".into()))?; + .ok_or_else(|| Error::Revert("No permission".into()))?; Ok(a) } +fn has_token_permission( + collection_id: CollectionId, + key: &PropertyKey, +) -> bool { + if let Ok(token_property_permissions) = CollectionPropertyPermissions::::try_get(collection_id) { + return token_property_permissions.contains_key(key); + } + + false +} + #[solidity_interface(name = "ERC721UniqueExtensions")] impl NonfungibleHandle { #[weight(>::transfer())] --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -761,6 +761,10 @@ self.0.get(key) } + pub fn contains_key(&self, key: &PropertyKey) -> bool { + self.0.contains_key(key) + } + fn check_property_key(key: &PropertyKey) -> Result<(), PropertiesError> { if key.is_empty() { return Err(PropertiesError::EmptyPropertyKey); -- gitstuff