diff options
| author | Grant Limberg <[email protected]> | 2023-08-07 16:42:23 -0700 |
|---|---|---|
| committer | Grant Limberg <[email protected]> | 2023-08-07 16:42:23 -0700 |
| commit | 88b96265d7393684e7d285e023fc848d780907cf (patch) | |
| tree | ee3239a4e4d9c49652c3c69d0c4f951e3e2e5588 /controller | |
| parent | 0dc92c2d7b0933f5a8efe1f897e92e183e491a7e (diff) | |
look up hook URLs dynamically
Diffstat (limited to 'controller')
| -rw-r--r-- | controller/PostgreSQL.cpp | 53 | ||||
| -rw-r--r-- | controller/PostgreSQL.hpp | 1 |
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, |
