commit 5b93e90
default
·
2023-04-23 03:33:54 +0000 UTC
parent 99529a9
Added mastoapi code for account search.
4 files changed,
+46,
-6
+2,
-2
1@@ -46,7 +46,7 @@ const char *default_avatar_base64(void)
2 }
3
4
5-int activitypub_request(snac *snac, char *url, d_char **data)
6+int activitypub_request(snac *snac, const char *url, xs_dict **data)
7 /* request an object */
8 {
9 int status;
10@@ -91,7 +91,7 @@ int activitypub_request(snac *snac, char *url, d_char **data)
11 }
12
13
14-int actor_request(snac *snac, char *actor, d_char **data)
15+int actor_request(snac *snac, const char *actor, xs_dict **data)
16 /* request an actor */
17 {
18 int status, status2;
+40,
-0
1@@ -1179,6 +1179,46 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
2 *ctype = "application/json";
3 status = 200;
4 }
5+ else
6+ if (strcmp(cmd, "/v2/search") == 0) {
7+ const char *q = xs_dict_get(args, "q");
8+ const char *type = xs_dict_get(args, "type");
9+ const char *offset = xs_dict_get(args, "offset");
10+
11+ xs *acl = xs_list_new();
12+ xs *stl = xs_list_new();
13+ xs *htl = xs_list_new();
14+ xs *res = xs_dict_new();
15+
16+ if (xs_is_null(offset) || strcmp(offset, "0") == 0) {
17+ /* reply something only for offset 0; otherwise,
18+ apps like Tusky keep asking again and again */
19+
20+ if (!xs_is_null(q) && strcmp(type, "accounts") == 0) {
21+ /* do a webfinger query */
22+ char *actor = NULL;
23+ char *user = NULL;
24+
25+ if (valid_status(webfinger_request(q, &actor, &user))) {
26+ xs *actor_o = NULL;
27+
28+ if (valid_status(actor_request(&snac1, actor, &actor_o))) {
29+ xs *acct = mastoapi_account(actor_o);
30+
31+ acl = xs_list_append(acl, acct);
32+ }
33+ }
34+ }
35+ }
36+
37+ res = xs_dict_append(res, "accounts", acl);
38+ res = xs_dict_append(res, "statuses", stl);
39+ res = xs_dict_append(res, "hashtags", htl);
40+
41+ *body = xs_json_dumps_pp(res, 4);
42+ *ctype = "application/json";
43+ status = 200;
44+ }
45
46 /* user cleanup */
47 if (logged_in)
M
snac.h
+3,
-3
1@@ -183,7 +183,7 @@ int check_signature(snac *snac, xs_dict *req, xs_str **err);
2
3 void httpd(void);
4
5-int webfinger_request(char *qs, char **actor, char **user);
6+int webfinger_request(const char *qs, char **actor, char **user);
7 int webfinger_get_handler(d_char *req, char *q_path,
8 char **body, int *b_size, char **ctype);
9
10@@ -201,8 +201,8 @@ d_char *msg_delete(snac *snac, char *id);
11 d_char *msg_actor(snac *snac);
12 xs_dict *msg_update(snac *snac, xs_dict *object);
13
14-int activitypub_request(snac *snac, char *url, d_char **data);
15-int actor_request(snac *snac, char *actor, d_char **data);
16+int activitypub_request(snac *snac, const char *url, xs_dict **data);
17+int actor_request(snac *snac, const char *actor, xs_dict **data);
18 int send_to_inbox_raw(const char *keyid, const char *seckey,
19 const xs_str *inbox, const xs_dict *msg,
20 xs_val **payload, int *p_size, int timeout);
+1,
-1
1@@ -8,7 +8,7 @@
2
3 #include "snac.h"
4
5-int webfinger_request(char *qs, char **actor, char **user)
6+int webfinger_request(const char *qs, char **actor, char **user)
7 /* queries the webfinger for qs and fills the required fields */
8 {
9 int status;