From 8666aa34e578c6cc57d3336221e05271cbb347bb Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Wed, 19 Apr 2023 23:32:02 +0200 Subject: [PATCH 1/8] add users hashmap --- src/instance.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/instance.rs b/src/instance.rs index f76edf8..db1502d 100644 --- a/src/instance.rs +++ b/src/instance.rs @@ -18,7 +18,7 @@ pub struct Instance { pub instance_info: InstancePoliciesSchema, pub requester: LimitedRequester, //pub gateway: Gateway, - //pub users: HashMap, + pub users: HashMap, } impl Instance { @@ -32,6 +32,7 @@ impl Instance { urls: URLBundle, requester: LimitedRequester, ) -> Result { + let users: HashMap = HashMap::new(); let mut instance = Instance { urls, instance_info: InstancePoliciesSchema::new( @@ -46,8 +47,7 @@ impl Instance { None, ), requester, - //gateway: (), - //users: (), + users, }; instance.instance_info = match instance.instance_policies_schema().await { Ok(schema) => schema, From 27c111fd99093fc030bd69df78ec2f50b4c68a38 Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Thu, 20 Apr 2023 00:14:11 +0200 Subject: [PATCH 2/8] begin working on register --- src/api/auth/register.rs | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/api/auth/register.rs b/src/api/auth/register.rs index f515703..d2a9f33 100644 --- a/src/api/auth/register.rs +++ b/src/api/auth/register.rs @@ -1,7 +1,34 @@ pub mod register { - use crate::instance::Instance; + use std::fmt; + + use reqwest::Client; + + use crate::{api::schemas::schemas::RegisterSchema, instance::Instance}; impl Instance { - pub fn register() {} + pub fn register(&mut self, register_schema: &RegisterSchema) { + let limited_requester = &self.requester; + let client = Client::new(); + let endpoint_url = &self.urls.get_api() + "/" + } } + + #[derive(Debug, PartialEq, Eq)] + pub struct RegisterError { + pub message: String, + } + + impl RegisterError { + fn new(message: String) -> Self { + RegisterError { message } + } + } + + impl fmt::Display for RegisterError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.message) + } + } + + impl std::error::Error for RegisterError {} } From e43b3934e4f9aaafd9ee1dfa643f252b9f02907d Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Thu, 20 Apr 2023 19:47:08 +0200 Subject: [PATCH 3/8] Improve limit check --- src/limit.rs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/limit.rs b/src/limit.rs index 9e16375..5b007b9 100644 --- a/src/limit.rs +++ b/src/limit.rs @@ -100,18 +100,26 @@ impl LimitedRequester { } fn can_send_request(&mut self, limit_type: LimitType) -> bool { - let limits = self.limits_rate.get(&limit_type); - - match limits { - Some(limit) => { - if limit.remaining > 0 { - true - } else { - false + let limits = &self.limits_rate; + // Check if all of the limits in this vec have at least one remaining request + let constant_limits: Vec<&LimitType> = [ + &LimitType::Error, + &LimitType::Global, + &LimitType::Ip, + &limit_type, + ] + .to_vec(); + for limit in constant_limits.iter() { + match limits.get(&limit) { + Some(limit) => { + if limit.remaining == 0 { + return false; + } } + None => return false, } - None => false, } + return true; } fn update_limits(&mut self, response: &Response, limit_type: LimitType) { From 897df7adce1d66054e39d03f12193f76e0e01355 Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Thu, 20 Apr 2023 19:47:20 +0200 Subject: [PATCH 4/8] Change comment --- src/api/policies/instance/instance.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/api/policies/instance/instance.rs b/src/api/policies/instance/instance.rs index 6ed8b05..f14af23 100644 --- a/src/api/policies/instance/instance.rs +++ b/src/api/policies/instance/instance.rs @@ -25,9 +25,11 @@ pub mod instance { impl std::error::Error for InstancePoliciesError {} impl Instance { - /// Gets the instance policies schema. - /// # Errors - /// * [`InstancePoliciesError`] - If the request fails. + /** + Gets the instance policies schema. + # Errors + [`InstancePoliciesError`] - If the request fails. + */ pub async fn instance_policies_schema( &self, ) -> Result { From 4f745c958cc70bace7c2859bf78e5c9ef8ded76d Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Thu, 20 Apr 2023 20:11:12 +0200 Subject: [PATCH 5/8] Have AuthRegister and AbsoluteRegister cancel each other out --- src/limit.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/limit.rs b/src/limit.rs index 5b007b9..b12069f 100644 --- a/src/limit.rs +++ b/src/limit.rs @@ -100,7 +100,7 @@ impl LimitedRequester { } fn can_send_request(&mut self, limit_type: LimitType) -> bool { - let limits = &self.limits_rate; + let limits = &self.limits_rate.clone(); // Check if all of the limits in this vec have at least one remaining request let constant_limits: Vec<&LimitType> = [ &LimitType::Error, @@ -115,6 +115,17 @@ impl LimitedRequester { if limit.remaining == 0 { return false; } + // AbsoluteRegister and AuthRegister can cancel each other out. + if limit.bucket == LimitType::AbsoluteRegister + && limits.get(&LimitType::AuthRegister).unwrap().remaining == 0 + { + return false; + } + if limit.bucket == LimitType::AuthRegister + && limits.get(&LimitType::AbsoluteRegister).unwrap().remaining == 0 + { + return false; + } } None => return false, } From ff6874abcbb8f490af3e2f71ce5eaaad08a8d4e5 Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Fri, 21 Apr 2023 14:27:56 +0200 Subject: [PATCH 6/8] Fix bad build --- src/api/auth/register.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/api/auth/register.rs b/src/api/auth/register.rs index d2a9f33..26d1a6f 100644 --- a/src/api/auth/register.rs +++ b/src/api/auth/register.rs @@ -2,14 +2,17 @@ pub mod register { use std::fmt; use reqwest::Client; + use serde_json::json; use crate::{api::schemas::schemas::RegisterSchema, instance::Instance}; impl Instance { pub fn register(&mut self, register_schema: &RegisterSchema) { + let json_schema = json!(register_schema); let limited_requester = &self.requester; let client = Client::new(); - let endpoint_url = &self.urls.get_api() + "/" + let endpoint_url = self.urls.get_api().to_string() + "/auth/register"; + let request_builder = client.post(endpoint_url).body(json_schema.to_string()); } } From 950eba2ae72c0be314480a729d0b3f09b766ff37 Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Fri, 21 Apr 2023 14:30:03 +0200 Subject: [PATCH 7/8] Add TODO --- src/api/auth/register.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/api/auth/register.rs b/src/api/auth/register.rs index 26d1a6f..19bf426 100644 --- a/src/api/auth/register.rs +++ b/src/api/auth/register.rs @@ -13,6 +13,7 @@ pub mod register { let client = Client::new(); let endpoint_url = self.urls.get_api().to_string() + "/auth/register"; let request_builder = client.post(endpoint_url).body(json_schema.to_string()); + // TODO } } From fff71f0529196251f1f46b3fa372c1919db56352 Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Fri, 21 Apr 2023 14:30:10 +0200 Subject: [PATCH 8/8] create errors.rs --- src/errors.rs | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/errors.rs diff --git a/src/errors.rs b/src/errors.rs new file mode 100644 index 0000000..e69de29