diff options
Diffstat (limited to 'webfinger.c')
| -rw-r--r-- | webfinger.c | 27 |
1 files changed, 23 insertions, 4 deletions
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 | ||
| 11 | int webfinger_request_signed(snac *snac, const char *qs, char **actor, char **user) | 11 | int 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 | ||
| 120 | int webfinger_request(const char *qs, char **actor, char **user) | 120 | int 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 | ||
| 127 | int webfinger_get_handler(xs_dict *req, char *q_path, | 127 | int 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 | |||
| 146 | int 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; |