commit 5a3c7cf
default
·
2023-09-18 09:13:30 +0000 UTC
parent 931b871
Added web UI to store profile metadata (as key/value pairs).
1 files changed,
+41,
-0
M
html.c
M
html.c
+41,
-0
1@@ -581,6 +581,11 @@ xs_str *html_top_controls(snac *snac, xs_str *s)
2 "<p><input type=\"checkbox\" name=\"bot\" id=\"bot\" %s>\n"
3 "<label for=\"bot\">%s</label></p>\n"
4
5+ "<p>%s:<br>\n"
6+ "<textarea name=\"metadata\" cols=\"40\" rows=\"4\" "
7+ "placeholder=\"Blog=https:/" "/example.com/my-blog\nGPG Key=1FA54\n...\">"
8+ "%s</textarea></p>\n"
9+
10 "<p>%s:<br>\n"
11 "<input type=\"password\" name=\"passwd1\" value=\"\"></p>\n"
12
13@@ -636,6 +641,19 @@ xs_str *html_top_controls(snac *snac, xs_str *s)
14 xs *es5 = encode_html(telegram_chat_id);
15 xs *es6 = encode_html(purge_days);
16
17+ xs *metadata = xs_str_new(NULL);
18+ xs_dict *md = xs_dict_get(snac->config, "metadata");
19+ xs_str *k;
20+ xs_str *v;
21+
22+ while (xs_dict_iter(&md, &k, &v)) {
23+ xs *kp = xs_fmt("%s=%s", k, v);
24+
25+ if (*metadata)
26+ metadata = xs_str_cat(metadata, "\n");
27+ metadata = xs_str_cat(metadata, kp);
28+ }
29+
30 xs *s1 = xs_fmt(_tmpl,
31 L("New Post..."),
32 snac->actor,
33@@ -686,6 +704,10 @@ xs_str *html_top_controls(snac *snac, xs_str *s)
34 L("Drop direct messages from people you don't follow"),
35 xs_type(bot) == XSTYPE_TRUE ? "checked" : "",
36 L("This account is a bot"),
37+
38+ L("Profile metadata (key=value pairs in each line)"),
39+ metadata,
40+
41 L("New password"),
42 L("Repeat new password"),
43 L("Update user info")
44@@ -2467,6 +2489,25 @@ int html_post_handler(const xs_dict *req, const char *q_path,
45 snac.config = xs_dict_set(snac.config, "bot", xs_stock_true);
46 else
47 snac.config = xs_dict_set(snac.config, "bot", xs_stock_false);
48+ if ((v = xs_dict_get(p_vars, "metadata")) != NULL) {
49+ /* split the metadata and store it as a dict */
50+ xs_dict *md = xs_dict_new();
51+ xs *l = xs_split(v, "\n");
52+ xs_list *p = l;
53+ xs_str *kp;
54+
55+ while (xs_list_iter(&p, &kp)) {
56+ xs *kpl = xs_split_n(kp, "=", 1);
57+ if (xs_list_len(kpl) == 2) {
58+ xs *k2 = xs_strip_i(xs_dup(xs_list_get(kpl, 0)));
59+ xs *v2 = xs_strip_i(xs_dup(xs_list_get(kpl, 1)));
60+
61+ md = xs_dict_set(md, k2, v2);
62+ }
63+ }
64+
65+ snac.config = xs_dict_set(snac.config, "metadata", md);
66+ }
67
68 /* uploads */
69 const char *uploads[] = { "avatar", "header", NULL };