Merge pull request #5 from polyphony-chat/feature/register-login
Update main
This commit is contained in:
commit
44e3cef58a
|
@ -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 {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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> {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
35
src/limit.rs
35
src/limit.rs
|
@ -100,19 +100,38 @@ 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> = [
|
||||||
|
&LimitType::Error,
|
||||||
|
&LimitType::Global,
|
||||||
|
&LimitType::Ip,
|
||||||
|
&limit_type,
|
||||||
|
]
|
||||||
|
.to_vec();
|
||||||
|
for limit in constant_limits.iter() {
|
||||||
|
match limits.get(&limit) {
|
||||||
Some(limit) => {
|
Some(limit) => {
|
||||||
if limit.remaining > 0 {
|
if limit.remaining == 0 {
|
||||||
true
|
return false;
|
||||||
} else {
|
}
|
||||||
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 => false,
|
None => return false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
fn update_limits(&mut self, response: &Response, limit_type: LimitType) {
|
fn update_limits(&mut self, response: &Response, limit_type: LimitType) {
|
||||||
let remaining = match response.headers().get("X-RateLimit-Remaining") {
|
let remaining = match response.headers().get("X-RateLimit-Remaining") {
|
||||||
|
|
Loading…
Reference in New Issue