diff --git a/src/actions.rs b/src/actions.rs index 6f6def6..71dfe10 100644 --- a/src/actions.rs +++ b/src/actions.rs @@ -1,6 +1,7 @@ use super::schema::subscriptions; +use super::schema::subscriptions::dsl::*; use diesel::prelude::*; -use models::NewSubscription; +use models::*; use std::collections::HashMap; use std::convert::TryFrom; use std::time::{SystemTime, UNIX_EPOCH}; @@ -9,8 +10,8 @@ use utils::{setup_logging, Pool}; pub fn handle_subscription(db: &Pool, data: &HashMap) -> bool { let log = setup_logging(); let mode; - let callback; - let topic; + let req_callback; + let req_topic; let timestamp = SystemTime::now() .duration_since(UNIX_EPOCH) .expect("Invalid Time") @@ -24,24 +25,24 @@ pub fn handle_subscription(db: &Pool, data: &HashMap) -> bool { } match data.get("hub.callback") { - Some(value) => callback = value, + Some(value) => req_callback = value, None => return false, } match data.get("hub.topic") { - Some(value) => topic = value, + Some(value) => req_topic = value, None => return false, } debug!( log, - "Mode: {}, Callback: {}, topic: {}", mode, callback, topic + "Mode: {}, Callback: {}, topic: {}", mode, req_callback, req_topic ); if mode == &"subscribe" { let subscription = NewSubscription { - callback: callback, - topic: topic, + callback: req_callback, + topic: req_topic, sec: "", created_at: &now, expires_at: &now, @@ -51,9 +52,25 @@ pub fn handle_subscription(db: &Pool, data: &HashMap) -> bool { .values(&subscription) .execute(&conn) .expect("Error saving new subscription"); - debug!(log, "Subscription created."); + + debug!( + log, + "Subscription created. Callback {}. Topic {}", + subscription.callback, + subscription.topic + ); return true; } else if mode == &"unsubscribe" { + let sub = subscriptions + .filter(callback.eq(req_callback)) + .filter(topic.eq(req_topic)); + diesel::delete(sub) + .execute(&conn) + .expect("Error removing subscription"); + debug!( + log, + "Subscription removed. Callback {}. Topic {}", req_callback, req_topic + ); return true; } else { debug!(log, "Wrong method."); diff --git a/src/controllers.rs b/src/controllers.rs index 97f485c..7bef152 100644 --- a/src/controllers.rs +++ b/src/controllers.rs @@ -18,8 +18,7 @@ pub fn index(_state: web::Data, _req: HttpRequest) -> HttpResponse { pub fn hub(state: web::Data, _req: HttpRequest, params: String) -> HttpResponse { let log = &state.log; let db = &state.db; - info!(log, "Received Request"); - debug!(log, "Content: {}", params); + info!(log, "Received Request. Content: {}", params); let parsed_data = form_urlencoded::parse(params.as_bytes()); let mut parameters = HashMap::new(); @@ -33,8 +32,7 @@ pub fn hub(state: web::Data, _req: HttpRequest, params: String) -> Htt .finish(); } - let result = handle_subscription(db, ¶meters); - debug!(log, "{}", result); + handle_subscription(db, ¶meters); return HttpResponse::Ok() .status(http::StatusCode::ACCEPTED) .finish();