You've already forked AstralRinth
forked from didirus/AstralRinth
FlameAnvil fixes (#484)
This commit is contained in:
@@ -231,7 +231,7 @@ async fn main() -> std::io::Result<()> {
|
|||||||
.app_data(web::Data::new(search_config.clone()))
|
.app_data(web::Data::new(search_config.clone()))
|
||||||
.app_data(web::Data::new(download_queue.clone()))
|
.app_data(web::Data::new(download_queue.clone()))
|
||||||
.app_data(web::Data::new(payouts_queue.clone()))
|
.app_data(web::Data::new(payouts_queue.clone()))
|
||||||
.app_data(flame_anvil_queue.clone())
|
.app_data(web::Data::new(flame_anvil_queue.clone()))
|
||||||
.app_data(web::Data::new(ip_salt.clone()))
|
.app_data(web::Data::new(ip_salt.clone()))
|
||||||
.wrap(sentry_actix::Sentry::new())
|
.wrap(sentry_actix::Sentry::new())
|
||||||
.configure(routes::v1_config)
|
.configure(routes::v1_config)
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ struct FlameUploadFile {
|
|||||||
pub struct FlameAnvilQueue {
|
pub struct FlameAnvilQueue {
|
||||||
mod_loaders: Vec<FlameGameVersion>,
|
mod_loaders: Vec<FlameGameVersion>,
|
||||||
minecraft_versions: Vec<FlameGameVersion>,
|
minecraft_versions: Vec<FlameGameVersion>,
|
||||||
|
bukkit_versions: Vec<FlameGameVersion>,
|
||||||
last_updated: DateTime<Utc>,
|
last_updated: DateTime<Utc>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,25 +53,26 @@ impl FlameAnvilQueue {
|
|||||||
FlameAnvilQueue {
|
FlameAnvilQueue {
|
||||||
mod_loaders: vec![],
|
mod_loaders: vec![],
|
||||||
minecraft_versions: vec![],
|
minecraft_versions: vec![],
|
||||||
|
bukkit_versions: vec![],
|
||||||
last_updated: Utc::now() - Duration::days(365),
|
last_updated: Utc::now() - Duration::days(365),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn convert_game_versions_to_flame(
|
fn convert_game_versions_to_flame(
|
||||||
&self,
|
&self,
|
||||||
original: Vec<String>,
|
original: Vec<String>,
|
||||||
|
flame_game_versions: &[FlameGameVersion],
|
||||||
game_versions: &[GameVersion],
|
game_versions: &[GameVersion],
|
||||||
) -> Vec<i32> {
|
) -> Vec<i32> {
|
||||||
let mut og_to_flame = HashMap::new();
|
let mut og_to_flame = HashMap::new();
|
||||||
let mut last_visited = if self
|
let mut last_visited = if flame_game_versions
|
||||||
.minecraft_versions
|
|
||||||
.last()
|
.last()
|
||||||
.map(|x| x.name.ends_with("-Snapshot"))
|
.map(|x| x.name.ends_with("-Snapshot"))
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
{
|
{
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
self.minecraft_versions
|
flame_game_versions
|
||||||
.iter()
|
.iter()
|
||||||
.rfind(|x| !x.name.ends_with("-Snapshot"))
|
.rfind(|x| !x.name.ends_with("-Snapshot"))
|
||||||
.cloned()
|
.cloned()
|
||||||
@@ -78,7 +80,7 @@ impl FlameAnvilQueue {
|
|||||||
|
|
||||||
for game_version in game_versions {
|
for game_version in game_versions {
|
||||||
if let Some(flame_game_version) =
|
if let Some(flame_game_version) =
|
||||||
self.minecraft_versions.iter().find(|x| {
|
flame_game_versions.iter().find(|x| {
|
||||||
x.name
|
x.name
|
||||||
== if game_version.version.starts_with('b') {
|
== if game_version.version.starts_with('b') {
|
||||||
game_version.version.replace('b', "Beta ")
|
game_version.version.replace('b', "Beta ")
|
||||||
@@ -101,10 +103,8 @@ impl FlameAnvilQueue {
|
|||||||
splits.next().unwrap_or_default()
|
splits.next().unwrap_or_default()
|
||||||
);
|
);
|
||||||
|
|
||||||
if let Some(flame_game_version) = self
|
if let Some(flame_game_version) =
|
||||||
.minecraft_versions
|
flame_game_versions.iter().find(|x| x.name == new_str)
|
||||||
.iter()
|
|
||||||
.find(|x| x.name == new_str)
|
|
||||||
{
|
{
|
||||||
og_to_flame.insert(
|
og_to_flame.insert(
|
||||||
&game_version.version,
|
&game_version.version,
|
||||||
@@ -115,8 +115,8 @@ impl FlameAnvilQueue {
|
|||||||
.insert(&game_version.version, last_visited.id);
|
.insert(&game_version.version, last_visited.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if let Some(first) = self.minecraft_versions.last() {
|
} else if let Some(last) = flame_game_versions.last() {
|
||||||
og_to_flame.insert(&game_version.version, first.id);
|
og_to_flame.insert(&game_version.version, last.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,6 +141,7 @@ impl FlameAnvilQueue {
|
|||||||
file: Vec<u8>,
|
file: Vec<u8>,
|
||||||
file_name: String,
|
file_name: String,
|
||||||
mime_type: String,
|
mime_type: String,
|
||||||
|
is_plugin: bool,
|
||||||
) -> Result<i32, CreateError> {
|
) -> Result<i32, CreateError> {
|
||||||
if self.last_updated < (Utc::now() - Duration::minutes(30)) {
|
if self.last_updated < (Utc::now() - Duration::minutes(30)) {
|
||||||
self.index(api_token).await.map_err(|_| {
|
self.index(api_token).await.map_err(|_| {
|
||||||
@@ -159,6 +160,11 @@ impl FlameAnvilQueue {
|
|||||||
|
|
||||||
let mut game_versions_converted = self.convert_game_versions_to_flame(
|
let mut game_versions_converted = self.convert_game_versions_to_flame(
|
||||||
upload_file.game_versions,
|
upload_file.game_versions,
|
||||||
|
if is_plugin {
|
||||||
|
&self.bukkit_versions
|
||||||
|
} else {
|
||||||
|
&self.minecraft_versions
|
||||||
|
},
|
||||||
game_versions,
|
game_versions,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -209,14 +215,23 @@ impl FlameAnvilQueue {
|
|||||||
&mut self,
|
&mut self,
|
||||||
api_token: &str,
|
api_token: &str,
|
||||||
) -> Result<(), reqwest::Error> {
|
) -> Result<(), reqwest::Error> {
|
||||||
let (game_versions, game_version_types) = futures::future::try_join(
|
let (game_versions, game_version_types, bukkit_game_versions, bukkit_game_versions_types) = futures::future::try_join4(
|
||||||
reqwest::get(format!("https://minecraft.curseforge.com/api/game/versions?token={api_token}")),
|
reqwest::get(format!("https://minecraft.curseforge.com/api/game/versions?token={api_token}")),
|
||||||
reqwest::get(format!("https://minecraft.curseforge.com/api/game/version-types?token={api_token}"))
|
reqwest::get(format!("https://minecraft.curseforge.com/api/game/version-types?token={api_token}")),
|
||||||
|
reqwest::get(format!("https://dev.bukkit.org/api/game/versions?token={api_token}")),
|
||||||
|
reqwest::get(format!("https://dev.bukkit.org/api/game/version-types?token={api_token}"))
|
||||||
).await?;
|
).await?;
|
||||||
|
|
||||||
let (game_versions, game_version_types) = futures::future::try_join(
|
let (
|
||||||
|
game_versions,
|
||||||
|
game_version_types,
|
||||||
|
bukkit_game_versions,
|
||||||
|
bukkit_game_versions_types,
|
||||||
|
) = futures::future::try_join4(
|
||||||
game_versions.json::<Vec<FlameGameVersion>>(),
|
game_versions.json::<Vec<FlameGameVersion>>(),
|
||||||
game_version_types.json::<Vec<FlameGameVersionType>>(),
|
game_version_types.json::<Vec<FlameGameVersionType>>(),
|
||||||
|
bukkit_game_versions.json::<Vec<FlameGameVersion>>(),
|
||||||
|
bukkit_game_versions_types.json::<Vec<FlameGameVersionType>>(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
@@ -230,6 +245,11 @@ impl FlameAnvilQueue {
|
|||||||
.filter(|x| x.slug.starts_with("minecraft"))
|
.filter(|x| x.slug.starts_with("minecraft"))
|
||||||
.map(|x| x.id)
|
.map(|x| x.id)
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
let bukkit_types = bukkit_game_versions_types
|
||||||
|
.iter()
|
||||||
|
.filter(|x| x.slug.starts_with("bukkit"))
|
||||||
|
.map(|x| x.id)
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
let mod_loaders = game_versions
|
let mod_loaders = game_versions
|
||||||
.iter()
|
.iter()
|
||||||
@@ -241,9 +261,15 @@ impl FlameAnvilQueue {
|
|||||||
.filter(|x| minecraft_types.contains(&x.game_version_type_id))
|
.filter(|x| minecraft_types.contains(&x.game_version_type_id))
|
||||||
.cloned()
|
.cloned()
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
let bukkit_versions = bukkit_game_versions
|
||||||
|
.iter()
|
||||||
|
.filter(|x| bukkit_types.contains(&x.game_version_type_id))
|
||||||
|
.cloned()
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
self.mod_loaders = mod_loaders;
|
self.mod_loaders = mod_loaders;
|
||||||
self.minecraft_versions = minecraft_versions;
|
self.minecraft_versions = minecraft_versions;
|
||||||
|
self.bukkit_versions = bukkit_versions;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ pub enum CreateError {
|
|||||||
SerDeError(#[from] serde_json::Error),
|
SerDeError(#[from] serde_json::Error),
|
||||||
#[error("Error while validating input: {0}")]
|
#[error("Error while validating input: {0}")]
|
||||||
ValidationError(String),
|
ValidationError(String),
|
||||||
#[error("Error while uploading file")]
|
#[error("Error while uploading file: {0}")]
|
||||||
FileHostingError(#[from] FileHostingError),
|
FileHostingError(#[from] FileHostingError),
|
||||||
#[error("Error while validating uploaded file: {0}")]
|
#[error("Error while validating uploaded file: {0}")]
|
||||||
FileValidationError(#[from] crate::validate::ValidationError),
|
FileValidationError(#[from] crate::validate::ValidationError),
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ use crate::routes::project_creation::{CreateError, UploadedFile};
|
|||||||
use crate::util::auth::get_user_from_headers;
|
use crate::util::auth::get_user_from_headers;
|
||||||
use crate::util::routes::read_from_field;
|
use crate::util::routes::read_from_field;
|
||||||
use crate::util::validate::validation_errors_to_string;
|
use crate::util::validate::validation_errors_to_string;
|
||||||
use crate::validate::{validate_file, ValidationResult};
|
use crate::validate::plugin::PluginYmlValidator;
|
||||||
|
use crate::validate::{validate_file, ValidationResult, Validator};
|
||||||
use actix::fut::ready;
|
use actix::fut::ready;
|
||||||
use actix_multipart::{Field, Multipart};
|
use actix_multipart::{Field, Multipart};
|
||||||
use actix_web::web::Data;
|
use actix_web::web::Data;
|
||||||
@@ -802,6 +803,12 @@ pub async fn upload_file(
|
|||||||
if let Some(key) = flame_anvil_key {
|
if let Some(key) = flame_anvil_key {
|
||||||
let mut flame_anvil_queue = flame_anvil_queue.lock().await;
|
let mut flame_anvil_queue = flame_anvil_queue.lock().await;
|
||||||
|
|
||||||
|
let is_plugin = loaders.iter().any(|x| {
|
||||||
|
PluginYmlValidator {}
|
||||||
|
.get_supported_loaders()
|
||||||
|
.contains(&&*x.0)
|
||||||
|
});
|
||||||
|
|
||||||
flame_anvil_queue
|
flame_anvil_queue
|
||||||
.upload_file(
|
.upload_file(
|
||||||
&key,
|
&key,
|
||||||
@@ -820,6 +827,7 @@ pub async fn upload_file(
|
|||||||
data.to_vec(),
|
data.to_vec(),
|
||||||
file_name.to_string(),
|
file_name.to_string(),
|
||||||
content_type.to_string(),
|
content_type.to_string(),
|
||||||
|
is_plugin,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ mod fabric;
|
|||||||
mod forge;
|
mod forge;
|
||||||
mod liteloader;
|
mod liteloader;
|
||||||
mod modpack;
|
mod modpack;
|
||||||
mod plugin;
|
pub mod plugin;
|
||||||
mod quilt;
|
mod quilt;
|
||||||
mod resourcepack;
|
mod resourcepack;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user