difftreelog
CORE-346 Fix tokenURI permissions checks
in: master
2 files changed
pallets/nonfungible/src/erc.rsdiffbeforeafterboth162 #[solidity(rename_selector = "tokenURI")]162 #[solidity(rename_selector = "tokenURI")]163 fn token_uri(&self, token_id: uint256) -> Result<string> {163 fn token_uri(&self, token_id: uint256) -> Result<string> {164 let key = pallet_common::eth::KEY_TOKEN_URI.clone();164 let key = pallet_common::eth::KEY_TOKEN_URI.clone();165 let permission = get_token_permission::<T>(self.id, &key)?;166 if !permission.collection_admin {165 if !has_token_permission::<T>(self.id, &key) {167 return Err("Operation is not allowed".into());166 return Err("No tokenURI permission".into());168 }167 }169168170 self.consume_store_reads(1)?;169 self.consume_store_reads(1)?;423 let a = token_property_permissions422 let a = token_property_permissions424 .get(key)423 .get(key)425 .map(|p| p.clone())424 .map(|p| p.clone())426 .ok_or_else(|| Error::Revert("No permission for tokenURI".into()))?;425 .ok_or_else(|| Error::Revert("No permission".into()))?;427 Ok(a)426 Ok(a)428}427}428429fn has_token_permission<T: Config>(430 collection_id: CollectionId,431 key: &PropertyKey,432) -> bool {433 if let Ok(token_property_permissions) = CollectionPropertyPermissions::<T>::try_get(collection_id) {434 return token_property_permissions.contains_key(key);435 }436437 false438}429439430#[solidity_interface(name = "ERC721UniqueExtensions")]440#[solidity_interface(name = "ERC721UniqueExtensions")]431impl<T: Config> NonfungibleHandle<T> {441impl<T: Config> NonfungibleHandle<T> {primitives/data-structs/src/lib.rsdiffbeforeafterboth761 self.0.get(key)761 self.0.get(key)762 }762 }763764 pub fn contains_key(&self, key: &PropertyKey) -> bool {765 self.0.contains_key(key)766 }763767764 fn check_property_key(key: &PropertyKey) -> Result<(), PropertiesError> {768 fn check_property_key(key: &PropertyKey) -> Result<(), PropertiesError> {765 if key.is_empty() {769 if key.is_empty() {