diff --git a/plugins/traction_innkeeper/traction_innkeeper/v1_0/connections/routes.py b/plugins/traction_innkeeper/traction_innkeeper/v1_0/connections/routes.py index 0b44034a0..e3a1a41d4 100644 --- a/plugins/traction_innkeeper/traction_innkeeper/v1_0/connections/routes.py +++ b/plugins/traction_innkeeper/traction_innkeeper/v1_0/connections/routes.py @@ -24,6 +24,19 @@ async def connections_invitation(request: web.BaseRequest): profile = context.profile base_url = profile.settings.get("invite_base_url") + + if not base_url: + base_url = profile.settings.get("default_endpoint") + if base_url: + LOGGER.debug( + "Using 'default_endpoint' as base URL for invitation because 'invite_base_url' is not configured." + ) + else: + LOGGER.debug( + "Neither 'invite_base_url' nor 'default_endpoint' are configured. Invitation URL might be incomplete." + ) + base_url = "" + try: async with profile.session() as session: connection = await ConnRecord.retrieve_by_id(session, connection_id) @@ -49,13 +62,18 @@ async def connections_invitation(request: web.BaseRequest): except BaseModelError as err: raise web.HTTPBadRequest(reason=err.roll_up) from err - invitation_url = invitation.to_url(base_url) + invitation_url = invitation.to_url(base_url) # Let's see what to_url produces + + # Always prepend base_url if to_url returns only query params + if invitation_url.startswith("?"): # Check if to_url returned only query params + constructed_invitation_url = f"{base_url}{invitation_url}" + else: + constructed_invitation_url = invitation_url # Assume to_url worked correctly + result = { "connection_id": connection_id, "invitation": invitation.serialize(), - "invitation_url": f"{invitation.endpoint}{invitation_url}" - if invitation_url.startswith("?") - else invitation_url, + "invitation_url": constructed_invitation_url, } if connection.alias: result["alias"] = connection.alias