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
This commit is contained in:
shockrah 2020-11-17 22:30:58 -08:00
parent 56041c1da5
commit 5d8ecdfdb7

View File

@ -4,13 +4,16 @@ use hyper::{Response, Body};
use hyper::StatusCode; use hyper::StatusCode;
use mysql_async::Pool; use mysql_async::Pool;
use mysql_async::error::Error as SqlError;
use mysql_async::prelude::Queryable;
use serde_json::Value; use serde_json::Value;
use crate::perms::ADMIN_PERMS; use crate::perms::ADMIN_PERMS;
use db::{
self,
member::Member
};
macro_rules! get_target_id { macro_rules! get_target_id {
($obj:expr) => { ($obj:expr) => {
match $obj.get("target-id") { 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<Body>, params: Value) { pub async fn new_admin(p: &Pool, response: &mut Response<Body>, params: Value) {
// @requires: owner level permission as regular admins can have conflict of interests // @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) { 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 { else {
// this is likely the users fault providing shit ass json // this is likely the users fault providing shit ass json
@ -46,32 +40,21 @@ pub async fn new_admin(p: &Pool, response: &mut Response<Body>, 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<Body>, params: Value) { pub async fn set_permissions(p: &Pool, response: &mut Response<Body>, params: Value) {
// @requiresL: admin level permissions, admins can't touch other admins // @requiresL: admin level permissions, admins can't touch other admins
let tuid = get_target_id!(params); 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(), Some(val) => val.as_u64(),
None => None None => None
}; };
match (tuid, new_perms) { match (tuid, new_perms_opt) {
(Some(uid), Some(perms)) => { (Some(uid), Some(new_perms)) => {
if let Ok(_) = update_member_permissions(p, uid, perms).await { // 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
} }
}, },
_ => { _ => {