Merge pull request #5 from polyphony-chat/feature/register-login

Update main
This commit is contained in:
Flori 2023-04-21 14:35:54 +02:00 committed by GitHub
commit 8d7cd18d51
5 changed files with 69 additions and 17 deletions

View File

@ -1,7 +1,38 @@
pub mod register { pub mod register {
use crate::instance::Instance; use std::fmt;
use reqwest::Client;
use serde_json::json;
use crate::{api::schemas::schemas::RegisterSchema, instance::Instance};
impl Instance { impl Instance {
pub fn register() {} 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().to_string() + "/auth/register";
let request_builder = client.post(endpoint_url).body(json_schema.to_string());
// TODO
}
} }
#[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 {}
} }

View File

@ -25,9 +25,11 @@ pub mod instance {
impl std::error::Error for InstancePoliciesError {} impl std::error::Error for InstancePoliciesError {}
impl Instance { impl Instance {
/// Gets the instance policies schema. /**
/// # Errors Gets the instance policies schema.
/// * [`InstancePoliciesError`] - If the request fails. # Errors
[`InstancePoliciesError`] - If the request fails.
*/
pub async fn instance_policies_schema( pub async fn instance_policies_schema(
&self, &self,
) -> Result<InstancePoliciesSchema, InstancePoliciesError> { ) -> Result<InstancePoliciesSchema, InstancePoliciesError> {

0
src/errors.rs Normal file
View File

View File

@ -18,7 +18,7 @@ pub struct Instance {
pub instance_info: InstancePoliciesSchema, pub instance_info: InstancePoliciesSchema,
pub requester: LimitedRequester, pub requester: LimitedRequester,
//pub gateway: Gateway, //pub gateway: Gateway,
//pub users: HashMap<Token, Username>, pub users: HashMap<Token, Username>,
} }
impl Instance { impl Instance {
@ -32,6 +32,7 @@ impl Instance {
urls: URLBundle, urls: URLBundle,
requester: LimitedRequester, requester: LimitedRequester,
) -> Result<Instance, InstanceError> { ) -> Result<Instance, InstanceError> {
let users: HashMap<Token, Username> = HashMap::new();
let mut instance = Instance { let mut instance = Instance {
urls, urls,
instance_info: InstancePoliciesSchema::new( instance_info: InstancePoliciesSchema::new(
@ -46,8 +47,7 @@ impl Instance {
None, None,
), ),
requester, requester,
//gateway: (), users,
//users: (),
}; };
instance.instance_info = match instance.instance_policies_schema().await { instance.instance_info = match instance.instance_policies_schema().await {
Ok(schema) => schema, Ok(schema) => schema,

View File

@ -100,18 +100,37 @@ impl LimitedRequester {
} }
fn can_send_request(&mut self, limit_type: LimitType) -> bool { fn can_send_request(&mut self, limit_type: LimitType) -> bool {
let limits = self.limits_rate.get(&limit_type); let limits = &self.limits_rate.clone();
// Check if all of the limits in this vec have at least one remaining request
match limits { let constant_limits: Vec<&LimitType> = [
Some(limit) => { &LimitType::Error,
if limit.remaining > 0 { &LimitType::Global,
true &LimitType::Ip,
} else { &limit_type,
false ]
.to_vec();
for limit in constant_limits.iter() {
match limits.get(&limit) {
Some(limit) => {
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,
} }
None => false,
} }
return true;
} }
fn update_limits(&mut self, response: &Response, limit_type: LimitType) { fn update_limits(&mut self, response: &Response, limit_type: LimitType) {