diff --git a/bookwyrm/models/activitypub_mixin.py b/bookwyrm/models/activitypub_mixin.py index 5e52576aa..d8103c9c3 100644 --- a/bookwyrm/models/activitypub_mixin.py +++ b/bookwyrm/models/activitypub_mixin.py @@ -529,7 +529,7 @@ async def async_broadcast(recipients: List[str], sender, data: str): async def sign_and_send( - session: aiohttp.ClientSession, sender, data: str, destination: str + session: aiohttp.ClientSession, sender, data: str, destination: str, **kwargs ): """Sign the messages and send them in an asynchronous bundle""" now = http_date() @@ -539,11 +539,14 @@ async def sign_and_send( raise ValueError("No private key found for sender") digest = make_digest(data) + signature = make_signature( + "post", sender, destination, now, digest, kwargs.get("use_legacy_key") + ) headers = { "Date": now, "Digest": digest, - "Signature": make_signature("post", sender, destination, now, digest, False), + "Signature": signature, "Content-Type": "application/activity+json; charset=utf-8", "User-Agent": USER_AGENT, } @@ -554,21 +557,15 @@ async def sign_and_send( logger.exception( "Failed to send broadcast to %s: %s", destination, response.reason ) - logger.info("Trying again with legacy keyId") - # try with incorrect keyId to enable communication with legacy Bookwyrm servers - legacy_signature = make_signature( - "post", sender, destination, now, digest, True - ) - headers["Signature"] = legacy_signature - async with session.post( - destination, data=data, headers=headers - ) as response: - if not response.ok: - logger.exception( - "Failed to send broadcast with legacy keyId to %s: %s", - destination, - response.reason, + if kwargs.get("use_legacy_key") is not True: + # try with incorrect keyId to enable communication with legacy Bookwyrm servers + logger.info("Trying again with legacy keyId header value") + + asyncio.ensure_future( + sign_and_send( + session, sender, data, destination, use_legacy_key=True ) + ) return response except asyncio.TimeoutError: