diff options
author | Tyler Murphy <tylermurphy534@gmail.com> | 2023-01-26 17:29:16 -0500 |
---|---|---|
committer | Tyler Murphy <tylermurphy534@gmail.com> | 2023-01-26 17:29:16 -0500 |
commit | 88209d88236c3d865a9f5174a0dced31920859bf (patch) | |
tree | 89a9985927393005cf632950b585a6a227b1c679 /src/types/session.rs | |
download | xssbook-88209d88236c3d865a9f5174a0dced31920859bf.tar.gz xssbook-88209d88236c3d865a9f5174a0dced31920859bf.tar.bz2 xssbook-88209d88236c3d865a9f5174a0dced31920859bf.zip |
i did things
Diffstat (limited to 'src/types/session.rs')
-rw-r--r-- | src/types/session.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/types/session.rs b/src/types/session.rs new file mode 100644 index 0000000..8064fb1 --- /dev/null +++ b/src/types/session.rs @@ -0,0 +1,38 @@ +use rand::{distributions::Alphanumeric, Rng}; +use serde::Serialize; + +use crate::database; +use crate::types::response::{Result, ResponseCode}; + +#[derive(Serialize)] +pub struct Session { + pub user_id: u64, + pub token: String +} + +impl Session { + + pub fn from_token(token: &str) -> Result<Self> { + let Ok(Some(session)) = database::sessions::get_session(token) else { + return Err(ResponseCode::BadRequest.msg("Invalid auth token")); + }; + + Ok(session) + } + + pub fn new(user_id: u64) -> Result<Self> { + let token: String = rand::thread_rng().sample_iter(&Alphanumeric).take(32).map(char::from).collect(); + match database::sessions::set_session(user_id, &token) { + Err(_) => return Err(ResponseCode::BadRequest.msg("Failed to create session")), + Ok(_) => return Ok(Session {user_id, token}) + }; + } + + pub fn delete(user_id: u64) -> Result<()> { + if let Err(_) = database::sessions::delete_session(user_id) { + return Err(ResponseCode::InternalServerError.msg("Failed to logout")); + }; + Ok(()) + } + +}
\ No newline at end of file |