aboutsummaryrefslogtreecommitdiff
path: root/mastoapi.c
diff options
context:
space:
mode:
authorgrunfink <grunfink@comam.es>2025-07-27 04:08:37 +0200
committergrunfink <grunfink@comam.es>2025-07-27 04:08:37 +0200
commit2e982c79e1385b568d407f6e45f2b062761dec12 (patch)
treec5a82fd2123e4deb3072d894b0c5799391c10402 /mastoapi.c
parent6ec9ec4ec5ac588059391556ec38ec32fcbcd616 (diff)
mastoapi: Fixed metadata in verify_credentials.
Diffstat (limited to 'mastoapi.c')
-rw-r--r--mastoapi.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/mastoapi.c b/mastoapi.c
index 7fb995a..798edec 100644
--- a/mastoapi.c
+++ b/mastoapi.c
@@ -1271,8 +1271,31 @@ void credentials_get(char **body, char **ctype, int *status, snac snac)
acct = xs_dict_append(acct, "header", header);
acct = xs_dict_append(acct, "header_static", header);
- const xs_dict *metadata = xs_dict_get(snac.config, "metadata");
- if (xs_type(metadata) == XSTYPE_DICT) {
+ xs *metadata = NULL;
+ const xs_dict *md = xs_dict_get(snac.config, "metadata");
+
+ if (xs_is_dict(md))
+ metadata = xs_dup(md);
+ else
+ if (xs_is_string(md)) {
+ metadata = xs_dict_new();
+ xs *l = xs_split(md, "\n");
+ const char *ll;
+
+ xs_list_foreach(l, ll) {
+ xs *kv = xs_split_n(ll, "=", 1);
+ const char *k = xs_list_get(kv, 0);
+ const char *v = xs_list_get(kv, 1);
+
+ if (k && v) {
+ xs *kk = xs_strip_i(xs_dup(k));
+ xs *vv = xs_strip_i(xs_dup(v));
+ metadata = xs_dict_set(metadata, kk, vv);
+ }
+ }
+ }
+
+ if (xs_is_dict(metadata)) {
xs *fields = xs_list_new();
const xs_str *k;
const xs_str *v;