Compare commits

..

4 commits

View file

@ -139,7 +139,7 @@ function bluesky_probe_detect(array &$hookData)
return; return;
} }
} elseif (Network::isValidHttpUrl($hookData['uri'])) { } elseif (Network::isValidHttpUrl($hookData['uri'])) {
$did = bluesky_get_did_by_profile($hookData['uri']); $did = bluesky_get_did_by_profile($hookData['uri'], $pconfig['uid']);
if (empty($did)) { if (empty($did)) {
return; return;
} }
@ -181,21 +181,21 @@ function bluesky_item_by_link(array &$hookData)
return; return;
} }
$did = bluesky_get_did_by_profile($hookData['uri']); if (!preg_match('#/profile/(.+)/post/(.+)#', $hookData['uri'], $matches)) {
return;
}
$did = bluesky_get_did($matches[1], $hookData['uid']);
if (empty($did)) { if (empty($did)) {
return; return;
} }
if (!preg_match('#/profile/.+/post/(.+)#', $hookData['uri'], $matches)) { Logger::debug('Found bluesky post', ['url' => $hookData['uri'], 'did' => $did, 'cid' => $matches[2]]);
return;
}
Logger::debug('Found bluesky post', ['url' => $hookData['uri'], 'did' => $did, 'cid' => $matches[1]]); $uri = 'at://' . $did . '/app.bsky.feed.post/' . $matches[2];
$uri = 'at://' . $did . '/app.bsky.feed.post/' . $matches[1];
$uri = bluesky_fetch_missing_post($uri, $hookData['uid'], $hookData['uid'], Item::PR_FETCHED, 0, 0, 0); $uri = bluesky_fetch_missing_post($uri, $hookData['uid'], $hookData['uid'], Item::PR_FETCHED, 0, 0, 0);
Logger::debug('Got post', ['did' => $did, 'cid' => $matches[1], 'result' => $uri]); Logger::debug('Got post', ['did' => $did, 'cid' => $matches[2], 'result' => $uri]);
if (!empty($uri)) { if (!empty($uri)) {
$item = Post::selectFirst(['id'], ['uri' => $uri, 'uid' => $hookData['uid']]); $item = Post::selectFirst(['id'], ['uri' => $uri, 'uid' => $hookData['uid']]);
if (!empty($item['id'])) { if (!empty($item['id'])) {
@ -278,14 +278,12 @@ function bluesky_block(array &$hook_data)
return; return;
} }
Logger::debug('Check if contact is bluesky', ['data' => $hook_data]); if ($hook_data['contact']['network'] != Protocol::BLUESKY) {
$contact = DBA::selectFirst('contact', [], ['network' => Protocol::BLUESKY, 'url' => $hook_data['url'], 'uid' => [0, $hook_data['uid']]]);
if (empty($contact)) {
return; return;
} }
$record = [ $record = [
'subject' => $contact['url'], 'subject' => $hook_data['contact']['url'],
'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), 'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
'$type' => 'app.bsky.graph.block' '$type' => 'app.bsky.graph.block'
]; ];
@ -1297,6 +1295,7 @@ function bluesky_get_header(stdClass $post, string $uri, int $uid, int $fetch_ui
// When "ver" is set to "1" it was flagged by some automated process. // When "ver" is set to "1" it was flagged by some automated process.
if (empty($label->ver)) { if (empty($label->ver)) {
$item['sensitive'] = true; $item['sensitive'] = true;
$item['content-warning'] = $label->val ?? '';
Logger::debug('Sensitive content', ['uri-id' => $item['uri-id'], 'label' => $label]); Logger::debug('Sensitive content', ['uri-id' => $item['uri-id'], 'label' => $label]);
} }
} }
@ -1832,8 +1831,14 @@ function bluesky_get_preferences(int $uid): ?stdClass
return $data; return $data;
} }
function bluesky_get_did_by_profile(string $url): string function bluesky_get_did_by_profile(string $url, int $uid): string
{ {
if (preg_match('#/profile/(.+)#', $url, $matches)) {
$did = bluesky_get_did($matches[1], $uid);
if (!empty($did)) {
return $did;
}
}
try { try {
$curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML, [HttpClientOptions::REQUEST => HttpClientRequest::CONTACTINFO]); $curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML, [HttpClientOptions::REQUEST => HttpClientRequest::CONTACTINFO]);
} catch (\Throwable $th) { } catch (\Throwable $th) {
@ -1942,13 +1947,6 @@ function bluesky_get_did(string $handle, int $uid): string
return $did; return $did;
} }
// The profile page can contain hints to the DID as well
$did = bluesky_get_did_by_profile('https://' . $handle);
if ($did != '') {
Logger::debug('Got DID by profile page', ['handle' => $handle, 'did' => $did]);
return $did;
}
// And finally we use the default PDS from Bluesky. // And finally we use the default PDS from Bluesky.
$data = bluesky_get(BLUESKY_PDS . '/xrpc/com.atproto.identity.resolveHandle?handle=' . urlencode($handle)); $data = bluesky_get(BLUESKY_PDS . '/xrpc/com.atproto.identity.resolveHandle?handle=' . urlencode($handle));
if (!empty($data) && !empty($data->did)) { if (!empty($data) && !empty($data->did)) {