Browse Source

Move DB stuff into Db.

Adam Ierymenko 7 years ago
parent
commit
9bab49d2f9

+ 70 - 0
controller/DB.cpp

@@ -27,6 +27,76 @@ using json = nlohmann::json;
 
 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) :
 	_controller(nc),
 	_myId(myId),

+ 20 - 0
controller/DB.hpp

@@ -58,6 +58,26 @@ public:
 		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);
 	virtual ~DB();
 

+ 7 - 7
controller/EmbeddedNetworkController.cpp

@@ -648,7 +648,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
 					json member,network;
 					_db->get(nwid,network,address,member);
 					json origMember(member); // for detecting changes
-					_initMember(member);
+					DB::initMember(member);
 
 					try {
 						if (b.count("activeBridge")) member["activeBridge"] = OSUtils::jsonBool(b["activeBridge"],false);
@@ -734,7 +734,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
 					member["address"] = addrs; // legacy
 					member["nwid"] = nwids;
 
-					_cleanMember(member);
+					DB::cleanMember(member);
 					_db->save(&origMember,member);
 					responseBody = OSUtils::jsonDump(member);
 					responseContentType = "application/json";
@@ -767,7 +767,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
 				json network;
 				_db->get(nwid,network);
 				json origNetwork(network); // for detecting changes
-				_initNetwork(network);
+				DB::initNetwork(network);
 
 				try {
 					if (b.count("name")) network["name"] = OSUtils::jsonString(b["name"],"");
@@ -981,7 +981,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
 				network["id"] = nwids;
 				network["nwid"] = nwids; // legacy
 
-				_cleanNetwork(network);
+				DB::cleanNetwork(network);
 				_db->save(&origNetwork,network);
 
 				responseBody = OSUtils::jsonDump(network);
@@ -1183,7 +1183,7 @@ void EmbeddedNetworkController::_request(
 	}
 	origMember = member;
 	const bool newMember = ((!member.is_object())||(member.size() == 0));
-	_initMember(member);
+	DB::initMember(member);
 
 	{
 		const std::string haveIdStr(OSUtils::jsonString(member["identity"],""));
@@ -1281,7 +1281,7 @@ void EmbeddedNetworkController::_request(
 		}
 	} else {
 		// If they are not authorized, STOP!
-		_cleanMember(member);
+		DB::cleanMember(member);
 		_db->save(&origMember,member);
 		_sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED);
 		return;
@@ -1646,7 +1646,7 @@ void EmbeddedNetworkController::_request(
 		return;
 	}
 
-	_cleanMember(member);
+	DB::cleanMember(member);
 	_db->save(&origMember,member);
 	_sender->ncSendConfig(nwid,requestPacketId,identity.address(),*(nc.get()),metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_VERSION,0) < 6);
 }

+ 0 - 67
controller/EmbeddedNetworkController.hpp

@@ -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 _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
 	{
 		uint64_t nwid;