X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FActivityPub.php;h=522a874fe2bd2842e21efd3b5cb076f874739a7a;hb=ec16e7c0e6349d7080f634177ef943b446be3735;hp=4be88b341b98c2d535ab9cbcb73e86e5b9bcdab2;hpb=db1dc143f1233e801c9b1b8942c40bd92ba31a8e;p=friendica.git diff --git a/src/Protocol/ActivityPub.php b/src/Protocol/ActivityPub.php index 4be88b341b..522a874fe2 100644 --- a/src/Protocol/ActivityPub.php +++ b/src/Protocol/ActivityPub.php @@ -241,12 +241,20 @@ class ActivityPub /** * Fetch items from AP endpoints * - * @param string $url Address of the endpoint - * @param integer $uid Optional user id + * @param string $url Address of the endpoint + * @param integer $uid Optional user id + * @param integer $start_timestamp Internally used parameter to stop fetching after some time * @return array Endpoint items */ - public static function fetchItems(string $url, int $uid = 0): array + public static function fetchItems(string $url, int $uid = 0, int $start_timestamp = 0): array { + $start_timestamp = $start_timestamp ?: time(); + + if ((time() - $start_timestamp) > 60) { + Logger::info('Fetch time limit reached', ['url' => $url, 'uid' => $uid]); + return []; + } + $data = self::fetchContent($url, $uid); if (empty($data)) { return []; @@ -257,13 +265,13 @@ class ActivityPub } elseif (!empty($data['first']['orderedItems'])) { $items = $data['first']['orderedItems']; } elseif (!empty($data['first']) && is_string($data['first']) && ($data['first'] != $url)) { - return self::fetchItems($data['first'], $uid); + return self::fetchItems($data['first'], $uid, $start_timestamp); } else { return []; } if (!empty($data['next']) && is_string($data['next'])) { - $items = array_merge($items, self::fetchItems($data['next'], $uid)); + $items = array_merge($items, self::fetchItems($data['next'], $uid, $start_timestamp)); } return $items;