diff --git a/main.c b/main.c index e2de58e..97f47de 100644 --- a/main.c +++ b/main.c @@ -16,20 +16,21 @@ int usage(void) printf("\n"); printf("Commands:\n"); printf("\n"); - printf("init [{basedir}] Initializes the data storage\n"); - printf("upgrade {basedir} Upgrade to a new version\n"); - printf("adduser {basedir} [{uid}] Adds a new user\n"); - printf("httpd {basedir} Starts the HTTPD daemon\n"); - printf("purge {basedir} Purges old data\n"); - printf("webfinger {basedir} {user} Queries about a @user@host or actor\n"); - printf("queue {basedir} {uid} Processes a user queue\n"); - printf("follow {basedir} {uid} {actor} Follows an actor\n"); - printf("unfollow {basedir} {uid} {actor} Unfollows an actor\n"); - printf("request {basedir} {uid} {url} Requests an object\n"); - printf("actor {basedir} {uid} {url} Requests an actor\n"); - printf("note {basedir} {uid} {'text'} Sends a note to followers\n"); - printf("resetpwd {basedir} {uid} Resets the password of a user\n"); - printf("ping {basedir} {uid} {actor} Pings an actor\n"); + printf("init [{basedir}] Initializes the data storage\n"); + printf("upgrade {basedir} Upgrade to a new version\n"); + printf("adduser {basedir} [{uid}] Adds a new user\n"); + printf("httpd {basedir} Starts the HTTPD daemon\n"); + printf("purge {basedir} Purges old data\n"); + printf("webfinger {basedir} {actor} Queries about an actor (@user@host or actor url)\n"); + printf("queue {basedir} {uid} Processes a user queue\n"); + printf("follow {basedir} {uid} {actor} Follows an actor\n"); + printf("unfollow {basedir} {uid} {actor} Unfollows an actor\n"); + printf("request {basedir} {uid} {url} Requests an object\n"); + printf("actor {basedir} {uid} {url} Requests an actor\n"); + printf("note {basedir} {uid} {'text'} Sends a note to followers\n"); + printf("resetpwd {basedir} {uid} Resets the password of a user\n"); + printf("ping {basedir} {uid} {actor} Pings an actor\n"); + printf("webfinger_s {basedir} {uid} {actor} Queries about an actor (@user@host or actor url)\n"); /* printf("question {basedir} {uid} 'opts' Generates a poll (;-separated opts)\n");*/ return 1; @@ -179,6 +180,22 @@ int main(int argc, char *argv[]) if ((url = GET_ARGV()) == NULL) return usage(); + if (strcmp(cmd, "webfinger_s") == 0) { /** **/ + xs *actor = NULL; + xs *uid = NULL; + int status; + + status = webfinger_request_signed(&snac, url, &actor, &uid); + + printf("status: %d\n", status); + if (actor != NULL) + printf("actor: %s\n", actor); + if (uid != NULL) + printf("uid: %s\n", uid); + + return 0; + } + if (strcmp(cmd, "announce") == 0) { /** **/ xs *msg = msg_admiration(&snac, url, "Announce"); @@ -352,5 +369,7 @@ int main(int argc, char *argv[]) return 0; } - return 0; + fprintf(stderr, "ERROR: bad command '%s'\n", cmd); + + return 1; } diff --git a/snac.h b/snac.h index adbd6c9..094179c 100644 --- a/snac.h +++ b/snac.h @@ -191,6 +191,7 @@ int check_signature(snac *snac, xs_dict *req, xs_str **err); 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); diff --git a/webfinger.c b/webfinger.c index ca4ed71..a167cd0 100644 --- a/webfinger.c +++ b/webfinger.c @@ -7,7 +7,7 @@ #include "snac.h" -int webfinger_request(const char *qs, char **actor, char **user) +int webfinger_request_signed(snac *snac, const char *qs, char **actor, char **user) /* queries the webfinger for qs and fills the required fields */ { int status; @@ -61,7 +61,10 @@ int webfinger_request(const char *qs, char **actor, char **user) else { xs *url = xs_fmt("https:/" "/%s/.well-known/webfinger?resource=%s", host, resource); - xs_http_request("GET", url, headers, NULL, 0, &status, &payload, &p_size, 0); + if (snac == NULL) + xs_http_request("GET", url, headers, NULL, 0, &status, &payload, &p_size, 0); + else + http_signed_request(snac, "GET", url, headers, NULL, 0, &status, &payload, &p_size, 0); } if (valid_status(status)) { @@ -96,6 +99,13 @@ int webfinger_request(const char *qs, char **actor, char **user) } +int webfinger_request(const char *qs, char **actor, char **user) +/* queries the webfinger for qs and fills the required fields */ +{ + return webfinger_request_signed(NULL, qs, actor, user); +} + + int webfinger_get_handler(d_char *req, char *q_path, char **body, int *b_size, char **ctype) /* serves webfinger queries */