diff scictl/scictl.c @ 50:b474f0985e39

scictl: add API key support
author David Demelier <markand@malikania.fr>
date Wed, 17 Aug 2022 09:11:58 +0200
parents 081e1c258e64
children 95bc6b4ec753
line wrap: on
line diff
--- a/scictl/scictl.c	Wed Aug 17 09:11:44 2022 +0200
+++ b/scictl/scictl.c	Wed Aug 17 09:11:58 2022 +0200
@@ -322,12 +322,22 @@
 main(int argc, char **argv)
 {
 	int ch;
+	const char *env;
 
 	opterr = 0;
 	setenv("POSIXLY_CORRECT", "1", 1);
 
-	while ((ch = getopt(argc, argv, "u:")) != -1) {
+	/* Environment first, options after. */
+	if ((env = getenv("SCI_API_URL")))
+		util_strlcpy(apiconf.baseurl, env, sizeof (apiconf.baseurl));
+	if ((env = getenv("SCI_API_KEY")))
+		util_strlcpy(apiconf.key, env, sizeof (apiconf.key));
+
+	while ((ch = getopt(argc, argv, "k:u:")) != -1) {
 		switch (ch) {
+		case 'k':
+			util_strlcpy(apiconf.key, optarg, sizeof (apiconf.key));
+			break;
 		case 'u':
 			util_strlcpy(apiconf.baseurl, optarg, sizeof (apiconf.baseurl));
 			break;
@@ -352,6 +362,10 @@
 	if (strcmp(argv[0], "help") == 0)
 		help();
 
+	/* At this step, every command requires an API key. */
+	if (strlen(apiconf.key) == 0)
+		util_die("abort: no API key defined\n");
+
 	for (size_t i = 0; commands[i].name; ++i) {
 		if (strcmp(commands[i].name, argv[0]) == 0) {
 			commands[i].exec(argc, argv);