Modrinth/src/validate/plugin.rs
Geometrically 59f24df294
Add dependencies to search (#578)
* Add dependencies to search

* add attrs for faceting

* run prepare

* Add user data route from token

* update to 24hrs

* Fix report bugs
2023-04-20 16:38:30 -07:00

146 lines
3.5 KiB
Rust

use crate::validate::{SupportedGameVersions, ValidationError, ValidationResult};
use std::io::Cursor;
use zip::ZipArchive;
pub struct PluginYmlValidator;
impl super::Validator for PluginYmlValidator {
fn get_file_extensions(&self) -> &[&str] {
&["zip", "jar"]
}
fn get_project_types(&self) -> &[&str] {
&["mod"]
}
fn get_supported_loaders(&self) -> &[&str] {
&[
"bukkit",
"spigot",
"paper",
"purpur",
"bungeecord",
"waterfall",
]
}
fn get_supported_game_versions(&self) -> SupportedGameVersions {
SupportedGameVersions::All
}
fn validate(
&self,
archive: &mut ZipArchive<Cursor<bytes::Bytes>>,
) -> Result<ValidationResult, ValidationError> {
if archive.by_name("plugin.yml").is_err() {
return Ok(ValidationResult::Warning(
"No plugin.yml present for plugin file.",
));
}
Ok(ValidationResult::Pass)
}
}
pub struct BungeeCordValidator;
impl super::Validator for BungeeCordValidator {
fn get_file_extensions(&self) -> &[&str] {
&["zip", "jar"]
}
fn get_project_types(&self) -> &[&str] {
&["mod"]
}
fn get_supported_loaders(&self) -> &[&str] {
&["bungeecord", "waterfall"]
}
fn get_supported_game_versions(&self) -> SupportedGameVersions {
SupportedGameVersions::All
}
fn validate(
&self,
archive: &mut ZipArchive<Cursor<bytes::Bytes>>,
) -> Result<ValidationResult, ValidationError> {
if archive.by_name("bungee.yml").is_err() {
return Ok(ValidationResult::Warning(
"No bungee.yml present for plugin file.",
));
}
Ok(ValidationResult::Pass)
}
}
pub struct VelocityValidator;
impl super::Validator for VelocityValidator {
fn get_file_extensions(&self) -> &[&str] {
&["zip", "jar"]
}
fn get_project_types(&self) -> &[&str] {
&["mod"]
}
fn get_supported_loaders(&self) -> &[&str] {
&["velocity"]
}
fn get_supported_game_versions(&self) -> SupportedGameVersions {
SupportedGameVersions::All
}
fn validate(
&self,
archive: &mut ZipArchive<Cursor<bytes::Bytes>>,
) -> Result<ValidationResult, ValidationError> {
if archive.by_name("velocity-plugin.json").is_err() {
return Ok(ValidationResult::Warning(
"No velocity-plugin.json present for plugin file.",
));
}
Ok(ValidationResult::Pass)
}
}
pub struct SpongeValidator;
impl super::Validator for SpongeValidator {
fn get_file_extensions(&self) -> &[&str] {
&["zip", "jar"]
}
fn get_project_types(&self) -> &[&str] {
&["mod"]
}
fn get_supported_loaders(&self) -> &[&str] {
&["sponge"]
}
fn get_supported_game_versions(&self) -> SupportedGameVersions {
SupportedGameVersions::All
}
fn validate(
&self,
archive: &mut ZipArchive<Cursor<bytes::Bytes>>,
) -> Result<ValidationResult, ValidationError> {
if !archive
.file_names()
.any(|name| name == "sponge_plugins.json" || name == "mcmod.info")
{
return Ok(ValidationResult::Warning(
"No sponge_plugins.json or mcmod.info present for Sponge plugin.",
));
};
Ok(ValidationResult::Pass)
}
}