annotate scid/scid.c @ 44:576f4b1ec79f

scid: implement API authentication
author David Demelier <markand@malikania.fr>
date Thu, 11 Aug 2022 21:24:07 +0200
parents 1d0ddf9e6efd
children 85c59fbf1407
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
1 /*
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
2 * scid.c -- main scid file and configuration
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
3 *
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
4 * Copyright (c) 2021-2022 David Demelier <markand@malikania.fr>
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
5 *
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
8 * copyright notice and this permission notice appear in all copies.
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
9 *
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
17 */
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
18
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdio.h>
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include "db.h"
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include "log.h"
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include "scid.h"
28
4c16bb25e4f1 scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
25 #include "theme.h"
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 struct scid scid = {
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 .dbpath = VARDIR "/db/sci/sci.db"
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 };
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
44
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
31 static void
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
32 init_misc(void)
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 {
33
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
34 log_open("scid: version " VERSION);
1d0ddf9e6efd misc: general documentation
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
35 log_info("scid: opening database %s", scid.dbpath);
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
44
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
37 theme_open(scid.themedir);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
38 }
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
39
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
40 static void
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
41 init_database(void)
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
42 {
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 if (db_open(scid.dbpath) < 0)
44
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
44 log_die("scid: unable to open database");
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
45
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
46 /* Retrieve or create the API key if not existing. */
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
47 switch (db_key_get(scid.apikey, sizeof (scid.apikey))) {
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
48 case 0:
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
49 /* Not found, create immediately. */
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
50 if (db_key_init(scid.apikey, sizeof (scid.apikey)) < 0)
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
51 log_die("scid: unable to insert key");
28
4c16bb25e4f1 scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
52
44
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
53 break;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
54 case -1:
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
55 log_die("scid: unable to retrieve API key in database");
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
56 break;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
57 default:
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
58 /* We already fetched it. */
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
59 break;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
60 }
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
61 }
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
62
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
63 void
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
64 scid_init(void)
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
65 {
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
66 init_misc();
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
67 init_database();
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 }
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 void
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 scid_finish(void)
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 {
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 db_finish();
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 log_finish();
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 }