difftreelog
CORE-346 Fix tokenURI permissions checks
in: master
2 files changed
pallets/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())]
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() {