diff --git a/activitypub.c b/activitypub.c index 164c6e6..be1cc5d 100644 --- a/activitypub.c +++ b/activitypub.c @@ -484,13 +484,22 @@ d_char *msg_delete(snac *snac, char *id) } -d_char *msg_follow(snac *snac, char *actor) +d_char *msg_follow(snac *snac, char *url_or_uid) /* creates a 'Follow' message */ { - d_char *actor_o = NULL; + xs *actor_o = NULL; + xs *actor = NULL; d_char *msg = NULL; int status; + if (xs_startswith(url_or_uid, "https:/")) + actor = xs_dup(url_or_uid); + else + if (!valid_status(webfinger_request(url_or_uid, &actor, NULL))) { + snac_log(snac, xs_fmt("cannot resolve user %s to follow", url_or_uid)); + return NULL; + } + /* request the actor */ status = actor_request(snac, actor, &actor_o); diff --git a/html.c b/html.c index a6d131d..afeb5df 100644 --- a/html.c +++ b/html.c @@ -1197,12 +1197,14 @@ int html_post_handler(d_char *req, char *q_path, d_char *payload, int p_size, if (strcmp(action, L("Follow")) == 0) { xs *msg = msg_follow(&snac, actor); - /* reload the actor from the message, in may be different */ - actor = xs_dict_get(msg, "object"); + if (msg != NULL) { + /* reload the actor from the message, in may be different */ + actor = xs_dict_get(msg, "object"); - following_add(&snac, actor, msg); + following_add(&snac, actor, msg); - enqueue_output(&snac, msg, actor, 0); + enqueue_output(&snac, msg, actor, 0); + } } else if (strcmp(action, L("Unfollow")) == 0) {