summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2022-11-17 09:04:24 +0100
committerGravatar default2022-11-17 09:04:24 +0100
commitafce422785cb98608b135a473f6f6c7c0c592277 (patch)
tree6eecc6405ba99d926f62841ebaafd38c8b7c929a
parentFixed typo. (diff)
downloadsnac2-afce422785cb98608b135a473f6f6c7c0c592277.tar.gz
snac2-afce422785cb98608b135a473f6f6c7c0c592277.tar.xz
snac2-afce422785cb98608b135a473f6f6c7c0c592277.zip
Use endpoints/sharedInbox instead of inbox, if there is one.
-rw-r--r--activitypub.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/activitypub.c b/activitypub.c
index 82230ff..44b5ba2 100644
--- a/activitypub.c
+++ b/activitypub.c
@@ -133,24 +133,35 @@ int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_s
133} 133}
134 134
135 135
136int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size) 136d_char *get_actor_inbox(snac *snac, char *actor)
137/* sends a message to an actor */ 137/* gets an actor's inbox */
138{ 138{
139 int status;
140 xs *data = NULL; 139 xs *data = NULL;
140 char *v = NULL;
141 141
142 /* resolve the actor first */ 142 if (valid_status(actor_request(snac, actor, &data))) {
143 status = actor_request(snac, actor, &data); 143 /* try first endpoints/sharedInbox */
144 144 if ((v = xs_dict_get(data, "endpoints")))
145 if (valid_status(status)) { 145 v = xs_dict_get(v, "sharedInbox");
146 char *inbox = xs_dict_get(data, "inbox");
147 146
148 if (inbox != NULL) 147 /* try then the regular inbox */
149 status = send_to_inbox(snac, inbox, msg, payload, p_size); 148 if (xs_is_null(v))
150 else 149 v = xs_dict_get(data, "inbox");
151 status = 400;
152 } 150 }
153 151
152 return xs_is_null(v) ? NULL : xs_dup(v);
153}
154
155
156int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size)
157/* sends a message to an actor */
158{
159 int status = 400;
160 xs *inbox = get_actor_inbox(snac, actor);
161
162 if (!xs_is_null(inbox))
163 status = send_to_inbox(snac, inbox, msg, payload, p_size);
164
154 snac_log(snac, xs_fmt("send_to_actor %s %d", actor, status)); 165 snac_log(snac, xs_fmt("send_to_actor %s %d", actor, status));
155 166
156 return status; 167 return status;