From 000a75c81f5dd5cf4a3a5381acba07ed187f5099 Mon Sep 17 00:00:00 2001 From: shockrah Date: Thu, 30 Jul 2020 23:50:03 -0700 Subject: [PATCH 1/7] user name+id now added to params and channels table now accepts channel_name --- .../migrations/2020-07-06-022319_messages/up.sql | 2 +- server/src/auth.rs | 9 +++++++-- server/src/main.rs | 4 ++-- server/src/messages.rs | 15 +++------------ server/tests/verify_basic_cases.sh | 8 ++++++++ 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/server/migrations/2020-07-06-022319_messages/up.sql b/server/migrations/2020-07-06-022319_messages/up.sql index d97f62f..1674188 100644 --- a/server/migrations/2020-07-06-022319_messages/up.sql +++ b/server/migrations/2020-07-06-022319_messages/up.sql @@ -4,7 +4,7 @@ CREATE TABLE IF NOT EXISTS `messages`( `time` BIGINT NOT NULL, `content` VARCHAR(2048) NOT NULL, `author_id` BIGINT UNSIGNED NOT NULL, - `channel_id` BIGINT UNSIGNED NOT NULL, + `channel_name` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`author_id`) REFERENCES members(`id`), FOREIGN KEY (`channel_id`) REFERENCES channels(`id`) diff --git a/server/src/auth.rs b/server/src/auth.rs index 66180b7..f1d180f 100644 --- a/server/src/auth.rs +++ b/server/src/auth.rs @@ -14,7 +14,8 @@ pub enum AuthReason { fn open_route(path: &str) -> bool { return path == routes::INVITE_JOIN } -pub async fn wall_entry(path: &str, pool: &Pool, params: &serde_json::Value) -> Result { +pub async fn wall_entry(path: &str, pool: &Pool, params: &mut serde_json::Value) -> Result { + use serde_json::json; // Start by Checking if the api key is in our keystore if open_route(path) { Ok(AuthReason::OpenAuth) @@ -32,7 +33,11 @@ pub async fn wall_entry(path: &str, pool: &Pool, params: &serde_json::Value) -> match db_result { Ok((_, row)) => { match row{ - Some(_) => Ok(AuthReason::Good), + Some(user_row) => { + params["userid"] = json!(user_row.0); + params["username"] = json!(user_row.1); + Ok(AuthReason::Good) + }, None => Ok(AuthReason::NoKey) } } diff --git a/server/src/main.rs b/server/src/main.rs index 0430ff0..f4fa954 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -81,9 +81,9 @@ async fn main_responder(request: Request) -> Result, hyper: let params_res = http_params::parse_params(&mut body).await; - if let Ok(params) = params_res { + if let Ok(mut params) = params_res { let pool = Pool::new(&env::var("DATABASE_URL").unwrap()); - if let Ok(auth_result) = auth::wall_entry(path, &pool, ¶ms).await { + if let Ok(auth_result) = auth::wall_entry(path, &pool, &mut params).await { // Deal with permissions errors at this point match auth_result { OpenAuth | Good => route_dispatcher(&pool, &mut response, &method, path, params).await, diff --git a/server/src/messages.rs b/server/src/messages.rs index 943707a..8bba9fb 100644 --- a/server/src/messages.rs +++ b/server/src/messages.rs @@ -7,21 +7,12 @@ use hyper::{Response, Body, StatusCode}; use serde_json::Value; use chrono::Utc; -use crate::db_types::{UBigInt, VarChar}; +use crate::db_types::{UBigInt}; -struct Message { - id: UBigInt, - content: Option, // some messages later might only have file attachments and not text content - author_id: UBigInt, - channel_id: UBigInt, - permissions: UBigInt, -} - - -pub async fn insert_message_table(pool: &Pool, content: &Value, channel_id: &Value, author_id: UBigInt) +pub async fn insert_message_table(pool: &Pool, content: &Value, channel_name: &Value, author_id: UBigInt) -> Result<(), Error>{ - match (content.as_str(), channel_id.as_u64()) { + match (content.as_str(), channel_name.as_str()) { (Some(content), Some(channel)) => { let conn = pool.get_conn().await?; let time = Utc::now().timestamp(); diff --git a/server/tests/verify_basic_cases.sh b/server/tests/verify_basic_cases.sh index 94eee66..ed653ed 100644 --- a/server/tests/verify_basic_cases.sh +++ b/server/tests/verify_basic_cases.sh @@ -24,6 +24,14 @@ delete_channel() { log_result good_delete_channel 200 $code "$result" } +send_message() { + kv='{"secret":"secret", "content":"message sample", "channel":123}' + result=$($crl $POST $url/message/send -d "$kv") + code=$(echo "$result" | grep HTTP\/1.1 | awk '{print $2}') + # non-existant channel for now but whatever ignore for now + log_result good_send_message 200 $code "$result" +} + # Dispatcher to run our tests if [ -z $1 ];then for cmd in $active_tests;do From de4493c7ab9e484d51bdb514f8815e5b9b882b4b Mon Sep 17 00:00:00 2001 From: shockrah Date: Fri, 31 Jul 2020 00:08:49 -0700 Subject: [PATCH 2/7] setting ci, thisi commit will fail for now --- server/.gitlab-ci.yml | 13 +++++++++++++ server/tests/verify_basic_cases.sh | 4 ++++ 2 files changed, 17 insertions(+) create mode 100644 server/.gitlab-ci.yml diff --git a/server/.gitlab-ci.yml b/server/.gitlab-ci.yml new file mode 100644 index 0000000..298ffcd --- /dev/null +++ b/server/.gitlab-ci.yml @@ -0,0 +1,13 @@ +image: sseemayer/rust-musl-builder-mingw + +build-test: + stage: build + only: + - testing + script: + - cargo build --release + +curl: + - cargo run --release + - fc_id=$! + - bash ./tests/main.sh body diff --git a/server/tests/verify_basic_cases.sh b/server/tests/verify_basic_cases.sh index ed653ed..1eda5da 100644 --- a/server/tests/verify_basic_cases.sh +++ b/server/tests/verify_basic_cases.sh @@ -25,6 +25,10 @@ delete_channel() { } send_message() { + # creating a bs channel, we don't care about this operation + # as long as the other test passes this should be fine + $crl $POST $url/channel/create -d '{"secret":"secret","name":"msgchannel"}' + kv='{"secret":"secret", "content":"message sample", "channel":123}' result=$($crl $POST $url/message/send -d "$kv") code=$(echo "$result" | grep HTTP\/1.1 | awk '{print $2}') From fb2181aa39fdceeb0460d0031709b97bea1be18c Mon Sep 17 00:00:00 2001 From: shockrah Date: Fri, 31 Jul 2020 00:10:15 -0700 Subject: [PATCH 3/7] moving pipeline script to root --- server/.gitlab-ci.yml => .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) rename server/.gitlab-ci.yml => .gitlab-ci.yml (92%) diff --git a/server/.gitlab-ci.yml b/.gitlab-ci.yml similarity index 92% rename from server/.gitlab-ci.yml rename to .gitlab-ci.yml index 298ffcd..d629043 100644 --- a/server/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,6 +5,7 @@ build-test: only: - testing script: + - cd server/ - cargo build --release curl: From 9342f5a2ea75fed8bae0f1135cabb8c2aa39f696 Mon Sep 17 00:00:00 2001 From: shockrah Date: Fri, 31 Jul 2020 00:10:50 -0700 Subject: [PATCH 4/7] adding missing key --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d629043..713819f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,6 +9,7 @@ build-test: - cargo build --release curl: + stage: testing - cargo run --release - fc_id=$! - bash ./tests/main.sh body From ab981f68d0e6108e4c539694af206c832c90f854 Mon Sep 17 00:00:00 2001 From: shockrah Date: Fri, 31 Jul 2020 00:15:04 -0700 Subject: [PATCH 5/7] updated syntax --- .gitlab-ci.yml | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 713819f..e2f6a62 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,15 +1,19 @@ image: sseemayer/rust-musl-builder-mingw -build-test: - stage: build - only: - - testing - script: - - cd server/ - - cargo build --release +basic-build: + stage: build + only: + - testing + script: + - cd server/ + - cargo build --release -curl: - stage: testing - - cargo run --release - - fc_id=$! - - bash ./tests/main.sh body + +basic-test: + stage: test + only: + - testing + script: + - cargo run --release + - fc_id=$! + - bash ./tests/main.sh body From c8055e07cc0ec0914d424c19c37fc6f70d253298 Mon Sep 17 00:00:00 2001 From: shockrah Date: Fri, 31 Jul 2020 21:49:07 -0700 Subject: [PATCH 6/7] main is now setup to handle pipeline environments and regular .env filled environments --- server/src/main.rs | 46 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/server/src/main.rs b/server/src/main.rs index f4fa954..e692829 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -110,18 +110,42 @@ async fn shutdown_signal() { .expect("Failed to capture ctrl-c signal"); } #[tokio::main] -async fn main() { - dotenv().ok(); - println!("Servering on localhost:8888"); - let addr = SocketAddr::from(([127,0,0,1], 8888)); +async fn main() -> Result<(), u16>{ + const NO_ERR: u16 = 0; + const CONFIG_ERR: u16 = 1; + const SHUTDOWN_ERR: u16 = 2; - let service = make_service_fn(|_conn| async { - Ok::<_, Infallible>(service_fn(main_responder)) - }); + let mut main_ret: u16 = 0; + // setting up environment variables + let d_result = dotenv(); + if let Err(_d) = d_result { + // we may be on a pipeline/prod environment so .env may not be there + if let Err(_e) = env::var("DATABASE_URL") { + main_ret |= CONFIG_ERR; + } + } + if main_ret == NO_ERR { + println!("Servering on localhost:8888"); + let addr = SocketAddr::from(([127,0,0,1], 8888)); + let service = make_service_fn(|_conn| async { + Ok::<_, Infallible>(service_fn(main_responder)) + }); + let server = Server::bind(&addr).serve(service); + let graceful_shutdown = server.with_graceful_shutdown(shutdown_signal()); - let server = Server::bind(&addr).serve(service); - let graceful_shutdown = server.with_graceful_shutdown(shutdown_signal()); - if let Err(e) = graceful_shutdown.await { - eprintln!("Server shutdown error: {}", e); + if let Err(e) = graceful_shutdown.await { + main_ret |= SHUTDOWN_ERR; + eprintln!("Server shutdown error: {}", e); + } + } + + if main_ret != 0 { + // dumb as heck loggin method here + if main_ret & CONFIG_ERR != 0 {println!("ERROR: Config was not setup properly => Missing {{DATABASE_URL}}");} + if main_ret & SHUTDOWN_ERR != 0 {println!("ERROR: Couldn't shutdown gracefully");} + Err(main_ret) + } + else { + Ok(()) } } From 26eeb4fa2c1369d44ce6d5101736a5c724eee757 Mon Sep 17 00:00:00 2001 From: shockrah Date: Fri, 31 Jul 2020 21:51:51 -0700 Subject: [PATCH 7/7] using official nightly build of rust docker image --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e2f6a62..adc8851 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: sseemayer/rust-musl-builder-mingw +image: rustlang/rust:nightly basic-build: stage: build