Mercurial > sci
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 |
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 } |