@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class FeedPublisherHTTPWorker extends FeedPushWorker {
4
5 protected function doWork() {
6 if (PhabricatorEnv::getEnvConfig('phabricator.silent')) {
7 // Don't invoke hooks in silent mode.
8 return;
9 }
10
11 $story = $this->loadFeedStory();
12 $data = $story->getStoryData();
13
14 $uri = idx($this->getTaskData(), 'uri');
15 $valid_uris = PhabricatorEnv::getEnvConfig('feed.http-hooks');
16 if (!in_array($uri, $valid_uris)) {
17 throw new PhabricatorWorkerPermanentFailureException();
18 }
19
20 $post_data = array(
21 'storyID' => $data->getID(),
22 'storyType' => $data->getStoryType(),
23 'storyData' => $data->getStoryData(),
24 'storyAuthorPHID' => $data->getAuthorPHID(),
25 'storyText' => $story->renderText(),
26 'epoch' => $data->getEpoch(),
27 );
28
29 // NOTE: We're explicitly using "http_build_query()" here because the
30 // "storyData" parameter may be a nested object with arbitrary nested
31 // sub-objects.
32 $post_data = http_build_query($post_data, '', '&');
33
34 id(new HTTPSFuture($uri, $post_data))
35 ->setMethod('POST')
36 ->setTimeout(30)
37 ->resolvex();
38 }
39
40 public function getWaitBeforeRetry(PhabricatorWorkerTask $task) {
41 return max($task->getFailureCount(), 1) * 60;
42 }
43
44}