add unsubscribe base functionality

This commit is contained in:
Gonçalo Valério 2019-07-08 23:16:16 +01:00
parent 71c3754ce3
commit 18e7554012
2 changed files with 28 additions and 13 deletions

View File

@ -1,6 +1,7 @@
use super::schema::subscriptions; use super::schema::subscriptions;
use super::schema::subscriptions::dsl::*;
use diesel::prelude::*; use diesel::prelude::*;
use models::NewSubscription; use models::*;
use std::collections::HashMap; use std::collections::HashMap;
use std::convert::TryFrom; use std::convert::TryFrom;
use std::time::{SystemTime, UNIX_EPOCH}; use std::time::{SystemTime, UNIX_EPOCH};
@ -9,8 +10,8 @@ use utils::{setup_logging, Pool};
pub fn handle_subscription(db: &Pool, data: &HashMap<String, String>) -> bool { pub fn handle_subscription(db: &Pool, data: &HashMap<String, String>) -> bool {
let log = setup_logging(); let log = setup_logging();
let mode; let mode;
let callback; let req_callback;
let topic; let req_topic;
let timestamp = SystemTime::now() let timestamp = SystemTime::now()
.duration_since(UNIX_EPOCH) .duration_since(UNIX_EPOCH)
.expect("Invalid Time") .expect("Invalid Time")
@ -24,24 +25,24 @@ pub fn handle_subscription(db: &Pool, data: &HashMap<String, String>) -> bool {
} }
match data.get("hub.callback") { match data.get("hub.callback") {
Some(value) => callback = value, Some(value) => req_callback = value,
None => return false, None => return false,
} }
match data.get("hub.topic") { match data.get("hub.topic") {
Some(value) => topic = value, Some(value) => req_topic = value,
None => return false, None => return false,
} }
debug!( debug!(
log, log,
"Mode: {}, Callback: {}, topic: {}", mode, callback, topic "Mode: {}, Callback: {}, topic: {}", mode, req_callback, req_topic
); );
if mode == &"subscribe" { if mode == &"subscribe" {
let subscription = NewSubscription { let subscription = NewSubscription {
callback: callback, callback: req_callback,
topic: topic, topic: req_topic,
sec: "", sec: "",
created_at: &now, created_at: &now,
expires_at: &now, expires_at: &now,
@ -51,9 +52,25 @@ pub fn handle_subscription(db: &Pool, data: &HashMap<String, String>) -> bool {
.values(&subscription) .values(&subscription)
.execute(&conn) .execute(&conn)
.expect("Error saving new subscription"); .expect("Error saving new subscription");
debug!(log, "Subscription created.");
debug!(
log,
"Subscription created. Callback {}. Topic {}",
subscription.callback,
subscription.topic
);
return true; return true;
} else if mode == &"unsubscribe" { } 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; return true;
} else { } else {
debug!(log, "Wrong method."); debug!(log, "Wrong method.");

View File

@ -18,8 +18,7 @@ pub fn index(_state: web::Data<AppState>, _req: HttpRequest) -> HttpResponse {
pub fn hub(state: web::Data<AppState>, _req: HttpRequest, params: String) -> HttpResponse { pub fn hub(state: web::Data<AppState>, _req: HttpRequest, params: String) -> HttpResponse {
let log = &state.log; let log = &state.log;
let db = &state.db; let db = &state.db;
info!(log, "Received Request"); info!(log, "Received Request. Content: {}", params);
debug!(log, "Content: {}", params);
let parsed_data = form_urlencoded::parse(params.as_bytes()); let parsed_data = form_urlencoded::parse(params.as_bytes());
let mut parameters = HashMap::new(); let mut parameters = HashMap::new();
@ -33,8 +32,7 @@ pub fn hub(state: web::Data<AppState>, _req: HttpRequest, params: String) -> Htt
.finish(); .finish();
} }
let result = handle_subscription(db, &parameters); handle_subscription(db, &parameters);
debug!(log, "{}", result);
return HttpResponse::Ok() return HttpResponse::Ok()
.status(http::StatusCode::ACCEPTED) .status(http::StatusCode::ACCEPTED)
.finish(); .finish();