Skip to content

Commit 8b24c69

Browse files
Implement rules federation, fix markdown federation (#694)
Co-authored-by: e-five <146029455+e-five256@users.noreply.github.com>
1 parent f6b661c commit 8b24c69

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

src/Factory/ActivityPub/GroupFactory.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
namespace App\Factory\ActivityPub;
66

77
use App\Entity\Magazine;
8+
use App\Markdown\MarkdownConverter;
9+
use App\Markdown\RenderTarget;
810
use App\Service\ActivityPub\ContextsProvider;
911
use App\Service\ImageManager;
1012
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
@@ -13,13 +15,25 @@ class GroupFactory
1315
{
1416
public function __construct(
1517
private readonly UrlGeneratorInterface $urlGenerator,
18+
private readonly MarkdownConverter $markdownConverter,
1619
private readonly ContextsProvider $contextProvider,
1720
private readonly ImageManager $imageManager
1821
) {
1922
}
2023

2124
public function create(Magazine $magazine): array
2225
{
26+
$markdownSummary = $magazine->description;
27+
28+
if (!empty($magazine->rules)) {
29+
$markdownSummary .= "\r\n\r\n### Rules\r\n\r\n".$magazine->rules;
30+
}
31+
32+
$summary = $this->markdownConverter->convertToHtml(
33+
$markdownSummary,
34+
[MarkdownConverter::RENDER_TARGET => RenderTarget::ActivityPub],
35+
);
36+
2337
$group = [
2438
'type' => 'Group',
2539
'@context' => $this->contextProvider->referencedContexts(),
@@ -47,7 +61,11 @@ public function create(Magazine $magazine): array
4761
'id' => $this->getActivityPubId($magazine).'#main-key',
4862
'publicKeyPem' => $magazine->publicKey,
4963
],
50-
'summary' => $magazine->description,
64+
'summary' => $summary,
65+
'source' => $markdownSummary ? [
66+
'content' => $markdownSummary,
67+
'mediaType' => 'text/markdown',
68+
] : null,
5169
'sensitive' => $magazine->isAdult,
5270
'attributedTo' => $this->urlGenerator->generate(
5371
'ap_magazine_moderators',

src/Service/ActivityPubManager.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
use App\Repository\MagazineRepository;
3030
use App\Repository\UserRepository;
3131
use App\Service\ActivityPub\ApHttpClient;
32+
use App\Service\ActivityPub\ApObjectExtractor;
3233
use App\Service\ActivityPub\Webfinger\WebFinger;
3334
use App\Service\ActivityPub\Webfinger\WebFingerFactory;
3435
use Doctrine\Common\Collections\Criteria;
@@ -441,8 +442,7 @@ public function updateMagazine(string $actorUrl): ?Magazine
441442

442443
if (isset($actor['endpoints']['sharedInbox']) || isset($actor['inbox'])) {
443444
if (isset($actor['summary'])) {
444-
$converter = new HtmlConverter(['strip_tags' => true]);
445-
$magazine->description = stripslashes($converter->convert($actor['summary']));
445+
$magazine->description = $this->extractMarkdownSummary($actor);
446446
}
447447

448448
if (isset($actor['icon'])) {
@@ -789,4 +789,15 @@ public function getEntityObject(string|array $apObject, array $fullPayload, call
789789

790790
return $this->entityManager->getRepository($activity['type'])->find((int) $activity['id']);
791791
}
792+
793+
public function extractMarkdownSummary(array $apObject): ?string
794+
{
795+
if (isset($apObject['source']) && isset($apObject['source']['mediaType']) && isset($apObject['source']['content']) && ApObjectExtractor::MARKDOWN_TYPE === $apObject['source']['mediaType']) {
796+
return $apObject['source']['content'];
797+
} else {
798+
$converter = new HtmlConverter(['strip_tags' => true]);
799+
800+
return stripslashes($converter->convert($apObject['summary']));
801+
}
802+
}
792803
}

0 commit comments

Comments
 (0)