diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 39d647fd5..3b343497d 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 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(); + 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 4e225dcb0..c350df70d 100644 --- a/controller/PostgreSQL.hpp +++ b/controller/PostgreSQL.hpp @@ -149,6 +149,7 @@ private: std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline); void configureSmee(); + void notifyNewMember(const std::string &networkID, const std::string &memberID); enum OverrideMode { ALLOW_PGBOUNCER_OVERRIDE = 0,