You've already forked AstralRinth
forked from didirus/AstralRinth
* Project Perses (API v1 yeetenings): parts 4 and 5 Resolves MOD-219 Resolves MOD-220 * Note to Emma: Please test your stuff
96 lines
3.0 KiB
Rust
96 lines
3.0 KiB
Rust
use actix_web::{dev::Service, http::Method, web, HttpResponse};
|
|
use chrono::{Timelike, Utc};
|
|
use futures::FutureExt;
|
|
|
|
mod mods;
|
|
mod tags;
|
|
mod teams;
|
|
mod users;
|
|
mod versions;
|
|
|
|
pub fn v1_config(cfg: &mut web::ServiceConfig) {
|
|
cfg.service(
|
|
web::scope("api/v1")
|
|
.wrap_fn(|req, srv| {
|
|
let time = Utc::now();
|
|
|
|
if req.method() == Method::GET && time.hour12().1 < 6 && time.minute() % 10 < 5 {
|
|
srv.call(req).boxed_local()
|
|
} else {
|
|
async {
|
|
Ok(
|
|
req.into_response(
|
|
HttpResponse::Gone()
|
|
.content_type("application/json")
|
|
.body(r#"{"error":"api_deprecated","description":"You are using an application that uses an outdated version of Modrinth's API. Please either update it or switch to another application. For developers: https://docs.modrinth.com/docs/migrations/v1-to-v2/"}"#)
|
|
)
|
|
)
|
|
}.boxed_local()
|
|
}
|
|
})
|
|
.configure(tags_config)
|
|
.configure(mods_config)
|
|
.configure(versions_config)
|
|
.configure(teams_config)
|
|
.configure(users_config)
|
|
.configure(notifications_config),
|
|
);
|
|
}
|
|
|
|
pub fn tags_config(cfg: &mut web::ServiceConfig) {
|
|
cfg.service(
|
|
web::scope("tag")
|
|
.service(tags::category_list)
|
|
.service(tags::loader_list)
|
|
.service(tags::game_version_list)
|
|
.service(super::tags::license_list)
|
|
.service(super::tags::report_type_list),
|
|
);
|
|
}
|
|
|
|
pub fn mods_config(cfg: &mut web::ServiceConfig) {
|
|
cfg.service(mods::mod_search);
|
|
cfg.service(mods::mods_get);
|
|
|
|
cfg.service(
|
|
web::scope("mod")
|
|
.service(mods::mod_get)
|
|
.service(web::scope("{mod_id}").service(versions::version_list)),
|
|
);
|
|
}
|
|
|
|
pub fn versions_config(cfg: &mut web::ServiceConfig) {
|
|
cfg.service(versions::versions_get);
|
|
cfg.service(web::scope("version").service(versions::version_get));
|
|
cfg.service(
|
|
web::scope("version_file")
|
|
.service(super::version_file::get_version_from_hash),
|
|
);
|
|
}
|
|
|
|
pub fn users_config(cfg: &mut web::ServiceConfig) {
|
|
cfg.service(super::users::user_auth_get);
|
|
|
|
cfg.service(super::users::users_get);
|
|
cfg.service(
|
|
web::scope("user")
|
|
.service(super::users::user_get)
|
|
.service(users::mods_list)
|
|
.service(super::users::user_notifications)
|
|
.service(users::user_follows),
|
|
);
|
|
}
|
|
|
|
pub fn teams_config(cfg: &mut web::ServiceConfig) {
|
|
cfg.service(web::scope("team").service(teams::team_members_get));
|
|
}
|
|
|
|
pub fn notifications_config(cfg: &mut web::ServiceConfig) {
|
|
cfg.service(super::notifications::notifications_get);
|
|
|
|
cfg.service(
|
|
web::scope("notification")
|
|
.service(super::notifications::notification_get),
|
|
);
|
|
}
|