First pass of using hashmaps in /invite/create handler
+ Adding allowed_perm_invite, a helper function pulling permissions form the database to check if the user can make invites
This commit is contained in:
		
							parent
							
								
									45af62ceb3
								
							
						
					
					
						commit
						98803eec26
					
				@ -10,6 +10,8 @@ use hyper::{Response, Body, StatusCode};
 | 
			
		||||
 | 
			
		||||
use chrono::Utc;
 | 
			
		||||
 | 
			
		||||
use std::collections::HashMap;
 | 
			
		||||
 | 
			
		||||
use db::{UBigInt, BigInt};
 | 
			
		||||
use db::common::FromDB;
 | 
			
		||||
use db::member::Member;
 | 
			
		||||
@ -148,35 +150,62 @@ async fn process_expires_parameter(p: &Pool, exp: &Value, id: UBigInt) -> bool {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub async fn create(pool: &Pool, response: &mut Response<Body>, params: Value) {
 | 
			
		||||
async fn allowed_perm_invite(pool: &Pool, uid: u64) -> bool {
 | 
			
		||||
    use crate::perms;
 | 
			
		||||
 | 
			
		||||
    return match db::member::Member::get(pool, uid).await {
 | 
			
		||||
        db::Response::Row(user) => perms::has_perm(user.permissions, perms::CREATE_PERM_INVITES),
 | 
			
		||||
        _ => false
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
pub async fn create(pool: &Pool, response: &mut Response<Body>, params: HashMap<&str, &str>) {
 | 
			
		||||
    /*
 | 
			
		||||
     * Creates a new invite
 | 
			
		||||
     * Parameters required asked of the user to provide
 | 
			
		||||
     * uses : Option<i64>
 | 
			
		||||
     * expires: Option<bool>
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    // no user can actually have an id of 0 this won't find anyone on the backend
 | 
			
		||||
    let id = match params.get("id") {
 | 
			
		||||
        Some(val) => val.as_u64().unwrap_or(0),
 | 
			
		||||
        None => 0
 | 
			
		||||
    };
 | 
			
		||||
    let id = crate::http::extract_uid(¶ms);
 | 
			
		||||
 | 
			
		||||
    let use_count = match params.get("uses")  {
 | 
			
		||||
        Some(val) => val.as_i64(),
 | 
			
		||||
        Some(val) => {
 | 
			
		||||
            match (*val).to_string().parse::<i64>() {
 | 
			
		||||
                Ok(count) => Some(count),
 | 
			
		||||
                Err(_) => None
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        None => None
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    let expires = match params.get("expires") {
 | 
			
		||||
        Some(exp_val) => process_expires_parameter(pool, exp_val, id).await,
 | 
			
		||||
    let expirey_request = match params.get("expires") {
 | 
			
		||||
        Some(exp_val) => {
 | 
			
		||||
            match exp_val.to_string().parse::<bool>() {
 | 
			
		||||
                Ok(exp) => {
 | 
			
		||||
                    match exp {
 | 
			
		||||
                        true => allowed_perm_invite(pool, id).await,
 | 
			
		||||
                        false => false
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                _ => false
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        None => true
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // TODO: prolly add some kind option to set an expire time
 | 
			
		||||
    let invite = Invite {
 | 
			
		||||
        id: (Utc::now() + chrono::Duration::minutes(30)).timestamp(),
 | 
			
		||||
        uses: use_count,
 | 
			
		||||
        expires: expires
 | 
			
		||||
        expires: expirey_request
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    match insert_new_invite(&pool, &invite).await {
 | 
			
		||||
        Ok(_) => {},
 | 
			
		||||
        Ok(_) => {
 | 
			
		||||
            // return the id of the invite
 | 
			
		||||
            // Link format from here is basically hostname.io:4536/join/<id>
 | 
			
		||||
            crate::http::set_json_body(response, serde_json::json!(invite))
 | 
			
		||||
        },
 | 
			
		||||
        Err(mysqle) => {
 | 
			
		||||
            println!("\tINVITES::CREATE::ERROR: {}", mysqle);
 | 
			
		||||
            *response.status_mut() = StatusCode::BAD_REQUEST;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user