commit ee63e2a78cc8a9ab448349920be932c738e1f19e
parent 97cc35f577dbe390c5c6c841e41f6a82b32aff9d
Author: default <nobody@localhost>
Date: Wed, 18 Sep 2024 19:56:40 +0200
New function webfinger_request_fake().
Diffstat:
3 files changed, 30 insertions(+), 9 deletions(-)
diff --git a/main.c b/main.c
@@ -47,8 +47,9 @@ int usage(void)
printf("unlimit {basedir} {uid} {actor} Unlimits an actor\n");
printf("verify_links {basedir} {uid} Verifies a user's links (in the metadata)\n");
printf("search {basedir} {uid} {regex} Searches posts by content\n");
- printf("aka {basedir} {uid} {actor} Sets actor (@user@host or url) as an a.k.a.\n");
+ printf("aka {basedir} {uid} {actor} Sets actor (@user@host or url) as the a.k.a.\n");
printf("export_csv {basedir} {uid} Exports data as CSV files into current directory\n");
+ printf("migrate {basedir} {uid} Migrates the account to the one set as the a.k.a.\n");
return 1;
}
diff --git a/snac.h b/snac.h
@@ -284,10 +284,11 @@ int check_signature(const xs_dict *req, xs_str **err);
srv_state *srv_state_op(xs_str **fname, int op);
void httpd(void);
-int webfinger_request_signed(snac *snac, const char *qs, char **actor, char **user);
-int webfinger_request(const char *qs, char **actor, char **user);
-int webfinger_get_handler(xs_dict *req, char *q_path,
- char **body, int *b_size, char **ctype);
+int webfinger_request_signed(snac *snac, const char *qs, xs_str **actor, xs_str **user);
+int webfinger_request(const char *qs, xs_str **actor, xs_str **user);
+int webfinger_request_fake(const char *qs, xs_str **actor, xs_str **user);
+int webfinger_get_handler(xs_dict *req, const char *q_path,
+ xs_val **body, int *b_size, char **ctype);
const char *default_avatar_base64(void);
diff --git a/webfinger.c b/webfinger.c
@@ -8,7 +8,7 @@
#include "snac.h"
-int webfinger_request_signed(snac *snac, const char *qs, char **actor, char **user)
+int webfinger_request_signed(snac *snac, const char *qs, xs_str **actor, xs_str **user)
/* queries the webfinger for qs and fills the required fields */
{
int status;
@@ -117,15 +117,34 @@ int webfinger_request_signed(snac *snac, const char *qs, char **actor, char **us
}
-int webfinger_request(const char *qs, char **actor, char **user)
+int webfinger_request(const char *qs, xs_str **actor, xs_str **user)
/* queries the webfinger for qs and fills the required fields */
{
return webfinger_request_signed(NULL, qs, actor, user);
}
-int webfinger_get_handler(xs_dict *req, char *q_path,
- char **body, int *b_size, char **ctype)
+int webfinger_request_fake(const char *qs, xs_str **actor, xs_str **user)
+/* queries the webfinger and, if it fails, a user is faked if possible */
+{
+ int status;
+
+ if (!valid_status(status = webfinger_request(qs, actor, user))) {
+ if (xs_startswith(qs, "https:/") || xs_startswith(qs, "http:/")) {
+ xs *l = xs_split(qs, "/");
+
+ /* i'll end up in hell for this */
+ *user = xs_fmt("%s@%s", xs_list_get(l, 2), xs_list_get(l, -1));
+ status = HTTP_STATUS_RESET_CONTENT;
+ }
+ }
+
+ return status;
+}
+
+
+int webfinger_get_handler(xs_dict *req, const char *q_path,
+ xs_val **body, int *b_size, char **ctype)
/* serves webfinger queries */
{
int status;