diff --git a/server-api/src/auth.rs b/server-api/src/auth.rs index 8a11c6a..31ca816 100644 --- a/server-api/src/auth.rs +++ b/server-api/src/auth.rs @@ -9,7 +9,6 @@ use db::{member::Member, common::FromDB}; use db::Response; // used when we create a new users for the first time -pub const BCRYPT_COST: u32 = 14; pub enum AuthReason { Good, //passed regular check OpenAuth, // route does not require auth diff --git a/server-api/src/channels.rs b/server-api/src/channels.rs index 1ec69c2..f72d536 100644 --- a/server-api/src/channels.rs +++ b/server-api/src/channels.rs @@ -58,7 +58,8 @@ pub async fn create_channel(pool: &Pool, response: &mut Response, params: *response.body_mut() = Body::from(to_string(&row).unwrap_or("{}".into())); }, db::Response::Empty => *response.status_mut() = StatusCode::NOT_FOUND, - db::Response::Other(msg) => *response.status_mut() = StatusCode::INTERNAL_SERVER_ERROR, + // TODO: loggin + db::Response::Other(_msg) => *response.status_mut() = StatusCode::INTERNAL_SERVER_ERROR, _ => *response.status_mut() = StatusCode::INTERNAL_SERVER_ERROR } }, diff --git a/server-api/src/members.rs b/server-api/src/members.rs index 702a7c0..c875c86 100644 --- a/server-api/src/members.rs +++ b/server-api/src/members.rs @@ -1,65 +1,9 @@ -use chrono::Utc; use hyper::{Response, Body, StatusCode}; use hyper::header::HeaderValue; -use mysql_async::{Conn, Pool, error::Error as SqlError}; -use mysql_async::prelude::{params, Queryable}; -use serde::Serialize; +use mysql_async::Pool; -use db::{UBigInt, BigInt, Integer, VarChar}; use db::member::STATUS_ONLINE; use db::common::FromDB; -use crate::auth; - -#[derive(Serialize)] -pub struct Member { - pub id: UBigInt, - pub secret: VarChar, - pub name: VarChar, - pub joindate: BigInt, - pub status: Integer, - pub permissions: UBigInt, -} - - -pub async fn insert_new_member(p: &Pool, name: VarChar, perms: u64) -> Result { - use crate::auth::generate_secret; - - let conn: Conn = p.get_conn().await?; - let secret_raw: String = generate_secret(); - let secret = match bcrypt::hash(&secret_raw, auth::BCRYPT_COST) { - Ok(value) => value, - Err(e) => panic!("\tCould not insert member due to bcrypt failure:\n\t\t{}",e) - }; - let now: BigInt = Utc::now().timestamp(); - - let conn = conn.drop_exec( - "INSERT INTO members(secret, name, joindate, status, permissions) - VALUES(:secret, :name, :joindate, :status, :permissions)", - mysql_async::params!{ - "secret" => secret.clone(), - "name" => name.clone(), - "joindate" => now, - "status" => STATUS_ONLINE, - "permissions" => perms - }).await?; - - // now pull back the user from our db and return that row - let db_row_result: (Conn, Option) = conn.first_exec( - "SELECT id FROM members WHERE secret = :secret", - params!{ - "secret" => secret.clone() - }).await?; - - Ok(Member { - id: db_row_result.1.unwrap(), // if we made it this far this shouldn't fail (i hope) - secret: secret_raw, - name: name, - joindate: now, - status: 0, - permissions: perms - }) -} - pub async fn get_online_members(p: &Pool, response: &mut Response) { // TODO: at some point we should provide a way of not querying literally every user in diff --git a/server-api/src/messages.rs b/server-api/src/messages.rs index a34de4e..55410d6 100644 --- a/server-api/src/messages.rs +++ b/server-api/src/messages.rs @@ -1,13 +1,6 @@ -use std::borrow::Cow; - -use mysql_async::{Pool, params}; -use mysql_async::prelude::{Queryable}; -use mysql_async::error::Error; +use mysql_async::Pool; use hyper::{Response, Body, StatusCode}; use serde_json::Value; -use chrono::Utc; - -use db::UBigInt; pub async fn send_message(pool: &Pool, response: &mut Response, params: Value) { @@ -25,7 +18,8 @@ pub async fn send_message(pool: &Pool, response: &mut Response, params: Va if let (Some(message), Some(cid)) = (content, channel) { // call returns empty on sucess so we don't need to do anything - if let Err(issue) = db::messages::Message::send(pool, message, cid, author).await { + // TODO: loggin + if let Err(_issue) = db::messages::Message::send(pool, message, cid, author).await { *response.status_mut() = StatusCode::INTERNAL_SERVER_ERROR; // log(send) } @@ -66,46 +60,5 @@ mod messaging_tests { assert_ne!(StatusCode::OK, resp.status()); } - #[tokio::test]#[ignore] - async fn send_message_good() { - use crate::members::insert_new_member; - use crate::perms::GENERAL_NEW; - use mysql_async::params; - use mysql_async::prelude::Queryable; - use crate::testing::tmp_channel_params; - - let p = get_pool(); - let mut resp = hyper_resp(); - - let tmp_chan = tmp_channel_params(&p, "sample").await; - - const TMP_NAME: &'static str = "bs user"; - let temp_member = insert_new_member(&p, TMP_NAME.into(), GENERAL_NEW).await.unwrap(); - - - let params: Value = serde_json::from_str(&format!(r#" - {{ - "id": {}, - "channel": "{}", - "content": "bs message" - }} - "#, temp_member.id, tmp_chan.name)).unwrap(); - - super::send_message(&p, &mut resp, params).await; - - if resp.status() == StatusCode::BAD_REQUEST { - panic!("{:?}", resp.body()); - } - - // Destroy the the message and the user that we created - let conn = match p.get_conn().await { - Ok(c) => c, - Err(e) => panic!("Could not get connection to db during send_message_good:\nIssue:\t{}", e) - }; - - let conn = conn.drop_exec("DELETE FROM messages WHERE author_id = :id", params!{"id" => temp_member.id}).await.unwrap(); - let conn = conn.drop_exec("DELETE FROM members WHERE id = :id", params!{"id" => temp_member.id}).await.unwrap(); - let _ = conn.drop_exec("DELETE FROM channels WHERE name = :name", params!{"name" => tmp_chan.name}).await; - } }