add unsubscribe base functionality
This commit is contained in:
parent
71c3754ce3
commit
18e7554012
|
@ -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.");
|
||||||
|
|
|
@ -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, ¶meters);
|
handle_subscription(db, ¶meters);
|
||||||
debug!(log, "{}", result);
|
|
||||||
return HttpResponse::Ok()
|
return HttpResponse::Ok()
|
||||||
.status(http::StatusCode::ACCEPTED)
|
.status(http::StatusCode::ACCEPTED)
|
||||||
.finish();
|
.finish();
|
||||||
|
|
Loading…
Reference in New Issue