You've already forked AstralRinth
forked from didirus/AstralRinth
Rate limiting + version fixes (#90)
* Rate limiting + version fixes * Move patch to proper place * More fixes * Fix commit hash pin
This commit is contained in:
@@ -84,6 +84,17 @@ impl VersionBuilder {
|
||||
|
||||
version.insert(&mut *transaction).await?;
|
||||
|
||||
sqlx::query!(
|
||||
"
|
||||
UPDATE mods
|
||||
SET updated = NOW()
|
||||
WHERE id = $1
|
||||
",
|
||||
self.mod_id as ModId,
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.await?;
|
||||
|
||||
for file in self.files {
|
||||
file.insert(self.version_id, transaction).await?;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use crate::file_hosting::S3Host;
|
||||
use actix_cors::Cors;
|
||||
use actix_ratelimit::{MemoryStore, MemoryStoreActor, RateLimiter};
|
||||
use actix_web::middleware::Logger;
|
||||
use actix_web::{http, web, App, HttpServer};
|
||||
use env_logger::Env;
|
||||
@@ -205,6 +206,8 @@ async fn main() -> std::io::Result<()> {
|
||||
.and_then(|s| serde_json::from_str::<Vec<String>>(&s).ok())
|
||||
.unwrap_or_else(|| vec![String::from("http://localhost")]);
|
||||
|
||||
let store = MemoryStore::new();
|
||||
|
||||
info!("Starting Actix HTTP server!");
|
||||
|
||||
// Init App
|
||||
@@ -222,6 +225,11 @@ async fn main() -> std::io::Result<()> {
|
||||
.wrap(cors.finish())
|
||||
.wrap(Logger::default())
|
||||
.wrap(Logger::new("%a %{User-Agent}i"))
|
||||
.wrap(
|
||||
RateLimiter::new(MemoryStoreActor::from(store.clone()).start())
|
||||
.with_interval(std::time::Duration::from_secs(60))
|
||||
.with_max_requests(100),
|
||||
)
|
||||
.data(pool.clone())
|
||||
.data(file_host.clone())
|
||||
.data(indexing_queue.clone())
|
||||
|
||||
@@ -32,10 +32,10 @@ pub fn mods_config(cfg: &mut web::ServiceConfig) {
|
||||
|
||||
pub fn versions_config(cfg: &mut web::ServiceConfig) {
|
||||
cfg.service(versions::versions_get);
|
||||
cfg.service(version_creation::version_create);
|
||||
cfg.service(
|
||||
web::scope("version")
|
||||
.service(versions::version_get)
|
||||
.service(version_creation::version_create)
|
||||
.service(versions::version_delete)
|
||||
.service(version_creation::upload_file_to_version),
|
||||
);
|
||||
|
||||
@@ -70,7 +70,7 @@ pub fn check_version(version: &InitialVersionData) -> Result<(), CreateError> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// under `/api/v1/mod/{mod_id}`
|
||||
// under `/api/v1/version`
|
||||
#[post("version")]
|
||||
pub async fn version_create(
|
||||
req: HttpRequest,
|
||||
@@ -107,7 +107,6 @@ pub async fn version_create(
|
||||
result
|
||||
}
|
||||
|
||||
/// TODO: Update mod timestamp when new version is created
|
||||
async fn version_create_inner(
|
||||
req: HttpRequest,
|
||||
mut payload: Multipart,
|
||||
@@ -339,7 +338,7 @@ async fn version_create_inner(
|
||||
|
||||
// TODO: file deletion, listing, etc
|
||||
|
||||
// under /api/v1/mod/{mod_id}/version/{version_id}
|
||||
// under /api/v1/version/{version_id}
|
||||
#[post("{version_id}/file")]
|
||||
pub async fn upload_file_to_version(
|
||||
req: HttpRequest,
|
||||
|
||||
Reference in New Issue
Block a user