diff --git a/unreal_mod_manager/src/error.rs b/unreal_mod_manager/src/error.rs index 9bb2b7c..764cdc3 100644 --- a/unreal_mod_manager/src/error.rs +++ b/unreal_mod_manager/src/error.rs @@ -105,6 +105,7 @@ pub enum ModLoaderWarningKind { MissingMetadata, InvalidMetadata, + OutdatedSource, InvalidModId, InvalidModFileName, InvalidVersion, @@ -176,6 +177,12 @@ impl ModLoaderWarning { mod_id: Some(mod_id), } } + pub fn outdated_source(mod_id: String) -> Self { + ModLoaderWarning { + kind: ModLoaderWarningKind::OutdatedSource, + mod_id: Some(mod_id), + } + } pub fn invalid_mod_id(mod_id: String) -> Self { ModLoaderWarning { kind: ModLoaderWarningKind::InvalidModId, @@ -259,6 +266,7 @@ impl fmt::Display for ModLoaderWarning { ModLoaderWarningKind::MissingMetadata => format!("{mod_name}Missing metadata"), ModLoaderWarningKind::InvalidMetadata => format!("{mod_name}Invalid metadata"), + ModLoaderWarningKind::OutdatedSource => format!("{mod_name}mod was obtained from an outdated source (e.g. astroneermods.space) and cannot be loaded in-game"), ModLoaderWarningKind::InvalidModId => format!("{mod_name}Invalid mod ID"), ModLoaderWarningKind::InvalidModFileName => { format!("{mod_name}Invalid mod file name") diff --git a/unreal_mod_manager/src/mod_processing/pakfile_reading.rs b/unreal_mod_manager/src/mod_processing/pakfile_reading.rs index 35ee4c9..08c1fbd 100644 --- a/unreal_mod_manager/src/mod_processing/pakfile_reading.rs +++ b/unreal_mod_manager/src/mod_processing/pakfile_reading.rs @@ -12,6 +12,8 @@ use crate::{FileToProcess, ModLoaderAppData}; use super::verify::{self, MOD_FILENAME_REGEX}; +const OUTDATED_SOURCE_URLS: &[&str] = &["astromod.space", "astroneermods.space", "atenfyr.com/ams-archive"]; + #[derive(Debug)] pub(crate) struct ReadData(String, Metadata); @@ -56,6 +58,15 @@ pub(crate) fn read_pak_files( return Err(ModLoaderWarning::invalid_mod_file_name(file_name)); } + // check that homepage doesn't contain outdated source URL + if let Some(ref homepage) = metadata.homepage { + let homepage_lower = homepage.to_lowercase(); + if OUTDATED_SOURCE_URLS.iter().any(|banned| homepage_lower.contains(banned)) + { + return Err(ModLoaderWarning::outdated_source(file_name)); + } + } + let file_name_parts = MOD_FILENAME_REGEX .captures(&file_name) .ok_or_else(|| ModLoaderWarning::invalid_metadata(file_name.clone()))?;