validation: refuse to validate if model has updates #188
@@ -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<submissions_api::types::ScriptID>),
|
||||
ScriptNotYetReviewed(Option<submissions_api::types::ScriptID>),
|
||||
@@ -90,6 +96,24 @@ impl From<crate::nats_types::ValidateSubmissionRequest> 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,
|
||||
|
||||
Reference in New Issue
Block a user