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:
Geometrically
2020-10-25 13:51:07 -07:00
committed by GitHub
parent 1ff8c908b8
commit ef28459b61
7 changed files with 160 additions and 4 deletions

View File

@@ -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?;
}

View File

@@ -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())

View File

@@ -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),
);

View File

@@ -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,