Browse Source

Hack settings into old CLI.

Adam Ierymenko 9 years ago
parent
commit
7918b26f65
1 changed files with 56 additions and 17 deletions
  1. 56 17
      one.cpp

+ 56 - 17
one.cpp

@@ -86,6 +86,8 @@ static OneService *volatile zt1Service = (OneService *)0;
 /* zerotier-cli personality                                                 */
 /* zerotier-cli personality                                                 */
 /****************************************************************************/
 /****************************************************************************/
 
 
+// This is getting deprecated soon in favor of the stuff in cli/
+
 static void cliPrintHelp(const char *pn,FILE *out)
 static void cliPrintHelp(const char *pn,FILE *out)
 {
 {
 	fprintf(out,
 	fprintf(out,
@@ -97,19 +99,19 @@ static void cliPrintHelp(const char *pn,FILE *out)
 		LICENSE_GRANT ZT_EOL_S);
 		LICENSE_GRANT ZT_EOL_S);
 	fprintf(out,"Usage: %s [-switches] <command/path> [<args>]"ZT_EOL_S""ZT_EOL_S,pn);
 	fprintf(out,"Usage: %s [-switches] <command/path> [<args>]"ZT_EOL_S""ZT_EOL_S,pn);
 	fprintf(out,"Available switches:"ZT_EOL_S);
 	fprintf(out,"Available switches:"ZT_EOL_S);
-	fprintf(out,"  -h                 - Display this help"ZT_EOL_S);
-	fprintf(out,"  -v                 - Show version"ZT_EOL_S);
-	fprintf(out,"  -j                 - Display full raw JSON output"ZT_EOL_S);
-	fprintf(out,"  -D<path>           - ZeroTier home path for parameter auto-detect"ZT_EOL_S);
-	fprintf(out,"  -p<port>           - HTTP port (default: auto)"ZT_EOL_S);
-	fprintf(out,"  -T<token>          - Authentication token (default: auto)"ZT_EOL_S);
-	//fprintf(out,"  -H<ip>             - HTTP server bind address (default: 127.0.0.1)"ZT_EOL_S);
+	fprintf(out,"  -h                      - Display this help"ZT_EOL_S);
+	fprintf(out,"  -v                      - Show version"ZT_EOL_S);
+	fprintf(out,"  -j                      - Display full raw JSON output"ZT_EOL_S);
+	fprintf(out,"  -D<path>                - ZeroTier home path for parameter auto-detect"ZT_EOL_S);
+	fprintf(out,"  -p<port>                - HTTP port (default: auto)"ZT_EOL_S);
+	fprintf(out,"  -T<token>               - Authentication token (default: auto)"ZT_EOL_S);
 	fprintf(out,ZT_EOL_S"Available commands:"ZT_EOL_S);
 	fprintf(out,ZT_EOL_S"Available commands:"ZT_EOL_S);
-	fprintf(out,"  info               - Display status info"ZT_EOL_S);
-	fprintf(out,"  listpeers          - List all peers"ZT_EOL_S);
-	fprintf(out,"  listnetworks       - List all networks"ZT_EOL_S);
-	fprintf(out,"  join <network>     - Join a network"ZT_EOL_S);
-	fprintf(out,"  leave <network>    - Leave a network"ZT_EOL_S);
+	fprintf(out,"  info                    - Display status info"ZT_EOL_S);
+	fprintf(out,"  listpeers               - List all peers"ZT_EOL_S);
+	fprintf(out,"  listnetworks            - List all networks"ZT_EOL_S);
+	fprintf(out,"  join <network>          - Join a network"ZT_EOL_S);
+	fprintf(out,"  leave <network>         - Leave a network"ZT_EOL_S);
+	fprintf(out,"  set <network> <setting> - Set a network setting"ZT_EOL_S);
 }
 }
 
 
 static std::string cliFixJsonCRs(const std::string &s)
 static std::string cliFixJsonCRs(const std::string &s)
@@ -130,10 +132,7 @@ static int cli(int argc,char **argv)
 #endif
 #endif
 {
 {
 	unsigned int port = 0;
 	unsigned int port = 0;
-	std::string homeDir;
-	std::string command;
-	std::string arg1;
-	std::string authToken;
+	std::string homeDir,command,arg1,arg2,authToken;
 	std::string ip("127.0.0.1");
 	std::string ip("127.0.0.1");
 	bool json = false;
 	bool json = false;
 	for(int i=1;i<argc;++i) {
 	for(int i=1;i<argc;++i) {
@@ -205,7 +204,9 @@ static int cli(int argc,char **argv)
 					return 0;
 					return 0;
 			}
 			}
 		} else {
 		} else {
-			if (command.length())
+			if (arg1.length())
+				arg2 = argv[i];
+			else if (command.length())
 				arg1 = argv[i];
 				arg1 = argv[i];
 			else command = argv[i];
 			else command = argv[i];
 		}
 		}
@@ -553,6 +554,44 @@ static int cli(int argc,char **argv)
 			printf("%u %s %s"ZT_EOL_S,scode,command.c_str(),responseBody.c_str());
 			printf("%u %s %s"ZT_EOL_S,scode,command.c_str(),responseBody.c_str());
 			return 1;
 			return 1;
 		}
 		}
+	} else if (command == "set") {
+		if (arg1.length() != 16) {
+			cliPrintHelp(argv[0],stderr);
+			return 2;
+		}
+		std::size_t eqidx = arg2.find('=');
+		if (eqidx != std::string::npos) {
+			if ((arg2.substr(0,eqidx) == "allowManaged")||(arg2.substr(0,eqidx) == "allowGlobal")||(arg2.substr(0,eqidx) == "allowDefault")) {
+				char jsons[1024];
+				Utils::snprintf(jsons,sizeof(jsons),"{\"%s\":%s}",
+					arg2.substr(0,eqidx).c_str(),
+					(((arg2.substr(eqidx,2) == "=t")||(arg2.substr(eqidx,2) == "=1")) ? "true" : "false"));
+				char cl[128];
+				Utils::snprintf(cl,sizeof(cl),"%u",(unsigned int)strlen(jsons));
+				requestHeaders["Content-Type"] = "application/json";
+				requestHeaders["Content-Length"] = cl;
+				unsigned int scode = Http::POST(
+					1024 * 1024 * 16,
+					60000,
+					(const struct sockaddr *)&addr,
+					(std::string("/network/") + arg1).c_str(),
+					requestHeaders,
+					jsons,
+					strlen(jsons),
+					responseHeaders,
+					responseBody);
+				if (scode == 200) {
+					printf("%s",cliFixJsonCRs(responseBody).c_str());
+					return 0;
+				} else {
+					printf("%u %s %s"ZT_EOL_S,scode,command.c_str(),responseBody.c_str());
+					return 1;
+				}
+			}
+		} else {
+			cliPrintHelp(argv[0],stderr);
+			return 2;
+		}
 	} else {
 	} else {
 		cliPrintHelp(argv[0],stderr);
 		cliPrintHelp(argv[0],stderr);
 		return 0;
 		return 0;