commit a22bec3
Paul Martin
·
2024-12-31 17:25:38 +0000 UTC
parent 4f34926
Fix verify_links Stored in user.json as a string, but it was assumed to be a dict.
1 files changed,
+25,
-2
M
utils.c
M
utils.c
+25,
-2
1@@ -446,7 +446,8 @@ int deluser(snac *user)
2 void verify_links(snac *user)
3 /* verifies a user's links */
4 {
5- const xs_dict *p = xs_dict_get(user->config, "metadata");
6+ xs *metadata = NULL;
7+ const xs_dict *md = xs_dict_get(user->config, "metadata");
8 const char *k, *v;
9 int changed = 0;
10
11@@ -454,8 +455,30 @@ void verify_links(snac *user)
12 headers = xs_dict_append(headers, "accept", "text/html");
13 headers = xs_dict_append(headers, "user-agent", USER_AGENT " (link verify)");
14
15+ if (xs_type(md) == XSTYPE_DICT)
16+ metadata = xs_dup(md);
17+ else
18+ if (xs_type(md) == XSTYPE_STRING) {
19+ /* convert to dict for easier iteration */
20+ metadata = xs_dict_new();
21+ xs *l = xs_split(md, "\n");
22+ const char *ll;
23+
24+ xs_list_foreach(l, ll) {
25+ xs *kv = xs_split_n(ll, "=", 1);
26+ const char *k = xs_list_get(kv, 0);
27+ const char *v = xs_list_get(kv, 1);
28+
29+ if (k && v) {
30+ xs *kk = xs_strip_i(xs_dup(k));
31+ xs *vv = xs_strip_i(xs_dup(v));
32+ metadata = xs_dict_set(metadata, kk, vv);
33+ }
34+ }
35+ }
36+
37 int c = 0;
38- while (p && xs_dict_next(p, &k, &v, &c)) {
39+ while (metadata && xs_dict_next(metadata, &k, &v, &c)) {
40 /* not an https link? skip */
41 if (!xs_startswith(v, "https:/" "/"))
42 continue;