mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-05 03:53:44 +02:00
simplify hook firing
only need network and member IDs
This commit is contained in:
parent
60fb8c941a
commit
d322f332e8
3 changed files with 6 additions and 70 deletions
|
@ -1690,48 +1690,10 @@ void PostgreSQL::commitThread()
|
||||||
}
|
}
|
||||||
|
|
||||||
void PostgreSQL::notifyNewMember(const std::string &networkID, const std::string &memberID) {
|
void PostgreSQL::notifyNewMember(const std::string &networkID, const std::string &memberID) {
|
||||||
std::shared_ptr<PostgresConnection> c;
|
smeeclient::smee_client_notify_network_joined(
|
||||||
try {
|
_smee,
|
||||||
c = _pool->borrow();
|
networkID.c_str(),
|
||||||
} catch (std::exception &e) {
|
memberID.c_str());
|
||||||
fprintf(stderr, "ERROR: %s\n", e.what());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
pqxx::work w(*c->c);
|
|
||||||
|
|
||||||
// TODO: Add check for active subscription
|
|
||||||
|
|
||||||
auto res = w.exec_params("SELECT h.hook_id "
|
|
||||||
"FROM ztc_hook h "
|
|
||||||
"INNER JOIN ztc_hook_hook_types ht "
|
|
||||||
"ON ht.hook_id = h.hook_id "
|
|
||||||
"INNER JOIN ztc_org o "
|
|
||||||
"ON o.org_id = h.org_id "
|
|
||||||
"INNER JOIN ztc_user u "
|
|
||||||
"ON u.id = o.owner_id "
|
|
||||||
"INNER JOIN ztc_network n "
|
|
||||||
"ON n.owner_id = u.id "
|
|
||||||
"WHERE n.id = $1 "
|
|
||||||
"AND ht.hook_type = 'NETWORK_JOIN'", networkID);
|
|
||||||
|
|
||||||
for (auto const &row: res) {
|
|
||||||
std::string hookURL = row[0].as<std::string>();
|
|
||||||
smeeclient::smee_client_notify_network_joined(
|
|
||||||
_smee,
|
|
||||||
networkID.c_str(),
|
|
||||||
memberID.c_str(),
|
|
||||||
hookURL.c_str(),
|
|
||||||
NULL
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
_pool->unborrow(c);
|
|
||||||
} catch (std::exception &e) {
|
|
||||||
fprintf(stderr, "ERROR: %s\n", e.what());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PostgreSQL::onlineNotificationThread()
|
void PostgreSQL::onlineNotificationThread()
|
||||||
|
|
|
@ -64,8 +64,6 @@ pub extern "C" fn smee_client_notify_network_joined(
|
||||||
smee_instance: *mut SmeeClient,
|
smee_instance: *mut SmeeClient,
|
||||||
network_id: *const c_char,
|
network_id: *const c_char,
|
||||||
member_id: *const c_char,
|
member_id: *const c_char,
|
||||||
hook_id: *const c_char,
|
|
||||||
src_ip: *const c_char,
|
|
||||||
) -> bool {
|
) -> bool {
|
||||||
let nwid = unsafe {
|
let nwid = unsafe {
|
||||||
assert!(!network_id.is_null());
|
assert!(!network_id.is_null());
|
||||||
|
@ -77,25 +75,12 @@ pub extern "C" fn smee_client_notify_network_joined(
|
||||||
CStr::from_ptr(member_id).to_str().unwrap()
|
CStr::from_ptr(member_id).to_str().unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
let hid = unsafe {
|
|
||||||
assert!(!hook_id.is_null());
|
|
||||||
CStr::from_ptr(hook_id).to_str().unwrap()
|
|
||||||
};
|
|
||||||
|
|
||||||
let src = unsafe {
|
|
||||||
if src_ip.is_null() {
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(CStr::from_ptr(src_ip).to_str().unwrap())
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let smee = unsafe {
|
let smee = unsafe {
|
||||||
assert!(!smee_instance.is_null());
|
assert!(!smee_instance.is_null());
|
||||||
&mut *smee_instance
|
&mut *smee_instance
|
||||||
};
|
};
|
||||||
|
|
||||||
let params = NetworkJoinedParams::new(nwid, mem_id, hid, src);
|
let params = NetworkJoinedParams::new(nwid, mem_id);
|
||||||
|
|
||||||
match smee.notify_network_joined(params) {
|
match smee.notify_network_joined(params) {
|
||||||
Ok(()) => true,
|
Ok(()) => true,
|
||||||
|
|
|
@ -31,24 +31,13 @@ pub struct NetworkJoinedParams {
|
||||||
|
|
||||||
#[serde(rename = "MemberID")]
|
#[serde(rename = "MemberID")]
|
||||||
pub member_id: String,
|
pub member_id: String,
|
||||||
|
|
||||||
#[serde(rename = "HookID")]
|
|
||||||
pub hook_id: String,
|
|
||||||
|
|
||||||
#[serde(rename = "SrcIP")]
|
|
||||||
pub src_ip: Option<String>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NetworkJoinedParams {
|
impl NetworkJoinedParams {
|
||||||
fn new(network_id: &str, member_id: &str, hook_id: &str, src_ip: Option<&str>) -> Self {
|
fn new(network_id: &str, member_id: &str) -> Self {
|
||||||
Self {
|
Self {
|
||||||
network_id: network_id.to_string(),
|
network_id: network_id.to_string(),
|
||||||
member_id: member_id.to_string(),
|
member_id: member_id.to_string(),
|
||||||
hook_id: hook_id.to_string(),
|
|
||||||
src_ip: match src_ip {
|
|
||||||
Some(x) => Some(x.to_string()),
|
|
||||||
None => None,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue