diff options
| author | Grant Limberg <[email protected]> | 2023-08-28 12:54:29 -0700 |
|---|---|---|
| committer | Grant Limberg <[email protected]> | 2023-08-28 12:54:29 -0700 |
| commit | 69c590ff8122bfafb696b4b76a27cd6bb4a546a7 (patch) | |
| tree | bdceaa6d2965a9335d6f7b0202ff8ad5f74fcfa5 /controller | |
| parent | 5becb41bd4b26674d28ed5979b7d329049d1d857 (diff) | |
| parent | 72533cbd1352571aa1991eb3fa3fb5a4ffd07679 (diff) | |
Merge branch 'dev' into temporal
Diffstat (limited to 'controller')
| -rw-r--r-- | controller/EmbeddedNetworkController.cpp | 80 | ||||
| -rw-r--r-- | controller/EmbeddedNetworkController.hpp | 1 |
2 files changed, 59 insertions, 22 deletions
diff --git a/controller/EmbeddedNetworkController.cpp b/controller/EmbeddedNetworkController.cpp index b60c375c..85fbb4dc 100644 --- a/controller/EmbeddedNetworkController.cpp +++ b/controller/EmbeddedNetworkController.cpp @@ -863,9 +863,17 @@ std::string EmbeddedNetworkController::networkUpdateFromPostData(uint64_t networ void EmbeddedNetworkController::configureHTTPControlPlane( httplib::Server &s, + httplib::Server &sv6, const std::function<void(const httplib::Request&, httplib::Response&, std::string)> setContent) { - s.Get("/controller/network", [&, setContent](const httplib::Request &req, httplib::Response &res) { + // Control plane Endpoints + std::string networkListPath = "/controller/network"; + std::string networkPath = "/controller/network/([0-9a-fA-F]{16})"; + std::string oldAndBustedNetworkCreatePath = "/controller/network/([0-9a-fA-F]{10})______"; + std::string memberListPath = "/controller/network/([0-9a-fA-F]{16})/member"; + std::string memberPath = "/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})"; + + auto networkListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) { std::set<uint64_t> networkIds; _db.networks(networkIds); char tmp[64]; @@ -877,9 +885,11 @@ void EmbeddedNetworkController::configureHTTPControlPlane( } setContent(req, res, out.dump()); - }); + }; + s.Get(networkListPath, networkListGet); + sv6.Get(networkListPath, networkListGet); - s.Get("/controller/network/([0-9a-fA-F]{16})", [&, setContent](const httplib::Request &req, httplib::Response &res) { + auto networkGet = [&, setContent](const httplib::Request &req, httplib::Response &res) { auto networkID = req.matches[1]; uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str()); json network; @@ -889,7 +899,9 @@ void EmbeddedNetworkController::configureHTTPControlPlane( } setContent(req, res, network.dump()); - }); + }; + s.Get(networkPath, networkGet); + sv6.Get(networkPath, networkGet); auto createNewNetwork = [&, setContent](const httplib::Request &req, httplib::Response &res) { fprintf(stderr, "creating new network (new style)\n"); @@ -912,8 +924,10 @@ void EmbeddedNetworkController::configureHTTPControlPlane( setContent(req, res, networkUpdateFromPostData(nwid, req.body)); }; - s.Put("/controller/network", createNewNetwork); - s.Post("/controller/network", createNewNetwork); + s.Put(networkListPath, createNewNetwork); + s.Post(networkListPath, createNewNetwork); + sv6.Put(networkListPath, createNewNetwork); + sv6.Post(networkListPath, createNewNetwork); auto createNewNetworkOldAndBusted = [&, setContent](const httplib::Request &req, httplib::Response &res) { auto inID = req.matches[1].str(); @@ -941,10 +955,24 @@ void EmbeddedNetworkController::configureHTTPControlPlane( } setContent(req, res, networkUpdateFromPostData(nwid, req.body)); }; - s.Put("/controller/network/([0-9a-fA-F]{10})______", createNewNetworkOldAndBusted); - s.Post("/controller/network/([0-9a-fA-F]{10})______", createNewNetworkOldAndBusted); + s.Put(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted); + s.Post(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted); + sv6.Put(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted); + sv6.Post(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted); + + auto networkPost = [&, setContent](const httplib::Request &req, httplib::Response &res) { + auto networkID = req.matches[1].str(); + uint64_t nwid = Utils::hexStrToU64(networkID.c_str()); + + res.status = 200; + setContent(req, res, networkUpdateFromPostData(nwid, req.body)); + }; + s.Put(networkPath, networkPost); + s.Post(networkPath, networkPost); + sv6.Put(networkPath, networkPost); + sv6.Post(networkPath, networkPost); - s.Delete("/controller/network/([0-9a-fA-F]{16})", [&, setContent](const httplib::Request &req, httplib::Response &res) { + auto networkDelete = [&, setContent](const httplib::Request &req, httplib::Response &res) { auto networkID = req.matches[1].str(); uint64_t nwid = Utils::hexStrToU64(networkID.c_str()); @@ -956,9 +984,11 @@ void EmbeddedNetworkController::configureHTTPControlPlane( _db.eraseNetwork(nwid); setContent(req, res, network.dump()); - }); + }; + s.Delete(networkPath, networkDelete); + sv6.Delete(networkPath, networkDelete); - s.Get("/controller/network/([0-9a-fA-F]{16})/member", [&, setContent](const httplib::Request &req, httplib::Response &res) { + auto memberListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) { auto networkID = req.matches[1]; uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str()); json network; @@ -967,24 +997,24 @@ void EmbeddedNetworkController::configureHTTPControlPlane( return; } - json out = json::array(); + json out = json::object(); std::vector<json> memTmp; if (_db.get(nwid, network, memTmp)) { for (auto m = memTmp.begin(); m != memTmp.end(); ++m) { int revision = OSUtils::jsonInt((*m)["revision"], 0); std::string id = OSUtils::jsonString((*m)["id"], ""); if (id.length() == 10) { - json tmp = json::object(); - tmp[id] = revision; - out.push_back(tmp); + out[id] = revision; } } } setContent(req, res, out.dump()); - }); + }; + s.Get(memberListPath, memberListGet); + sv6.Get(memberListPath, memberListGet); - s.Get("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", [&, setContent](const httplib::Request &req, httplib::Response &res) { + auto memberGet = [&, setContent](const httplib::Request &req, httplib::Response &res) { auto networkID = req.matches[1]; auto memberID = req.matches[2]; uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str()); @@ -997,7 +1027,9 @@ void EmbeddedNetworkController::configureHTTPControlPlane( } setContent(req, res, member.dump()); - }); + }; + s.Get(memberPath, memberGet); + sv6.Get(memberPath, memberGet); auto memberPost = [&, setContent](const httplib::Request &req, httplib::Response &res) { auto networkID = req.matches[1].str(); @@ -1102,10 +1134,12 @@ void EmbeddedNetworkController::configureHTTPControlPlane( setContent(req, res, member.dump()); }; - s.Put("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", memberPost); - s.Post("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", memberPost); + s.Put(memberPath, memberPost); + s.Post(memberPath, memberPost); + sv6.Put(memberPath, memberPost); + sv6.Post(memberPath, memberPost); - s.Delete("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", [&, setContent](const httplib::Request &req, httplib::Response &res) { + auto memberDelete = [&, setContent](const httplib::Request &req, httplib::Response &res) { auto networkID = req.matches[1].str(); auto memberID = req.matches[2].str(); @@ -1126,7 +1160,9 @@ void EmbeddedNetworkController::configureHTTPControlPlane( _db.eraseMember(nwid, address); setContent(req, res, member.dump()); - }); + }; + s.Delete(memberPath, memberDelete); + sv6.Delete(memberPath, memberDelete); } void EmbeddedNetworkController::handleRemoteTrace(const ZT_RemoteTrace &rt) diff --git a/controller/EmbeddedNetworkController.hpp b/controller/EmbeddedNetworkController.hpp index ef369be3..4ea00b65 100644 --- a/controller/EmbeddedNetworkController.hpp +++ b/controller/EmbeddedNetworkController.hpp @@ -70,6 +70,7 @@ public: void configureHTTPControlPlane( httplib::Server &s, + httplib::Server &sV6, const std::function<void(const httplib::Request&, httplib::Response&, std::string)>); void handleRemoteTrace(const ZT_RemoteTrace &rt); |
