mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-12-15 09:10:55 -05:00
Request JSON for oEmbed requests (and ignore XML only providers). (#10759)
This adds the format to the request arguments / URL to ensure that JSON data is returned (which is all that Synapse supports). This also adds additional error checking / filtering to the configuration file to ignore XML-only providers.
This commit is contained in:
parent
aacdce8fc0
commit
580a15e039
4 changed files with 98 additions and 8 deletions
|
|
@ -49,8 +49,24 @@ class OEmbedProvider:
|
|||
def __init__(self, hs: "HomeServer", client: SimpleHttpClient):
|
||||
self._oembed_patterns = {}
|
||||
for oembed_endpoint in hs.config.oembed.oembed_patterns:
|
||||
api_endpoint = oembed_endpoint.api_endpoint
|
||||
|
||||
# Only JSON is supported at the moment. This could be declared in
|
||||
# the formats field. Otherwise, if the endpoint ends in .xml assume
|
||||
# it doesn't support JSON.
|
||||
if (
|
||||
oembed_endpoint.formats is not None
|
||||
and "json" not in oembed_endpoint.formats
|
||||
) or api_endpoint.endswith(".xml"):
|
||||
logger.info(
|
||||
"Ignoring oEmbed endpoint due to not supporting JSON: %s",
|
||||
api_endpoint,
|
||||
)
|
||||
continue
|
||||
|
||||
# Iterate through each URL pattern and point it to the endpoint.
|
||||
for pattern in oembed_endpoint.url_patterns:
|
||||
self._oembed_patterns[pattern] = oembed_endpoint.api_endpoint
|
||||
self._oembed_patterns[pattern] = api_endpoint
|
||||
self._client = client
|
||||
|
||||
def get_oembed_url(self, url: str) -> Optional[str]:
|
||||
|
|
@ -86,11 +102,15 @@ class OEmbedProvider:
|
|||
"""
|
||||
try:
|
||||
logger.debug("Trying to get oEmbed content for url '%s'", url)
|
||||
|
||||
# Note that only the JSON format is supported, some endpoints want
|
||||
# this in the URL, others want it as an argument.
|
||||
endpoint = endpoint.replace("{format}", "json")
|
||||
|
||||
result = await self._client.get_json(
|
||||
endpoint,
|
||||
# TODO Specify max height / width.
|
||||
# Note that only the JSON format is supported.
|
||||
args={"url": url},
|
||||
args={"url": url, "format": "json"},
|
||||
)
|
||||
|
||||
# Ensure there's a version of 1.0.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue