summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--main.c3
-rw-r--r--snac.h9
-rw-r--r--webfinger.c27
3 files changed, 30 insertions, 9 deletions
diff --git a/main.c b/main.c
index ed8f199..5b8fe6d 100644
--- a/main.c
+++ b/main.c
@@ -47,8 +47,9 @@ int usage(void)
47 printf("unlimit {basedir} {uid} {actor} Unlimits an actor\n"); 47 printf("unlimit {basedir} {uid} {actor} Unlimits an actor\n");
48 printf("verify_links {basedir} {uid} Verifies a user's links (in the metadata)\n"); 48 printf("verify_links {basedir} {uid} Verifies a user's links (in the metadata)\n");
49 printf("search {basedir} {uid} {regex} Searches posts by content\n"); 49 printf("search {basedir} {uid} {regex} Searches posts by content\n");
50 printf("aka {basedir} {uid} {actor} Sets actor (@user@host or url) as an a.k.a.\n"); 50 printf("aka {basedir} {uid} {actor} Sets actor (@user@host or url) as the a.k.a.\n");
51 printf("export_csv {basedir} {uid} Exports data as CSV files into current directory\n"); 51 printf("export_csv {basedir} {uid} Exports data as CSV files into current directory\n");
52 printf("migrate {basedir} {uid} Migrates the account to the one set as the a.k.a.\n");
52 53
53 return 1; 54 return 1;
54} 55}
diff --git a/snac.h b/snac.h
index 0d93659..693844e 100644
--- a/snac.h
+++ b/snac.h
@@ -284,10 +284,11 @@ int check_signature(const xs_dict *req, xs_str **err);
284srv_state *srv_state_op(xs_str **fname, int op); 284srv_state *srv_state_op(xs_str **fname, int op);
285void httpd(void); 285void httpd(void);
286 286
287int webfinger_request_signed(snac *snac, const char *qs, char **actor, char **user); 287int webfinger_request_signed(snac *snac, const char *qs, xs_str **actor, xs_str **user);
288int webfinger_request(const char *qs, char **actor, char **user); 288int webfinger_request(const char *qs, xs_str **actor, xs_str **user);
289int webfinger_get_handler(xs_dict *req, char *q_path, 289int webfinger_request_fake(const char *qs, xs_str **actor, xs_str **user);
290 char **body, int *b_size, char **ctype); 290int webfinger_get_handler(xs_dict *req, const char *q_path,
291 xs_val **body, int *b_size, char **ctype);
291 292
292const char *default_avatar_base64(void); 293const char *default_avatar_base64(void);
293 294
diff --git a/webfinger.c b/webfinger.c
index 0c18362..bd7f946 100644
--- a/webfinger.c
+++ b/webfinger.c
@@ -8,7 +8,7 @@
8 8
9#include "snac.h" 9#include "snac.h"
10 10
11int webfinger_request_signed(snac *snac, const char *qs, char **actor, char **user) 11int webfinger_request_signed(snac *snac, const char *qs, xs_str **actor, xs_str **user)
12/* queries the webfinger for qs and fills the required fields */ 12/* queries the webfinger for qs and fills the required fields */
13{ 13{
14 int status; 14 int status;
@@ -117,15 +117,34 @@ int webfinger_request_signed(snac *snac, const char *qs, char **actor, char **us
117} 117}
118 118
119 119
120int webfinger_request(const char *qs, char **actor, char **user) 120int webfinger_request(const char *qs, xs_str **actor, xs_str **user)
121/* queries the webfinger for qs and fills the required fields */ 121/* queries the webfinger for qs and fills the required fields */
122{ 122{
123 return webfinger_request_signed(NULL, qs, actor, user); 123 return webfinger_request_signed(NULL, qs, actor, user);
124} 124}
125 125
126 126
127int webfinger_get_handler(xs_dict *req, char *q_path, 127int webfinger_request_fake(const char *qs, xs_str **actor, xs_str **user)
128 char **body, int *b_size, char **ctype) 128/* queries the webfinger and, if it fails, a user is faked if possible */
129{
130 int status;
131
132 if (!valid_status(status = webfinger_request(qs, actor, user))) {
133 if (xs_startswith(qs, "https:/") || xs_startswith(qs, "http:/")) {
134 xs *l = xs_split(qs, "/");
135
136 /* i'll end up in hell for this */
137 *user = xs_fmt("%s@%s", xs_list_get(l, 2), xs_list_get(l, -1));
138 status = HTTP_STATUS_RESET_CONTENT;
139 }
140 }
141
142 return status;
143}
144
145
146int webfinger_get_handler(xs_dict *req, const char *q_path,
147 xs_val **body, int *b_size, char **ctype)
129/* serves webfinger queries */ 148/* serves webfinger queries */
130{ 149{
131 int status; 150 int status;