diff --git a/json-api/src/admin.rs b/json-api/src/admin.rs index cf2ab9d..59b0459 100644 --- a/json-api/src/admin.rs +++ b/json-api/src/admin.rs @@ -5,7 +5,7 @@ use hyper::StatusCode; use mysql_async::Pool; -use serde_json::Value; +use std::collections::HashMap; use crate::perms::ADMIN_PERMS; @@ -14,21 +14,17 @@ use db::{ member::Member }; -macro_rules! get_target_id { - ($obj:expr) => { - match $obj.get("target-id") { - Some(val) => val.as_u64(), - None => None - } - } -} +use crate::qs_param; -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) { +pub async fn new_admin(p: &Pool, response: &mut Response, params: HashMap<&str, &str>) { + /* + * @requires: owner level permission as regular admins can have conflict of interests + * @user param: "target-id": Number + */ + let uid = qs_param!(params, "target-id", u64); + if let Some(uid) = uid { if let Err(e) = Member::update_perms(p, uid, ADMIN_PERMS).await { eprintln!("{}", e); } @@ -41,16 +37,13 @@ pub async fn new_admin(p: &Pool, response: &mut Response, params: Value) { } -pub async fn set_permissions(p: &Pool, response: &mut Response, params: Value) { +pub async fn set_permissions(p: &Pool, response: &mut Response, params: HashMap<&str, &str>) { // @requiresL: admin level permissions, admins can't touch other admins - let tuid = get_target_id!(params); + let target_uid = qs_param!(params, "id", u64); - let new_perms_opt = match params.get("permissions") { - Some(val) => val.as_u64(), - None => None - }; + let new_perms_opt = qs_param!(params, "permissions", u64); - match (tuid, new_perms_opt) { + match (target_uid, 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 {