diff options
| -rw-r--r-- | activitypub.c | 33 | ||||
| -rw-r--r-- | data.c | 11 |
2 files changed, 43 insertions, 1 deletions
diff --git a/activitypub.c b/activitypub.c index 8877a27..fb0c42c 100644 --- a/activitypub.c +++ b/activitypub.c | |||
| @@ -2766,6 +2766,39 @@ void process_user_queue_item(snac *user, xs_dict *q_item) | |||
| 2766 | } | 2766 | } |
| 2767 | } | 2767 | } |
| 2768 | else | 2768 | else |
| 2769 | if (strcmp(type, "notify_webhook") == 0) { | ||
| 2770 | const char *webhook = xs_dict_get(user->config, "notify_webhook"); | ||
| 2771 | |||
| 2772 | if (xs_is_string(webhook)) { | ||
| 2773 | const xs_dict *msg = xs_dict_get(q_item, "message"); | ||
| 2774 | int retries = xs_number_get(xs_dict_get(q_item, "retries")); | ||
| 2775 | |||
| 2776 | xs *hdrs = xs_dict_new(); | ||
| 2777 | |||
| 2778 | hdrs = xs_dict_set(hdrs, "content-type", "application/json"); | ||
| 2779 | hdrs = xs_dict_set(hdrs, "user-agent", USER_AGENT); | ||
| 2780 | |||
| 2781 | xs *body = xs_json_dumps(msg, 4); | ||
| 2782 | |||
| 2783 | int status; | ||
| 2784 | xs *rsp = xs_http_request("POST", webhook, hdrs, body, strlen(body), &status, NULL, NULL, 0); | ||
| 2785 | |||
| 2786 | snac_debug(user, 0, xs_fmt("webhook post %s %d", webhook, status)); | ||
| 2787 | |||
| 2788 | if (!valid_status(status)) { | ||
| 2789 | retries++; | ||
| 2790 | |||
| 2791 | if (retries > queue_retry_max) | ||
| 2792 | snac_debug(user, 0, xs_fmt("webhook post giving up %s", webhook)); | ||
| 2793 | else { | ||
| 2794 | snac_debug(user, 0, xs_fmt("webhook post requeue %s %d", webhook, retries)); | ||
| 2795 | |||
| 2796 | enqueue_notify_webhook(user, msg, retries); | ||
| 2797 | } | ||
| 2798 | } | ||
| 2799 | } | ||
| 2800 | } | ||
| 2801 | else | ||
| 2769 | snac_log(user, xs_fmt("unexpected user q_item type '%s'", type)); | 2802 | snac_log(user, xs_fmt("unexpected user q_item type '%s'", type)); |
| 2770 | } | 2803 | } |
| 2771 | 2804 | ||
| @@ -3529,7 +3529,16 @@ void enqueue_notify_webhook(snac *user, const xs_dict *noti, int retries) | |||
| 3529 | const char *webhook = xs_dict_get(user->config, "notify_webhook"); | 3529 | const char *webhook = xs_dict_get(user->config, "notify_webhook"); |
| 3530 | 3530 | ||
| 3531 | if (xs_is_string(webhook)) { | 3531 | if (xs_is_string(webhook)) { |
| 3532 | xs *qmsg = _new_qmsg("notify_webhook", noti, retries); | 3532 | xs *msg = xs_dup(noti); |
| 3533 | |||
| 3534 | /* add more data */ | ||
| 3535 | msg = xs_dict_set(msg, "target", user->actor); | ||
| 3536 | xs *actor_obj = NULL; | ||
| 3537 | |||
| 3538 | if (valid_status(object_get(xs_dict_get(noti, "actor"), &actor_obj)) && actor_obj) | ||
| 3539 | msg = xs_dict_set(msg, "account", actor_obj); | ||
| 3540 | |||
| 3541 | xs *qmsg = _new_qmsg("notify_webhook", msg, retries); | ||
| 3533 | const char *ntid = xs_dict_get(qmsg, "ntid"); | 3542 | const char *ntid = xs_dict_get(qmsg, "ntid"); |
| 3534 | xs *fn = xs_fmt("%s/queue/%s.json", user->basedir, ntid); | 3543 | xs *fn = xs_fmt("%s/queue/%s.json", user->basedir, ntid); |
| 3535 | 3544 | ||