git.delta.rocks / unique-network / refs/commits / edfed085aa44

difftreelog

CORE-346 Fix tokenURI permissions checks

Trubnikov Sergey2022-05-27parent: #fdc1b22.patch.diff
in: master

2 files changed

modifiedpallets/nonfungible/src/erc.rsdiffbeforeafterboth
--- 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<string> {
 		let key = pallet_common::eth::KEY_TOKEN_URI.clone();
-		let permission = get_token_permission::<T>(self.id, &key)?;
-		if !permission.collection_admin {
-			return Err("Operation is not allowed".into());
+		if !has_token_permission::<T>(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<T: Config>(
+	collection_id: CollectionId,
+	key: &PropertyKey,
+) -> bool {
+	if let Ok(token_property_permissions) = CollectionPropertyPermissions::<T>::try_get(collection_id) {
+		return token_property_permissions.contains_key(key);
+	}
+
+	false
+}
+
 #[solidity_interface(name = "ERC721UniqueExtensions")]
 impl<T: Config> NonfungibleHandle<T> {
 	#[weight(<SelfWeightOf<T>>::transfer())]
modifiedprimitives/data-structs/src/lib.rsdiffbeforeafterboth
761 self.0.get(key)761 self.0.get(key)
762 }762 }
763
764 pub fn contains_key(&self, key: &PropertyKey) -> bool {
765 self.0.contains_key(key)
766 }
763767
764 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() {