diff --git a/src/instance.rs b/src/instance.rs index 238b778..8ede575 100644 --- a/src/instance.rs +++ b/src/instance.rs @@ -1,9 +1,12 @@ +use regex::Regex; + use crate::api::schemas::schemas::InstancePoliciesSchema; use crate::gateway::Gateway; use crate::limit::LimitedRequester; use crate::URLBundle; use std::collections::HashMap; +use std::fmt; #[derive(Debug)] /** @@ -15,8 +18,46 @@ pub struct Instance { instance_info: InstancePoliciesSchema, requester: LimitedRequester, gateway: Gateway, + users: HashMap, } impl Instance { pub fn new() {} } + +#[derive(Debug, PartialEq, Eq)] +pub struct Token { + pub token: String, +} + +impl Token { + pub fn new(token: String) -> Result { + let token_regex = Regex::new(r"/[\w-]{24}\.[\w-]{6}\.[\w-]{27}/").unwrap(); + let mfa_token_regex = Regex::new(r"/mfa\.[\w-]{84}/").unwrap(); + if !token_regex.is_match(&token.as_str()) && !mfa_token_regex.is_match(&token.as_str()) { + return Err(TokenFormatError { + message: "This does not seem to be a valid token.".to_string(), + }); + } + Ok(Token { token }) + } +} + +#[derive(Debug, PartialEq, Eq)] +pub struct TokenFormatError { + pub message: String, +} + +impl TokenFormatError { + fn new(message: String) -> Self { + TokenFormatError { message } + } +} + +impl fmt::Display for TokenFormatError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.message) + } +} + +impl std::error::Error for TokenFormatError {}