summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorGrant Limberg <[email protected]>2023-08-07 16:42:23 -0700
committerGrant Limberg <[email protected]>2023-08-07 16:42:23 -0700
commit88b96265d7393684e7d285e023fc848d780907cf (patch)
treeee3239a4e4d9c49652c3c69d0c4f951e3e2e5588 /controller
parent0dc92c2d7b0933f5a8efe1f897e92e183e491a7e (diff)
look up hook URLs dynamically
Diffstat (limited to 'controller')
-rw-r--r--controller/PostgreSQL.cpp53
-rw-r--r--controller/PostgreSQL.hpp1
2 files changed, 46 insertions, 8 deletions
diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp
index 39d647fd..3b343497 100644
--- a/controller/PostgreSQL.cpp
+++ b/controller/PostgreSQL.cpp
@@ -1425,14 +1425,7 @@ void PostgreSQL::commitThread()
w.commit();
if (_smee != NULL && isNewMember) {
- // TODO: Look up hook URL for network owner organization
- smeeclient::smee_client_notify_network_joined(
- _smee,
- networkId.c_str(),
- memberId.c_str(),
- "http://hookcatcher:9999/hook",
- NULL
- );
+ notifyNewMember(networkId, memberId);
}
const uint64_t nwidInt = OSUtils::jsonIntHex(config["nwid"], 0ULL);
@@ -1678,6 +1671,50 @@ void PostgreSQL::commitThread()
fprintf(stderr, "%s commitThread finished\n", _myAddressStr.c_str());
}
+void PostgreSQL::notifyNewMember(const std::string &networkID, const std::string &memberID) {
+ // TODO: Look up hook URL for network owner organization
+
+ std::shared_ptr<PostgresConnection> c;
+ try {
+ c = _pool->borrow();
+ } catch (std::exception &e) {
+ 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_url "
+ "FROM ztc_hook h "
+ "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", 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()
{
waitForReady();
diff --git a/controller/PostgreSQL.hpp b/controller/PostgreSQL.hpp
index 4e225dcb..c350df70 100644
--- a/controller/PostgreSQL.hpp
+++ b/controller/PostgreSQL.hpp
@@ -149,6 +149,7 @@ private:
std::unordered_map< std::pair<uint64_t,uint64_t>,std::pair<int64_t,InetAddress>,_PairHasher > &lastOnline);
void configureSmee();
+ void notifyNewMember(const std::string &networkID, const std::string &memberID);
enum OverrideMode {
ALLOW_PGBOUNCER_OVERRIDE = 0,