diff --git a/validation/src/validator.rs b/validation/src/validator.rs index e5ef087..7912b99 100644 --- a/validation/src/validator.rs +++ b/validation/src/validator.rs @@ -34,6 +34,12 @@ fn hash_source(source:&str)->String{ #[allow(dead_code)] #[derive(Debug)] pub enum Error{ + ModelInfoDownload(rbx_asset::cloud::GetError), + CreatorTypeMustBeUser, + RevisionMismatch{ + current:u64, + submitted:u64, + }, ScriptFlaggedIllegalKeyword(String), ScriptBlocked(Option), ScriptNotYetReviewed(Option), @@ -90,6 +96,24 @@ impl From for ValidateRequest{ impl crate::message_handler::MessageHandler{ pub async fn validate_inner(&self,validate_info:ValidateRequest)->Result<(),Error>{ + // discover asset creator and latest version + let info=self.cloud_context.get_asset_info( + rbx_asset::cloud::GetAssetLatestRequest{asset_id:validate_info.ModelID} + ).await.map_err(Error::ModelInfoDownload)?; + + // reject models created by a group + let rbx_asset::cloud::Creator::userId(_user_id)=info.creationContext.creator else{ + return Err(Error::CreatorTypeMustBeUser); + }; + + // Has the map been updated since it was submitted? + if info.revisionId!=validate_info.ModelVersion{ + return Err(Error::RevisionMismatch{ + current:info.revisionId, + submitted:validate_info.ModelVersion, + }); + } + // download the map model let maybe_gzip=download_asset_version(&self.cloud_context,rbx_asset::cloud::GetAssetVersionRequest{ asset_id:validate_info.ModelID,