comparison 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
comparison
equal deleted inserted replaced
49:9d8df0c1db63 50:b474f0985e39
320 320
321 int 321 int
322 main(int argc, char **argv) 322 main(int argc, char **argv)
323 { 323 {
324 int ch; 324 int ch;
325 const char *env;
325 326
326 opterr = 0; 327 opterr = 0;
327 setenv("POSIXLY_CORRECT", "1", 1); 328 setenv("POSIXLY_CORRECT", "1", 1);
328 329
329 while ((ch = getopt(argc, argv, "u:")) != -1) { 330 /* Environment first, options after. */
331 if ((env = getenv("SCI_API_URL")))
332 util_strlcpy(apiconf.baseurl, env, sizeof (apiconf.baseurl));
333 if ((env = getenv("SCI_API_KEY")))
334 util_strlcpy(apiconf.key, env, sizeof (apiconf.key));
335
336 while ((ch = getopt(argc, argv, "k:u:")) != -1) {
330 switch (ch) { 337 switch (ch) {
338 case 'k':
339 util_strlcpy(apiconf.key, optarg, sizeof (apiconf.key));
340 break;
331 case 'u': 341 case 'u':
332 util_strlcpy(apiconf.baseurl, optarg, sizeof (apiconf.baseurl)); 342 util_strlcpy(apiconf.baseurl, optarg, sizeof (apiconf.baseurl));
333 break; 343 break;
334 case '?': 344 case '?':
335 util_die("abort: invalid option: %c\n", ch); 345 util_die("abort: invalid option: %c\n", ch);
349 359
350 if (argc < 1) 360 if (argc < 1)
351 usage(); 361 usage();
352 if (strcmp(argv[0], "help") == 0) 362 if (strcmp(argv[0], "help") == 0)
353 help(); 363 help();
364
365 /* At this step, every command requires an API key. */
366 if (strlen(apiconf.key) == 0)
367 util_die("abort: no API key defined\n");
354 368
355 for (size_t i = 0; commands[i].name; ++i) { 369 for (size_t i = 0; commands[i].name; ++i) {
356 if (strcmp(commands[i].name, argv[0]) == 0) { 370 if (strcmp(commands[i].name, argv[0]) == 0) {
357 commands[i].exec(argc, argv); 371 commands[i].exec(argc, argv);
358 return 0; 372 return 0;