From 5d8ecdfdb72be4cd7d103ce9859146aa95814358 Mon Sep 17 00:00:00 2001 From: shockrah Date: Tue, 17 Nov 2020 22:30:58 -0800 Subject: [PATCH] userland::admin.rs: now uses db-lib to update permissions Also removed a ton of code in general $ makes it much easier to read/debug --- server-api/src/admin.rs | 49 ++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/server-api/src/admin.rs b/server-api/src/admin.rs index ca64cd1..cf2ab9d 100644 --- a/server-api/src/admin.rs +++ b/server-api/src/admin.rs @@ -4,13 +4,16 @@ use hyper::{Response, Body}; use hyper::StatusCode; use mysql_async::Pool; -use mysql_async::error::Error as SqlError; -use mysql_async::prelude::Queryable; use serde_json::Value; use crate::perms::ADMIN_PERMS; +use db::{ + self, + member::Member +}; + macro_rules! get_target_id { ($obj:expr) => { match $obj.get("target-id") { @@ -20,24 +23,15 @@ macro_rules! get_target_id { } } -async fn modify_perms(p: &Pool, uid: u64, new_perms: u64) -> Result<(), SqlError>{ - use mysql_async::params; - let conn = p.get_conn().await?; - conn.prep_exec( - "UPDATE members SET permissions = :perms WHERE id = :id", - params!{ - "id" => uid, - "perms" => new_perms - }).await?; - - Ok(()) -} - pub async fn new_admin(p: &Pool, response: &mut Response, params: Value) { // @requires: owner level permission as regular admins can have conflict of interests + // @user-param: "target-id": Number if let Some(uid) = get_target_id!(params) { - let _ = modify_perms(p, uid, ADMIN_PERMS).await; + + if let Err(e) = Member::update_perms(p, uid, ADMIN_PERMS).await { + eprintln!("{}", e); + } } else { // this is likely the users fault providing shit ass json @@ -46,32 +40,21 @@ pub async fn new_admin(p: &Pool, response: &mut Response, params: Value) { } } -async fn update_member_permissions(p: &Pool, uid: u64, perms: u64) -> Result<(), SqlError>{ - use mysql_async::params; - let conn = p.get_conn().await?; - conn.prep_exec( - "UPDATE members permissions = :perms WHERE id = :id", - params!{ - "id" => uid, - "perms" => perms - } - ).await?; - - Ok(()) -} pub async fn set_permissions(p: &Pool, response: &mut Response, params: Value) { // @requiresL: admin level permissions, admins can't touch other admins let tuid = get_target_id!(params); - let new_perms = match params.get("permissions") { + let new_perms_opt = match params.get("permissions") { Some(val) => val.as_u64(), None => None }; - match (tuid, new_perms) { - (Some(uid), Some(perms)) => { - if let Ok(_) = update_member_permissions(p, uid, perms).await { + match (tuid, new_perms_opt) { + (Some(uid), Some(new_perms)) => { + // Returns Ok(Response::sucess) | Err(log) + if let Err(e) = Member::update_perms(p, uid, new_perms).await { + eprintln!("{}", e); // wil be some sql error } }, _ => {