diff options
author | Ilion Beyst <ilion.beyst@gmail.com> | 2021-12-30 11:45:59 +0100 |
---|---|---|
committer | Ilion Beyst <ilion.beyst@gmail.com> | 2021-12-30 11:45:59 +0100 |
commit | 3edf5d60f54bfd0cd2c818e5fb1ca133e324325d (patch) | |
tree | 9b8bd057e3e27c9e2488957f02ffc8de4ed4c438 /planetwars-server/src/db/sessions.rs | |
parent | 71ee6c99e963d96286cae8d0bfc2f20a9c9c920b (diff) | |
download | planetwars.dev-3edf5d60f54bfd0cd2c818e5fb1ca133e324325d.tar.xz planetwars.dev-3edf5d60f54bfd0cd2c818e5fb1ca133e324325d.zip |
rename to planetwars-server
Diffstat (limited to 'planetwars-server/src/db/sessions.rs')
-rw-r--r-- | planetwars-server/src/db/sessions.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/planetwars-server/src/db/sessions.rs b/planetwars-server/src/db/sessions.rs new file mode 100644 index 0000000..96f3926 --- /dev/null +++ b/planetwars-server/src/db/sessions.rs @@ -0,0 +1,46 @@ +use super::users::User; +use crate::schema::{sessions, users}; +use base64; +use diesel::PgConnection; +use diesel::{insert_into, prelude::*, Insertable, RunQueryDsl}; +use rand::{self, Rng}; + +#[derive(Insertable)] +#[table_name = "sessions"] +struct NewSession { + token: String, + user_id: i32, +} + +#[derive(Queryable, Debug, PartialEq)] +pub struct Session { + pub id: i32, + pub user_id: i32, + pub token: String, +} + +pub fn create_session(user: &User, conn: &PgConnection) -> Session { + let new_session = NewSession { + token: gen_session_token(), + user_id: user.id, + }; + let session = insert_into(sessions::table) + .values(&new_session) + .get_result::<Session>(conn) + .unwrap(); + + return session; +} + +pub fn find_user_by_session(token: &str, conn: &PgConnection) -> QueryResult<(Session, User)> { + sessions::table + .inner_join(users::table) + .filter(sessions::token.eq(&token)) + .first::<(Session, User)>(conn) +} + +pub fn gen_session_token() -> String { + let mut rng = rand::thread_rng(); + let token: [u8; 32] = rng.gen(); + return base64::encode(&token); +} |