You've already forked AstralRinth
forked from xxxOFFxxx/AstralRinth
@@ -9,10 +9,6 @@ impl super::Validator for DataPackValidator {
|
||||
&["zip"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["mod"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["datapack"]
|
||||
}
|
||||
|
||||
@@ -10,10 +10,6 @@ impl super::Validator for FabricValidator {
|
||||
&["jar", "zip"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["mod"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["fabric"]
|
||||
}
|
||||
|
||||
@@ -10,10 +10,6 @@ impl super::Validator for ForgeValidator {
|
||||
&["jar", "zip"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["mod"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["forge"]
|
||||
}
|
||||
@@ -47,10 +43,6 @@ impl super::Validator for LegacyForgeValidator {
|
||||
&["jar", "zip"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["mod"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["forge"]
|
||||
}
|
||||
@@ -71,15 +63,13 @@ impl super::Validator for LegacyForgeValidator {
|
||||
|
||||
fn validate(
|
||||
&self,
|
||||
archive: &mut ZipArchive<Cursor<bytes::Bytes>>,
|
||||
_archive: &mut ZipArchive<Cursor<bytes::Bytes>>,
|
||||
) -> Result<ValidationResult, ValidationError> {
|
||||
if archive.by_name("mcmod.info").is_err() {
|
||||
return Ok(ValidationResult::Warning(
|
||||
"Forge mod file does not contain mcmod.info!",
|
||||
));
|
||||
};
|
||||
|
||||
//TODO: Check if file is a dev JAR?
|
||||
// if archive.by_name("mcmod.info").is_err() {
|
||||
// return Ok(ValidationResult::Warning(
|
||||
// "Forge mod file does not contain mcmod.info!",
|
||||
// ));
|
||||
// };
|
||||
|
||||
Ok(ValidationResult::Pass)
|
||||
}
|
||||
|
||||
@@ -9,10 +9,6 @@ impl super::Validator for LiteLoaderValidator {
|
||||
&["litemod", "jar"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["mod"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["liteloader"]
|
||||
}
|
||||
|
||||
@@ -77,7 +77,6 @@ pub enum SupportedGameVersions {
|
||||
|
||||
pub trait Validator: Sync {
|
||||
fn get_file_extensions(&self) -> &[&str];
|
||||
fn get_project_types(&self) -> &[&str];
|
||||
fn get_supported_loaders(&self) -> &[&str];
|
||||
fn get_supported_game_versions(&self) -> SupportedGameVersions;
|
||||
fn validate(
|
||||
@@ -118,41 +117,28 @@ pub async fn validate_file(
|
||||
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
|
||||
redis: &RedisPool,
|
||||
) -> Result<ValidationResult, ValidationError> {
|
||||
// TODO: This needs to be revisited or removed with v3.
|
||||
// Currently, it checks if the loader is the modpack loader, and extracts the pack data from it.
|
||||
// This (and the funnction that calls this) should be refactored such that
|
||||
// - validators are removed (or altogether reworked)
|
||||
// - if a mrpack is uploaded, the pack data is extracted and usable to extract dependencies automatically
|
||||
let game_versions = version_fields
|
||||
.into_iter()
|
||||
.find_map(|v| MinecraftGameVersion::try_from_version_field(&v).ok())
|
||||
.unwrap_or_default();
|
||||
let all_game_versions =
|
||||
MinecraftGameVersion::list(None, None, &mut *transaction, redis).await?;
|
||||
|
||||
// TODO: A test needs to be written for this.
|
||||
match loaders {
|
||||
loaders if loaders == vec![Loader("mrpack".to_string())] => {
|
||||
let game_versions = version_fields
|
||||
.into_iter()
|
||||
.find_map(|v| MinecraftGameVersion::try_from_version_field(&v).ok())
|
||||
.unwrap_or_default();
|
||||
let all_game_versions =
|
||||
MinecraftGameVersion::list(None, None, &mut *transaction, redis).await?;
|
||||
validate_minecraft_file(
|
||||
data,
|
||||
file_extension,
|
||||
"modpack".to_string(),
|
||||
loaders,
|
||||
game_versions,
|
||||
all_game_versions,
|
||||
file_type,
|
||||
)
|
||||
.await
|
||||
}
|
||||
_ => Ok(ValidationResult::Pass),
|
||||
}
|
||||
validate_minecraft_file(
|
||||
data,
|
||||
file_extension,
|
||||
loaders,
|
||||
game_versions,
|
||||
all_game_versions,
|
||||
file_type,
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
||||
async fn validate_minecraft_file(
|
||||
data: bytes::Bytes,
|
||||
file_extension: String,
|
||||
mut project_type: String,
|
||||
mut loaders: Vec<Loader>,
|
||||
loaders: Vec<Loader>,
|
||||
game_versions: Vec<MinecraftGameVersion>,
|
||||
all_game_versions: Vec<MinecraftGameVersion>,
|
||||
file_type: Option<FileType>,
|
||||
@@ -164,19 +150,18 @@ async fn validate_minecraft_file(
|
||||
if let Some(file_type) = file_type {
|
||||
match file_type {
|
||||
FileType::RequiredResourcePack | FileType::OptionalResourcePack => {
|
||||
project_type = "resourcepack".to_string();
|
||||
loaders = vec![Loader("minecraft".to_string())];
|
||||
return PackValidator.validate(&mut zip);
|
||||
}
|
||||
FileType::Unknown => {}
|
||||
}
|
||||
}
|
||||
|
||||
let mut visited = false;
|
||||
let mut saved_result = None;
|
||||
for validator in VALIDATORS {
|
||||
if validator.get_project_types().contains(&&*project_type)
|
||||
&& loaders
|
||||
.iter()
|
||||
.any(|x| validator.get_supported_loaders().contains(&&*x.0))
|
||||
if loaders
|
||||
.iter()
|
||||
.any(|x| validator.get_supported_loaders().contains(&&*x.0))
|
||||
&& game_version_supported(
|
||||
&game_versions,
|
||||
&all_game_versions,
|
||||
@@ -184,13 +169,30 @@ async fn validate_minecraft_file(
|
||||
)
|
||||
{
|
||||
if validator.get_file_extensions().contains(&&*file_extension) {
|
||||
return validator.validate(&mut zip);
|
||||
let result = validator.validate(&mut zip)?;
|
||||
match result {
|
||||
ValidationResult::PassWithPackDataAndFiles { .. } => {
|
||||
saved_result = Some(result);
|
||||
}
|
||||
ValidationResult::Pass => {
|
||||
if saved_result.is_none() {
|
||||
saved_result = Some(result);
|
||||
}
|
||||
}
|
||||
ValidationResult::Warning(_) => {
|
||||
return Ok(result);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
visited = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(result) = saved_result {
|
||||
return Ok(result);
|
||||
}
|
||||
|
||||
if visited {
|
||||
if ALWAYS_ALLOWED_EXT.contains(&&*file_extension) {
|
||||
Ok(ValidationResult::Warning(
|
||||
|
||||
@@ -13,12 +13,8 @@ impl super::Validator for ModpackValidator {
|
||||
&["mrpack"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["modpack"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["forge", "fabric", "quilt", "mrpack"]
|
||||
&["mrpack"]
|
||||
}
|
||||
|
||||
fn get_supported_game_versions(&self) -> SupportedGameVersions {
|
||||
|
||||
@@ -9,10 +9,6 @@ impl super::Validator for PluginYmlValidator {
|
||||
&["zip", "jar"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["mod"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["bukkit", "spigot", "paper", "purpur"]
|
||||
}
|
||||
@@ -45,10 +41,6 @@ impl super::Validator for BungeeCordValidator {
|
||||
&["zip", "jar"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["mod"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["bungeecord", "waterfall"]
|
||||
}
|
||||
@@ -81,10 +73,6 @@ impl super::Validator for VelocityValidator {
|
||||
&["zip", "jar"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["mod"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["velocity"]
|
||||
}
|
||||
@@ -114,10 +102,6 @@ impl super::Validator for SpongeValidator {
|
||||
&["zip", "jar"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["mod"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["sponge"]
|
||||
}
|
||||
|
||||
@@ -10,10 +10,6 @@ impl super::Validator for QuiltValidator {
|
||||
&["jar", "zip"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["mod"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["quilt"]
|
||||
}
|
||||
|
||||
@@ -10,10 +10,6 @@ impl super::Validator for PackValidator {
|
||||
&["zip"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["resourcepack"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["minecraft"]
|
||||
}
|
||||
@@ -47,10 +43,6 @@ impl super::Validator for TexturePackValidator {
|
||||
&["zip"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["resourcepack"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["minecraft"]
|
||||
}
|
||||
|
||||
@@ -9,10 +9,6 @@ impl super::Validator for ShaderValidator {
|
||||
&["zip"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["shader"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["optifine", "iris"]
|
||||
}
|
||||
@@ -42,10 +38,6 @@ impl super::Validator for CanvasShaderValidator {
|
||||
&["zip"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["shader"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["canvas"]
|
||||
}
|
||||
@@ -81,10 +73,6 @@ impl super::Validator for CoreShaderValidator {
|
||||
&["zip"]
|
||||
}
|
||||
|
||||
fn get_project_types(&self) -> &[&str] {
|
||||
&["shader"]
|
||||
}
|
||||
|
||||
fn get_supported_loaders(&self) -> &[&str] {
|
||||
&["vanilla"]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user