From d2c45761ddcec3cdf6f4f180617135eeb1d9498a Mon Sep 17 00:00:00 2001 From: shockrah Date: Wed, 5 Feb 2020 17:45:12 -0800 Subject: [PATCH] invites usage route '/invite/' now usable --- server/src/invites.rs | 24 +++++++++++++++++++++--- server/src/main.rs | 7 +++---- server/src/models.rs | 3 ++- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/server/src/invites.rs b/server/src/invites.rs index 9780615..42a7213 100644 --- a/server/src/invites.rs +++ b/server/src/invites.rs @@ -6,6 +6,12 @@ use crate::DBConn; use crate::models::Invite; use crate::schema; +/* +TODO: both the generation and usage endpoints for invites need the following + * meaningful responses + * authentication +*/ + #[get("/generate")] pub fn generate_invite(conn: DBConn) -> Result { let dt = Utc::now() + Duration::minutes(30); @@ -28,8 +34,20 @@ pub fn generate_invite(conn: DBConn) -> Result { } #[get("/")] -pub fn use_invite(hash: i64) -> String { - // check if the invite is somewhere in our invites table - format!("freechat.io/invite/{}", hash) +pub fn use_invite(hash: u64, conn: DBConn) -> Result { + // jank but whatever + use schema::invites::dsl::*; + let data: Vec = invites.select((id, expires, uses)) + .filter(id.eq(hash)) + .load(&conn.0) + .unwrap(); + + if data.is_empty() { + Err("invite does not exist".to_string()) + } + else { + let row = diesel::delete(invites.filter(id.eq(hash))).execute(&conn.0); + Ok(format!("Invite used successfully {:?}", row)) + } } diff --git a/server/src/main.rs b/server/src/main.rs index 966c191..d6ba282 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -40,10 +40,9 @@ fn rocket() -> rocket::Rocket { } fn main() -> Result<(), i32> { - let dot = dotenv(); - match dot { - Ok(d) => { - println!("Got .env: {}", var("DATABASE_URL").unwrap()); + match dotenv() { + Ok(_d) => { + println!("Got .env: {:?}", var("DATABASE_URL").unwrap()); rocket().launch(); }, Err(e) => { diff --git a/server/src/models.rs b/server/src/models.rs index 0214a33..4ba818c 100644 --- a/server/src/models.rs +++ b/server/src/models.rs @@ -1,5 +1,6 @@ use crate::schema::invites; -#[derive(Insertable, Serialize, Deserialize, Queryable)] +#[derive(Insertable, Serialize, Deserialize, Queryable, Debug)] +#[table_name = "invites"] pub struct Invite { pub id: u64, pub expires: u64,