Mercurial > sci
annotate scid/main.c @ 80:71cd8447e3a4
misc: update copyright years
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 01 Feb 2023 13:14:46 +0100 |
parents | 85c59fbf1407 |
children |
rev | line source |
---|---|
18 | 1 /* |
2 * scid.c -- main scid(8) program file | |
3 * | |
80
71cd8447e3a4
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
4 * Copyright (c) 2021-2023 David Demelier <markand@malikania.fr> |
18 | 5 * |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
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 | 23 #include <unistd.h> |
24 | |
54
85c59fbf1407
scid: add commands to retrieve API key
David Demelier <markand@malikania.fr>
parents:
53
diff
changeset
|
25 #include "db.h" |
18 | 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 | 30 |
26
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
18
diff
changeset
|
31 static void |
18 | 32 usage(void) |
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 | 44 exit(1); |
45 } | |
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 | 74 int |
75 main(int argc, char **argv) | |
76 { | |
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 | 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 | 81 switch (ch) { |
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 | 84 break; |
85 case 'f': | |
33
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
32
diff
changeset
|
86 run = &(http_fcgi_run); |
18 | 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 | 91 default: |
92 usage(); | |
93 break; | |
94 } | |
95 } | |
96 | |
97 argc -= optind; | |
98 argv += optind; | |
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 | 126 } |