annotate scid/main.c @ 55:38901547a76c

misc: improve error message
author David Demelier <markand@malikania.fr>
date Wed, 17 Aug 2022 11:13:36 +0200
parents 85c59fbf1407
children 71cd8447e3a4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * scid.c -- main scid(8) program file
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
32
081e1c258e64 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
4 * Copyright (c) 2021-2022 David Demelier <markand@malikania.fr>
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <stdio.h>
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
20 #include <stdlib.h>
54
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
21 #include <string.h>
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
22 #include <time.h>
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <unistd.h>
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
54
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
25 #include "db.h"
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include "http.h"
54
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
27 #include "log.h"
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
28 #include "scid.h"
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
29 #include "util.h"
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
31 static void
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 usage(void)
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 {
54
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
34 fprintf(stderr, "usage: scid [-d database] [-s sock] [-t themedir] [command]\n");
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
35 exit(1);
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
36 }
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
37
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
38 static void
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
39 help(void)
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
40 {
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
41 fprintf(stderr, "usage: scid\n");
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
42 fprintf(stderr, " scid api-get\n");
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
43 fprintf(stderr, " scid api-reset\n");
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 exit(1);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 }
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
46
54
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
47 static void
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
48 cmd_api_get(int argc, char **argv)
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
49 {
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
50 char key[SCID_API_KEY_MAX] = {0};
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
51
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
52 if (db_key_get(key, sizeof (key)) == 1)
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
53 puts(key);
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
54 }
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
55
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
56 static void
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
57 cmd_api_reset(int argc, char **argv)
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
58 {
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
59 char key[SCID_API_KEY_MAX] = {0};
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
60
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
61 if (db_key_init(key, sizeof (key)) == 0)
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
62 printf("new key: %s\n", key);
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
63 }
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
64
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
65 static const struct {
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
66 const char *name;
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
67 void (*exec)(int, char **);
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
68 } commands[] = {
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
69 { "api-get", cmd_api_get },
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
70 { "api-reset", cmd_api_reset },
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
71 { NULL, NULL }
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
72 };
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
73
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 int
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 main(int argc, char **argv)
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 {
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 int ch;
33
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
78 void (*run)(void) = &(http_cgi_run);
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
79
53
319979427566 misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
80 while ((ch = util_getopt(argc, argv, "d:ft:")) != -1) {
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 switch (ch) {
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 case 'd':
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
83 util_strlcpy(scid.dbpath, optarg, sizeof (scid.dbpath));
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 break;
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 case 'f':
33
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
86 run = &(http_fcgi_run);
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 break;
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
88 case 't':
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
89 util_strlcpy(scid.themedir, optarg, sizeof (scid.themedir));
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
90 break;
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 default:
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 usage();
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 break;
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 }
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 }
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
96
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 argc -= optind;
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 argv += optind;
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
99
54
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
100 /* Always logs first. */
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
101 scid_init(SCID_INIT_LOG);
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
102 srand(time(NULL));
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
103
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
104 /* Check if there is a command provided, otherwise run as HTTP. */
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
105 if (argc == 0) {
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
106 scid_init(SCID_INIT_DATABASE | SCID_INIT_THEME);
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
107 log_info("scid: " VERSION);
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
108 run();
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
109 } else {
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
110 if (strcmp(argv[0], "help") == 0)
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
111 help();
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
112
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
113 for (size_t i = 0; commands[i].name; ++i) {
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
114 if (strcmp(commands[i].name, argv[0]) == 0) {
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
115 scid_init(SCID_INIT_DATABASE);
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
116 commands[i].exec(argc, argv);
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
117 goto over;
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
118 }
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
119 }
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
120
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
121 usage();
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
122 }
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
123
85c59fbf1407 scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents: 53
diff changeset
124 over:
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
125 scid_finish();
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 }