diff options
author | Dessalines <tyhou13@gmx.com> | 2019-10-13 12:06:18 -0700 |
---|---|---|
committer | Dessalines <tyhou13@gmx.com> | 2019-10-13 12:06:18 -0700 |
commit | 35dfe31a391fa11c8920c2e1a2e3289f2e61cc9c (patch) | |
tree | 6207fe22b77055cb82134a129cb6ad5372290c1e /server | |
parent | 484630c1a8ce3fa3408caa8b42e85c0e6e39f86f (diff) |
Externalizing rate limits. Upgrading to Rust 1.38
- Fixes #290
Diffstat (limited to 'server')
-rw-r--r-- | server/src/api/site.rs | 4 | ||||
-rw-r--r-- | server/src/lib.rs | 34 | ||||
-rw-r--r-- | server/src/websocket/server.rs | 26 |
3 files changed, 50 insertions, 14 deletions
diff --git a/server/src/api/site.rs b/server/src/api/site.rs index 912378ab..40b1592d 100644 --- a/server/src/api/site.rs +++ b/server/src/api/site.rs @@ -297,7 +297,7 @@ impl Perform<GetSiteResponse> for Oper<GetSite> { site: site_view, admins: admins, banned: banned, - online: 0 + online: 0, }) } } @@ -488,7 +488,7 @@ impl Perform<GetSiteResponse> for Oper<TransferSite> { site: Some(site_view), admins: admins, banned: banned, - online: 0 + online: 0, }) } } diff --git a/server/src/lib.rs b/server/src/lib.rs index 0ff34d4c..d75a0d18 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -34,6 +34,12 @@ pub struct Settings { db_url: String, hostname: String, jwt_secret: String, + rate_limit_message: i32, + rate_limit_message_per_second: i32, + rate_limit_post: i32, + rate_limit_post_per_second: i32, + rate_limit_register: i32, + rate_limit_register_per_second: i32, } impl Settings { @@ -43,6 +49,30 @@ impl Settings { db_url: env::var("DATABASE_URL").expect("DATABASE_URL must be set"), hostname: env::var("HOSTNAME").unwrap_or("rrr".to_string()), jwt_secret: env::var("JWT_SECRET").unwrap_or("changeme".to_string()), + rate_limit_message: env::var("RATE_LIMIT_MESSAGE") + .unwrap_or("30".to_string()) + .parse() + .unwrap(), + rate_limit_message_per_second: env::var("RATE_LIMIT_MESSAGE_PER_SECOND") + .unwrap_or("60".to_string()) + .parse() + .unwrap(), + rate_limit_post: env::var("RATE_LIMIT_POST") + .unwrap_or("3".to_string()) + .parse() + .unwrap(), + rate_limit_post_per_second: env::var("RATE_LIMIT_POST_PER_SECOND") + .unwrap_or("600".to_string()) + .parse() + .unwrap(), + rate_limit_register: env::var("RATE_LIMIT_REGISTER") + .unwrap_or("1".to_string()) + .parse() + .unwrap(), + rate_limit_register_per_second: env::var("RATE_LIMIT_REGISTER_PER_SECOND") + .unwrap_or("3600".to_string()) + .parse() + .unwrap(), } } fn api_endpoint(&self) -> String { @@ -90,7 +120,8 @@ mod tests { #[test] fn test_slur_filter() { - let test = "coons test dindu ladyboy tranny retardeds. This is a bunch of other safe text.".to_string(); + let test = + "coons test dindu ladyboy tranny retardeds. This is a bunch of other safe text.".to_string(); let slur_free = "No slurs here"; assert_eq!( remove_slurs(&test), @@ -100,7 +131,6 @@ mod tests { assert!(has_slurs(&test)); assert!(!has_slurs(slur_free)); } - } lazy_static! { diff --git a/server/src/websocket/server.rs b/server/src/websocket/server.rs index 41bb1058..85de7eea 100644 --- a/server/src/websocket/server.rs +++ b/server/src/websocket/server.rs @@ -17,13 +17,7 @@ use crate::api::post::*; use crate::api::site::*; use crate::api::user::*; use crate::api::*; - -const RATE_LIMIT_MESSAGE: i32 = 30; -const RATE_LIMIT_MESSAGES_PER_SECOND: i32 = 60; -const RATE_LIMIT_POST: i32 = 3; -const RATE_LIMIT_POSTS_PER_SECOND: i32 = 60 * 10; -const RATE_LIMIT_REGISTER: i32 = 1; -const RATE_LIMIT_REGISTER_PER_SECOND: i32 = 60 * 60; +use crate::Settings; /// Chat server sends this messages to session #[derive(Message)] @@ -163,15 +157,27 @@ impl ChatServer { } fn check_rate_limit_register(&mut self, id: usize) -> Result<(), Error> { - self.check_rate_limit_full(id, RATE_LIMIT_REGISTER, RATE_LIMIT_REGISTER_PER_SECOND) + self.check_rate_limit_full( + id, + Settings::get().rate_limit_register, + Settings::get().rate_limit_register_per_second, + ) } fn check_rate_limit_post(&mut self, id: usize) -> Result<(), Error> { - self.check_rate_limit_full(id, RATE_LIMIT_POST, RATE_LIMIT_POSTS_PER_SECOND) + self.check_rate_limit_full( + id, + Settings::get().rate_limit_post, + Settings::get().rate_limit_post_per_second, + ) } fn check_rate_limit_message(&mut self, id: usize) -> Result<(), Error> { - self.check_rate_limit_full(id, RATE_LIMIT_MESSAGE, RATE_LIMIT_MESSAGES_PER_SECOND) + self.check_rate_limit_full( + id, + Settings::get().rate_limit_message, + Settings::get().rate_limit_message_per_second, + ) } fn check_rate_limit_full(&mut self, id: usize, rate: i32, per: i32) -> Result<(), Error> { |