83 lines
2.1 KiB
Rust
83 lines
2.1 KiB
Rust
use super::schema::subscriptions;
|
|
use super::schema::subscriptions::dsl::*;
|
|
use diesel::prelude::*;
|
|
use models::*;
|
|
use std::collections::HashMap;
|
|
use std::convert::TryFrom;
|
|
use std::time::{SystemTime, UNIX_EPOCH};
|
|
use utils::{setup_logging, Pool};
|
|
|
|
pub fn handle_subscription(db: &Pool, data: &HashMap<String, String>) -> bool {
|
|
let log = setup_logging();
|
|
let mode;
|
|
let req_callback;
|
|
let req_topic;
|
|
let timestamp = SystemTime::now()
|
|
.duration_since(UNIX_EPOCH)
|
|
.expect("Invalid Time")
|
|
.as_secs();
|
|
let now = i32::try_from(timestamp).ok().unwrap();
|
|
let conn = db.get().unwrap();
|
|
|
|
match data.get("hub.mode") {
|
|
Some(value) => mode = value,
|
|
None => return false,
|
|
}
|
|
|
|
match data.get("hub.callback") {
|
|
Some(value) => req_callback = value,
|
|
None => return false,
|
|
}
|
|
|
|
match data.get("hub.topic") {
|
|
Some(value) => req_topic = value,
|
|
None => return false,
|
|
}
|
|
|
|
debug!(
|
|
log,
|
|
"Mode: {}, Callback: {}, topic: {}", mode, req_callback, req_topic
|
|
);
|
|
|
|
if mode == &"subscribe" {
|
|
let subscription = NewSubscription {
|
|
callback: req_callback,
|
|
topic: req_topic,
|
|
sec: "",
|
|
created_at: &now,
|
|
expires_at: &now,
|
|
};
|
|
|
|
diesel::insert_into(subscriptions::table)
|
|
.values(&subscription)
|
|
.execute(&conn)
|
|
.expect("Error saving new subscription");
|
|
|
|
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.");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {}
|