commit 09d2684
default
·
2024-11-23 16:08:57 +0000 UTC
parent 775fb14
The 'metadata' field in user.json is now a string instead of a dict.
2 files changed,
+69,
-30
M
html.c
+24,
-1
1@@ -1218,7 +1218,30 @@ xs_dict *msg_actor(snac *snac)
2 }
3
4 /* add the metadata as attachments of PropertyValue */
5- const xs_dict *metadata = xs_dict_get(snac->config, "metadata");
6+ xs *metadata = NULL;
7+ const xs_dict *md = xs_dict_get(snac->config, "metadata");
8+
9+ if (xs_type(md) == XSTYPE_DICT)
10+ metadata = xs_dup(md);
11+ else
12+ if (xs_type(md) == XSTYPE_STRING) {
13+ metadata = xs_dict_new();
14+ xs *l = xs_split(md, "\r\n");
15+ const char *ll;
16+
17+ xs_list_foreach(l, ll) {
18+ xs *kv = xs_split_n(ll, "=", 1);
19+ const char *k = xs_list_get(kv, 0);
20+ const char *v = xs_list_get(kv, 1);
21+
22+ if (k && v) {
23+ xs *kk = xs_strip_i(xs_dup(k));
24+ xs *vv = xs_strip_i(xs_dup(v));
25+ metadata = xs_dict_set(metadata, kk, vv);
26+ }
27+ }
28+ }
29+
30 if (xs_type(metadata) == XSTYPE_DICT) {
31 xs *attach = xs_list_new();
32 const xs_str *k;
M
html.c
+45,
-29
1@@ -843,7 +843,31 @@ static xs_html *html_user_body(snac *user, int read_only)
2 xs_html_add(top_user,
3 top_user_bio);
4
5- const xs_dict *metadata = xs_dict_get(user->config, "metadata");
6+ xs *metadata = NULL;
7+ const xs_dict *md = xs_dict_get(user->config, "metadata");
8+
9+ if (xs_type(md) == XSTYPE_DICT)
10+ metadata = xs_dup(md);
11+ else
12+ if (xs_type(md) == XSTYPE_STRING) {
13+ /* convert to dict for easier iteration */
14+ metadata = xs_dict_new();
15+ xs *l = xs_split(md, "\r\n");
16+ const char *ll;
17+
18+ xs_list_foreach(l, ll) {
19+ xs *kv = xs_split_n(ll, "=", 1);
20+ const char *k = xs_list_get(kv, 0);
21+ const char *v = xs_list_get(kv, 1);
22+
23+ if (k && v) {
24+ xs *kk = xs_strip_i(xs_dup(k));
25+ xs *vv = xs_strip_i(xs_dup(v));
26+ metadata = xs_dict_set(metadata, kk, vv);
27+ }
28+ }
29+ }
30+
31 if (xs_type(metadata) == XSTYPE_DICT) {
32 const xs_str *k;
33 const xs_str *v;
34@@ -1026,19 +1050,28 @@ xs_html *html_top_controls(snac *snac)
35 const xs_val *auto_boost = xs_dict_get(snac->config, "auto_boost");
36 const xs_val *coll_thrds = xs_dict_get(snac->config, "collapse_threads");
37
38- xs *metadata = xs_str_new(NULL);
39+ xs *metadata = NULL;
40 const xs_dict *md = xs_dict_get(snac->config, "metadata");
41- const xs_str *k;
42- const xs_str *v;
43
44- int c = 0;
45- while (xs_dict_next(md, &k, &v, &c)) {
46- xs *kp = xs_fmt("%s=%s", k, v);
47+ if (xs_type(md) == XSTYPE_DICT) {
48+ const xs_str *k;
49+ const xs_str *v;
50+
51+ metadata = xs_str_new(NULL);
52
53- if (*metadata)
54- metadata = xs_str_cat(metadata, "\n");
55- metadata = xs_str_cat(metadata, kp);
56+ xs_dict_foreach(md, k, v) {
57+ xs *kp = xs_fmt("%s=%s", k, v);
58+
59+ if (*metadata)
60+ metadata = xs_str_cat(metadata, "\n");
61+ metadata = xs_str_cat(metadata, kp);
62+ }
63 }
64+ else
65+ if (xs_type(md) == XSTYPE_STRING)
66+ metadata = xs_dup(md);
67+ else
68+ metadata = xs_str_new(NULL);
69
70 xs *user_setup_action = xs_fmt("%s/admin/user-setup", snac->actor);
71
72@@ -3706,25 +3739,8 @@ int html_post_handler(const xs_dict *req, const char *q_path,
73 else
74 snac.config = xs_dict_set(snac.config, "collapse_threads", xs_stock(XSTYPE_FALSE));
75
76- if ((v = xs_dict_get(p_vars, "metadata")) != NULL) {
77- /* split the metadata and store it as a dict */
78- xs_dict *md = xs_dict_new();
79- xs *l = xs_split(v, "\n");
80- xs_list *p = l;
81- const xs_str *kp;
82-
83- while (xs_list_iter(&p, &kp)) {
84- xs *kpl = xs_split_n(kp, "=", 1);
85- if (xs_list_len(kpl) == 2) {
86- xs *k2 = xs_strip_i(xs_dup(xs_list_get(kpl, 0)));
87- xs *v2 = xs_strip_i(xs_dup(xs_list_get(kpl, 1)));
88-
89- md = xs_dict_set(md, k2, v2);
90- }
91- }
92-
93- snac.config = xs_dict_set(snac.config, "metadata", md);
94- }
95+ if ((v = xs_dict_get(p_vars, "metadata")) != NULL)
96+ snac.config = xs_dict_set(snac.config, "metadata", v);
97
98 /* uploads */
99 const char *uploads[] = { "avatar", "header", NULL };