summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordefault <nobody@localhost>2023-06-13 20:36:43 +0200
committerdefault <nobody@localhost>2023-06-13 20:36:43 +0200
commite0c6fb786c3b72b8a789041db2909fa7d1d880de (patch)
tree40b4b9af3f6de66ffe5cf839a5e603963344a4bd
parente26d05746c8ad2ea79931f8be24536e6f8ce59a7 (diff)
New function webfinger_request_signed().
-rw-r--r--main.c49
-rw-r--r--snac.h1
-rw-r--r--webfinger.c14
3 files changed, 47 insertions, 17 deletions
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 */