better authentication (why was this a macro)

This commit is contained in:
Reid 2023-09-23 19:11:07 -07:00
parent 790a3f4776
commit 6e672d3d0e
Signed by: reidlab
GPG key ID: 6C9EAA3364F962C8
4 changed files with 48 additions and 42 deletions

View file

@ -42,3 +42,4 @@ i've run out of ideas.
- make a proper rank system (reuploading, uploading music, rating, etc.) - make a proper rank system (reuploading, uploading music, rating, etc.)
- user icons in the account management + settings (gdicon.oat.zone? selfhost?) - user icons in the account management + settings (gdicon.oat.zone? selfhost?)
- account settings page - account settings page
- better web design

View file

@ -1,19 +1,18 @@
macro_rules! auth { use rocket::http::CookieJar;
($cookies: expr) => {
match $cookies.get_private("blackmail_data") { pub fn authenticate(cookies: &CookieJar<'_>) -> Result<(String, i32, i32), &'static str> {
Some(cookie_val) => { match cookies.get_private("blackmail_data") {
let parts = cookie_val.value().split(":").collect::<Vec<&str>>(); Some(cookie) => {
let parts = cookie.value().split(":").collect::<Vec<&str>>();
let username = parts[0].to_string(); let username = parts[0].to_string();
let account_id = parts[1].parse::<i32>().expect("account id is not an integer! this should NOT happen!"); let account_id = parts[1].parse::<i32>().expect("account id is not an integer! this should NOT happen!");
let user_id = parts[2].parse::<i32>().expect("user id is not an integer! this should NOT happen!"); let user_id = parts[2].parse::<i32>().expect("user id is not an integer! this should NOT happen!");
(true, Some(username), Some(account_id), Some(user_id)) return Ok((username, account_id, user_id))
} }
None => { None => {
(false, None, None, None) return Err("authentication failed")
} }
} }
} }
}
pub(crate) use auth;

View file

@ -12,26 +12,29 @@ use crate::db;
pub fn account_management(cookies: &CookieJar<'_>) -> Result<Template, Redirect> { pub fn account_management(cookies: &CookieJar<'_>) -> Result<Template, Redirect> {
let connection = &mut db::establish_connection_pg(); let connection = &mut db::establish_connection_pg();
let (logged_in, username_val, _account_id_val, user_id_val) = crate::helpers::templates::auth!(cookies); let logged_in = crate::helpers::templates::authenticate(cookies);
if logged_in { match logged_in {
Ok((username_val, account_id_val, user_id_val)) => {
use crate::schema::users::dsl::*; use crate::schema::users::dsl::*;
use crate::models::User; use crate::models::User;
let result = users let result = users
.filter(id.eq(user_id_val.expect("user_id not found"))) .filter(id.eq(user_id_val))
.get_result::<User, >(connection) .get_result::<User, >(connection)
.expect("couldnt find user with user id from account"); .expect("couldnt find user with user id from account");
return Ok(Template::render("account_management", context! { return Ok(Template::render("account_management", context! {
username: username_val.expect("username not found"), username: username_val,
stars: result.stars, stars: result.stars,
diamonds: result.diamonds, diamonds: result.diamonds,
coins: result.coins, coins: result.coins,
user_coins: result.user_coins, user_coins: result.user_coins,
demons: result.demons demons: result.demons
})); }));
} else { },
Err(_) => {
return Err(Redirect::to("/login")); return Err(Redirect::to("/login"));
} }
} }
}

View file

@ -65,11 +65,14 @@ pub fn post_login(cookies: &CookieJar<'_>, input: Form<FormLogin>) -> Template {
#[get("/login")] #[get("/login")]
pub fn get_login(cookies: &CookieJar<'_>) -> Result<Redirect, Template> { pub fn get_login(cookies: &CookieJar<'_>) -> Result<Redirect, Template> {
let (logged_in, _username, _account_id, _user_id) = crate::helpers::templates::auth!(cookies); let logged_in = crate::helpers::templates::authenticate(cookies);
if logged_in { match logged_in {
Ok(Redirect::to("/")) Ok(_) => {
} else { return Ok(Redirect::to("/"))
},
Err(_) => {
Err(Template::render("login", context! { })) Err(Template::render("login", context! { }))
} }
} }
}