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:
parent
56041c1da5
commit
5d8ecdfdb7
@ -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
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
|
Loading…
Reference in New Issue
Block a user