mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-06 20:43:44 +02:00
Move DB stuff into Db.
This commit is contained in:
parent
2751a6d56d
commit
9bab49d2f9
4 changed files with 97 additions and 74 deletions
|
@ -27,6 +27,76 @@ using json = nlohmann::json;
|
||||||
|
|
||||||
namespace ZeroTier {
|
namespace ZeroTier {
|
||||||
|
|
||||||
|
void DB::initNetwork(nlohmann::json &network)
|
||||||
|
{
|
||||||
|
if (!network.count("private")) network["private"] = true;
|
||||||
|
if (!network.count("creationTime")) network["creationTime"] = OSUtils::now();
|
||||||
|
if (!network.count("name")) network["name"] = "";
|
||||||
|
if (!network.count("multicastLimit")) network["multicastLimit"] = (uint64_t)32;
|
||||||
|
if (!network.count("enableBroadcast")) network["enableBroadcast"] = true;
|
||||||
|
if (!network.count("v4AssignMode")) network["v4AssignMode"] = {{"zt",false}};
|
||||||
|
if (!network.count("v6AssignMode")) network["v6AssignMode"] = {{"rfc4193",false},{"zt",false},{"6plane",false}};
|
||||||
|
if (!network.count("authTokens")) network["authTokens"] = {{}};
|
||||||
|
if (!network.count("capabilities")) network["capabilities"] = nlohmann::json::array();
|
||||||
|
if (!network.count("tags")) network["tags"] = nlohmann::json::array();
|
||||||
|
if (!network.count("routes")) network["routes"] = nlohmann::json::array();
|
||||||
|
if (!network.count("ipAssignmentPools")) network["ipAssignmentPools"] = nlohmann::json::array();
|
||||||
|
if (!network.count("anchors")) network["anchors"] = nlohmann::json::array();
|
||||||
|
if (!network.count("mtu")) network["mtu"] = ZT_DEFAULT_MTU;
|
||||||
|
if (!network.count("remoteTraceTarget")) network["remoteTraceTarget"] = nlohmann::json();
|
||||||
|
if (!network.count("removeTraceLevel")) network["remoteTraceLevel"] = 0;
|
||||||
|
if (!network.count("rules")) {
|
||||||
|
// If unspecified, rules are set to allow anything and behave like a flat L2 segment
|
||||||
|
network["rules"] = {{
|
||||||
|
{ "not",false },
|
||||||
|
{ "or", false },
|
||||||
|
{ "type","ACTION_ACCEPT" }
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
network["objtype"] = "network";
|
||||||
|
}
|
||||||
|
|
||||||
|
void DB::initMember(nlohmann::json &member)
|
||||||
|
{
|
||||||
|
if (!member.count("authorized")) member["authorized"] = false;
|
||||||
|
if (!member.count("ipAssignments")) member["ipAssignments"] = nlohmann::json::array();
|
||||||
|
if (!member.count("activeBridge")) member["activeBridge"] = false;
|
||||||
|
if (!member.count("tags")) member["tags"] = nlohmann::json::array();
|
||||||
|
if (!member.count("capabilities")) member["capabilities"] = nlohmann::json::array();
|
||||||
|
if (!member.count("creationTime")) member["creationTime"] = OSUtils::now();
|
||||||
|
if (!member.count("noAutoAssignIps")) member["noAutoAssignIps"] = false;
|
||||||
|
if (!member.count("revision")) member["revision"] = 0ULL;
|
||||||
|
if (!member.count("lastDeauthorizedTime")) member["lastDeauthorizedTime"] = 0ULL;
|
||||||
|
if (!member.count("lastAuthorizedTime")) member["lastAuthorizedTime"] = 0ULL;
|
||||||
|
if (!member.count("lastAuthorizedCredentialType")) member["lastAuthorizedCredentialType"] = nlohmann::json();
|
||||||
|
if (!member.count("lastAuthorizedCredential")) member["lastAuthorizedCredential"] = nlohmann::json();
|
||||||
|
if (!member.count("vMajor")) member["vMajor"] = -1;
|
||||||
|
if (!member.count("vMinor")) member["vMinor"] = -1;
|
||||||
|
if (!member.count("vRev")) member["vRev"] = -1;
|
||||||
|
if (!member.count("vProto")) member["vProto"] = -1;
|
||||||
|
if (!member.count("remoteTraceTarget")) member["remoteTraceTarget"] = nlohmann::json();
|
||||||
|
if (!member.count("removeTraceLevel")) member["remoteTraceLevel"] = 0;
|
||||||
|
member["objtype"] = "member";
|
||||||
|
}
|
||||||
|
|
||||||
|
void DB::cleanNetwork(nlohmann::json &network)
|
||||||
|
{
|
||||||
|
network.erase("clock");
|
||||||
|
network.erase("authorizedMemberCount");
|
||||||
|
network.erase("activeMemberCount");
|
||||||
|
network.erase("totalMemberCount");
|
||||||
|
network.erase("lastModified");
|
||||||
|
}
|
||||||
|
|
||||||
|
void DB::cleanMember(nlohmann::json &member)
|
||||||
|
{
|
||||||
|
member.erase("clock");
|
||||||
|
member.erase("physicalAddr");
|
||||||
|
member.erase("recentLog");
|
||||||
|
member.erase("lastModified");
|
||||||
|
member.erase("lastRequestMetaData");
|
||||||
|
}
|
||||||
|
|
||||||
DB::DB(EmbeddedNetworkController *const nc,const Identity &myId,const char *path) :
|
DB::DB(EmbeddedNetworkController *const nc,const Identity &myId,const char *path) :
|
||||||
_controller(nc),
|
_controller(nc),
|
||||||
_myId(myId),
|
_myId(myId),
|
||||||
|
|
|
@ -58,6 +58,26 @@ public:
|
||||||
int64_t mostRecentDeauthTime;
|
int64_t mostRecentDeauthTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensure that all network fields are present
|
||||||
|
*/
|
||||||
|
static void initNetwork(nlohmann::json &network);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensure that all member fields are present
|
||||||
|
*/
|
||||||
|
static void initMember(nlohmann::json &member);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove old and temporary network fields
|
||||||
|
*/
|
||||||
|
static void cleanNetwork(nlohmann::json &network);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove old and temporary member fields
|
||||||
|
*/
|
||||||
|
static void cleanMember(nlohmann::json &member);
|
||||||
|
|
||||||
DB(EmbeddedNetworkController *const nc,const Identity &myId,const char *path);
|
DB(EmbeddedNetworkController *const nc,const Identity &myId,const char *path);
|
||||||
virtual ~DB();
|
virtual ~DB();
|
||||||
|
|
||||||
|
|
|
@ -648,7 +648,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
|
||||||
json member,network;
|
json member,network;
|
||||||
_db->get(nwid,network,address,member);
|
_db->get(nwid,network,address,member);
|
||||||
json origMember(member); // for detecting changes
|
json origMember(member); // for detecting changes
|
||||||
_initMember(member);
|
DB::initMember(member);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (b.count("activeBridge")) member["activeBridge"] = OSUtils::jsonBool(b["activeBridge"],false);
|
if (b.count("activeBridge")) member["activeBridge"] = OSUtils::jsonBool(b["activeBridge"],false);
|
||||||
|
@ -734,7 +734,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
|
||||||
member["address"] = addrs; // legacy
|
member["address"] = addrs; // legacy
|
||||||
member["nwid"] = nwids;
|
member["nwid"] = nwids;
|
||||||
|
|
||||||
_cleanMember(member);
|
DB::cleanMember(member);
|
||||||
_db->save(&origMember,member);
|
_db->save(&origMember,member);
|
||||||
responseBody = OSUtils::jsonDump(member);
|
responseBody = OSUtils::jsonDump(member);
|
||||||
responseContentType = "application/json";
|
responseContentType = "application/json";
|
||||||
|
@ -767,7 +767,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
|
||||||
json network;
|
json network;
|
||||||
_db->get(nwid,network);
|
_db->get(nwid,network);
|
||||||
json origNetwork(network); // for detecting changes
|
json origNetwork(network); // for detecting changes
|
||||||
_initNetwork(network);
|
DB::initNetwork(network);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (b.count("name")) network["name"] = OSUtils::jsonString(b["name"],"");
|
if (b.count("name")) network["name"] = OSUtils::jsonString(b["name"],"");
|
||||||
|
@ -981,7 +981,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
|
||||||
network["id"] = nwids;
|
network["id"] = nwids;
|
||||||
network["nwid"] = nwids; // legacy
|
network["nwid"] = nwids; // legacy
|
||||||
|
|
||||||
_cleanNetwork(network);
|
DB::cleanNetwork(network);
|
||||||
_db->save(&origNetwork,network);
|
_db->save(&origNetwork,network);
|
||||||
|
|
||||||
responseBody = OSUtils::jsonDump(network);
|
responseBody = OSUtils::jsonDump(network);
|
||||||
|
@ -1183,7 +1183,7 @@ void EmbeddedNetworkController::_request(
|
||||||
}
|
}
|
||||||
origMember = member;
|
origMember = member;
|
||||||
const bool newMember = ((!member.is_object())||(member.size() == 0));
|
const bool newMember = ((!member.is_object())||(member.size() == 0));
|
||||||
_initMember(member);
|
DB::initMember(member);
|
||||||
|
|
||||||
{
|
{
|
||||||
const std::string haveIdStr(OSUtils::jsonString(member["identity"],""));
|
const std::string haveIdStr(OSUtils::jsonString(member["identity"],""));
|
||||||
|
@ -1281,7 +1281,7 @@ void EmbeddedNetworkController::_request(
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// If they are not authorized, STOP!
|
// If they are not authorized, STOP!
|
||||||
_cleanMember(member);
|
DB::cleanMember(member);
|
||||||
_db->save(&origMember,member);
|
_db->save(&origMember,member);
|
||||||
_sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED);
|
_sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED);
|
||||||
return;
|
return;
|
||||||
|
@ -1646,7 +1646,7 @@ void EmbeddedNetworkController::_request(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_cleanMember(member);
|
DB::cleanMember(member);
|
||||||
_db->save(&origMember,member);
|
_db->save(&origMember,member);
|
||||||
_sender->ncSendConfig(nwid,requestPacketId,identity.address(),*(nc.get()),metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_VERSION,0) < 6);
|
_sender->ncSendConfig(nwid,requestPacketId,identity.address(),*(nc.get()),metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_VERSION,0) < 6);
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,73 +105,6 @@ private:
|
||||||
void _request(uint64_t nwid,const InetAddress &fromAddr,uint64_t requestPacketId,const Identity &identity,const Dictionary<ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY> &metaData);
|
void _request(uint64_t nwid,const InetAddress &fromAddr,uint64_t requestPacketId,const Identity &identity,const Dictionary<ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY> &metaData);
|
||||||
void _startThreads();
|
void _startThreads();
|
||||||
|
|
||||||
// These init objects with default and static/informational fields
|
|
||||||
inline void _initMember(nlohmann::json &member)
|
|
||||||
{
|
|
||||||
if (!member.count("authorized")) member["authorized"] = false;
|
|
||||||
if (!member.count("ipAssignments")) member["ipAssignments"] = nlohmann::json::array();
|
|
||||||
if (!member.count("activeBridge")) member["activeBridge"] = false;
|
|
||||||
if (!member.count("tags")) member["tags"] = nlohmann::json::array();
|
|
||||||
if (!member.count("capabilities")) member["capabilities"] = nlohmann::json::array();
|
|
||||||
if (!member.count("creationTime")) member["creationTime"] = OSUtils::now();
|
|
||||||
if (!member.count("noAutoAssignIps")) member["noAutoAssignIps"] = false;
|
|
||||||
if (!member.count("revision")) member["revision"] = 0ULL;
|
|
||||||
if (!member.count("lastDeauthorizedTime")) member["lastDeauthorizedTime"] = 0ULL;
|
|
||||||
if (!member.count("lastAuthorizedTime")) member["lastAuthorizedTime"] = 0ULL;
|
|
||||||
if (!member.count("lastAuthorizedCredentialType")) member["lastAuthorizedCredentialType"] = nlohmann::json();
|
|
||||||
if (!member.count("lastAuthorizedCredential")) member["lastAuthorizedCredential"] = nlohmann::json();
|
|
||||||
if (!member.count("vMajor")) member["vMajor"] = -1;
|
|
||||||
if (!member.count("vMinor")) member["vMinor"] = -1;
|
|
||||||
if (!member.count("vRev")) member["vRev"] = -1;
|
|
||||||
if (!member.count("vProto")) member["vProto"] = -1;
|
|
||||||
if (!member.count("remoteTraceTarget")) member["remoteTraceTarget"] = nlohmann::json();
|
|
||||||
if (!member.count("removeTraceLevel")) member["remoteTraceLevel"] = 0;
|
|
||||||
member["objtype"] = "member";
|
|
||||||
}
|
|
||||||
inline void _initNetwork(nlohmann::json &network)
|
|
||||||
{
|
|
||||||
if (!network.count("private")) network["private"] = true;
|
|
||||||
if (!network.count("creationTime")) network["creationTime"] = OSUtils::now();
|
|
||||||
if (!network.count("name")) network["name"] = "";
|
|
||||||
if (!network.count("multicastLimit")) network["multicastLimit"] = (uint64_t)32;
|
|
||||||
if (!network.count("enableBroadcast")) network["enableBroadcast"] = true;
|
|
||||||
if (!network.count("v4AssignMode")) network["v4AssignMode"] = {{"zt",false}};
|
|
||||||
if (!network.count("v6AssignMode")) network["v6AssignMode"] = {{"rfc4193",false},{"zt",false},{"6plane",false}};
|
|
||||||
if (!network.count("authTokens")) network["authTokens"] = {{}};
|
|
||||||
if (!network.count("capabilities")) network["capabilities"] = nlohmann::json::array();
|
|
||||||
if (!network.count("tags")) network["tags"] = nlohmann::json::array();
|
|
||||||
if (!network.count("routes")) network["routes"] = nlohmann::json::array();
|
|
||||||
if (!network.count("ipAssignmentPools")) network["ipAssignmentPools"] = nlohmann::json::array();
|
|
||||||
if (!network.count("mtu")) network["mtu"] = ZT_DEFAULT_MTU;
|
|
||||||
if (!network.count("remoteTraceTarget")) network["remoteTraceTarget"] = nlohmann::json();
|
|
||||||
if (!network.count("removeTraceLevel")) network["remoteTraceLevel"] = 0;
|
|
||||||
if (!network.count("rules")) {
|
|
||||||
// If unspecified, rules are set to allow anything and behave like a flat L2 segment
|
|
||||||
network["rules"] = {{
|
|
||||||
{ "not",false },
|
|
||||||
{ "or", false },
|
|
||||||
{ "type","ACTION_ACCEPT" }
|
|
||||||
}};
|
|
||||||
}
|
|
||||||
network["objtype"] = "network";
|
|
||||||
}
|
|
||||||
inline void _cleanNetwork(nlohmann::json &network)
|
|
||||||
{
|
|
||||||
network.erase("clock");
|
|
||||||
network.erase("authorizedMemberCount");
|
|
||||||
network.erase("activeMemberCount");
|
|
||||||
network.erase("totalMemberCount");
|
|
||||||
network.erase("lastModified");
|
|
||||||
}
|
|
||||||
inline void _cleanMember(nlohmann::json &member)
|
|
||||||
{
|
|
||||||
member.erase("clock");
|
|
||||||
member.erase("physicalAddr");
|
|
||||||
member.erase("recentLog");
|
|
||||||
member.erase("lastModified");
|
|
||||||
member.erase("lastRequestMetaData");
|
|
||||||
}
|
|
||||||
|
|
||||||
struct _RQEntry
|
struct _RQEntry
|
||||||
{
|
{
|
||||||
uint64_t nwid;
|
uint64_t nwid;
|
||||||
|
|
Loading…
Add table
Reference in a new issue