Working webmentions

main
Thomas Sileo 2022-07-10 16:04:37 +02:00
parent 229feb23db
commit 1b3c76ee2f
3 changed files with 19 additions and 3 deletions

View File

@ -34,6 +34,7 @@ from app.outgoing_activities import new_outgoing_activity
from app.source import markdownify
from app.uploads import upload_to_attachment
from app.utils import opengraph
from app.utils import webmentions
AnyboxObject = models.InboxObject | models.OutboxObject
@ -372,6 +373,21 @@ async def send_create(
for rcp in recipients:
await new_outgoing_activity(db_session, rcp, outbox_object.id)
# If the note is public, check if we need to send any webmentions
if visibility == ap.VisibilityEnum.PUBLIC:
possible_targets = opengraph._urls_from_note(note)
logger.info(f"webmentions possible targert {possible_targets}")
for target in possible_targets:
webmention_endpoint = await webmentions.discover_webmention_endpoint(target)
logger.info(f"{target=} {webmention_endpoint=}")
if webmention_endpoint:
await new_outgoing_activity(
db_session,
webmention_endpoint,
outbox_object_id=outbox_object.id,
webmention_target=target,
)
return note_id

View File

@ -104,7 +104,7 @@ def _send_actor_update_if_needed(db_session: Session) -> None:
for rcp in {
follower.actor.shared_inbox_url or follower.actor.inbox_url
for follower in followers
} + {
} | {
row.recipient
for row in db_session.execute(
select(func.distinct(models.OutgoingActivity.recipient).label("recipient"))
@ -124,7 +124,7 @@ def _send_actor_update_if_needed(db_session: Session) -> None:
async def new_outgoing_activity(
db_session: AsyncSession,
recipient: str,
outbox_object_id: int | None,
outbox_object_id: int | None = None,
inbox_object_id: int | None = None,
webmention_target: str | None = None,
) -> models.OutgoingActivity:

View File

@ -157,7 +157,7 @@
<div class="actor-box h-card p-author">
<div class="icon-box">
<img src="{{ actor.resized_icon_url }}" class="actor-icon">
<img src="{{ actor.resized_icon_url }}" class="actor-icon u-photo">
</div>
<a href="{{ actor.url }}" class="u-url" style="">
<div><strong>{{ actor.display_name | clean_html(actor) | safe }}</strong></div>