libgluonutil: merge custom.json into site

This commit is contained in:
lemoer 2021-01-06 11:59:37 +01:00
parent dd94e84f77
commit 9aae9cf3a1

View File

@ -253,6 +253,11 @@ bool gluonutil_has_domains(void) {
return (access("/lib/gluon/domains/", F_OK) == 0); return (access("/lib/gluon/domains/", F_OK) == 0);
} }
bool gluonutil_has_custom(void) {
return (access("/lib/gluon/custom.json", F_OK) == 0);
}
char * gluonutil_get_domain(void) { char * gluonutil_get_domain(void) {
if (!gluonutil_has_domains()) if (!gluonutil_has_domains())
return NULL; return NULL;
@ -328,33 +333,45 @@ char * gluonutil_get_primary_domain(void) {
struct json_object * gluonutil_load_site_config(void) { struct json_object * gluonutil_load_site_config(void) {
char *domain_code = NULL; char *domain_code = NULL;
struct json_object *site = NULL, *domain = NULL; struct json_object *site = NULL, *domain = NULL, *custom = NULL;
site = json_object_from_file("/lib/gluon/site.json"); site = json_object_from_file("/lib/gluon/site.json");
if (!site) if (!site)
return NULL; return NULL;
if (!gluonutil_has_domains()) if (gluonutil_has_domains()) {
return site; domain_code = gluonutil_get_domain();
if (!domain_code)
goto err;
domain_code = gluonutil_get_domain(); {
if (!domain_code) const char *domain_path_fmt = "/lib/gluon/domains/%s.json";
goto err; char domain_path[strlen(domain_path_fmt) + strlen(domain_code)];
snprintf(domain_path, sizeof(domain_path), domain_path_fmt, domain_code);
free(domain_code);
{ domain = json_object_from_file(domain_path);
const char *domain_path_fmt = "/lib/gluon/domains/%s.json"; }
char domain_path[strlen(domain_path_fmt) + strlen(domain_code)]; if (!domain)
snprintf(domain_path, sizeof(domain_path), domain_path_fmt, domain_code); goto err;
free(domain_code);
domain = json_object_from_file(domain_path); site = merge_json(site, domain);
} }
if (!domain)
goto err;
return merge_json(site, domain); if (gluonutil_has_custom()) {
custom = json_object_from_file("/lib/gluon/custom.json");
if (!custom)
goto err;
site = merge_json(site, custom);
}
return site;
err: err:
if (domain)
json_object_put(domain);
json_object_put(site); json_object_put(site);
return NULL; return NULL;
} }