summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.c16
-rw-r--r--snac.h15
2 files changed, 24 insertions, 7 deletions
diff --git a/data.c b/data.c
index 383cd38..c56b6a0 100644
--- a/data.c
+++ b/data.c
@@ -130,6 +130,7 @@ void user_free(snac *snac)
xs_free(snac->uid);
xs_free(snac->basedir);
xs_free(snac->config);
+ xs_free(snac->config_o);
xs_free(snac->key);
xs_free(snac->actor);
xs_free(snac->md5);
@@ -172,7 +173,22 @@ int user_open(snac *snac, const char *uid)
if ((snac->key = xs_json_loads(key_data)) != NULL) {
snac->actor = xs_fmt("%s/%s", srv_baseurl, uid);
snac->md5 = xs_md5_hex(snac->actor, strlen(snac->actor));
+
+ /* everything is ok right now */
ret = 1;
+
+ /* does it have a configuration override? */
+ xs *cfg_file_o = xs_fmt("%s/user_o.json", snac->basedir);
+ if ((f = fopen(cfg_file_o, "r")) != NULL) {
+ xs *j = xs_readall(f);
+ fclose(f);
+
+ if ((snac->config_o = xs_json_loads(j)) == NULL)
+ srv_log(xs_fmt("cannot parse '%s'", cfg_file_o));
+ }
+
+ if (snac->config_o == NULL)
+ snac->config_o = xs_dict_new();
}
else
srv_log(xs_fmt("cannot parse '%s'", key_file));
diff --git a/snac.h b/snac.h
index 017ccea..be205d2 100644
--- a/snac.h
+++ b/snac.h
@@ -1,7 +1,7 @@
/* snac - A simple, minimalistic ActivityPub instance */
/* copyright (c) 2022 - 2023 grunfink / MIT license */
-#define VERSION "2.22"
+#define VERSION "2.23-dev"
#define USER_AGENT "snac/" VERSION
@@ -30,12 +30,13 @@ int srv_open(char *basedir, int auto_upgrade);
void srv_free(void);
typedef struct _snac {
- d_char *uid; /* uid */
- d_char *basedir; /* user base directory */
- d_char *config; /* user configuration */
- d_char *key; /* keypair */
- d_char *actor; /* actor url */
- d_char *md5; /* actor url md5 */
+ xs_str *uid; /* uid */
+ xs_str *basedir; /* user base directory */
+ xs_dict *config; /* user configuration */
+ xs_dict *config_o; /* user configuration admin override */
+ xs_dict *key; /* keypair */
+ xs_str *actor; /* actor url */
+ xs_str *md5; /* actor url md5 */
} snac;
int user_open(snac *snac, const char *uid);