element-hq / synapse

Synapse: Matrix homeserver written in Python/Twisted.
https://element-hq.github.io/synapse
GNU Affero General Public License v3.0
1.3k stars 157 forks source link

oEmbed providers.json parsing #17601

Open jonas-w opened 4 weeks ago

jonas-w commented 4 weeks ago

Description

As I wanted to check if #17462 can be fixed by using oEmbed I stumbled upon parsing issues in the oEmbed config parser. I used the official provider official providers.json from https://oembed.com/providers.json

  1. The config parser throws an error and hinders Synapse from starting, when a provider in the providers.json does not contain the "schemes" key, IMO this should just throw a warning and not error out.

    When a provider in the providers.json does not have a 'schemes' entry it can't be used directly in Matrix, as there is no URL pattern to match, these entries without 'schemes' are seemingly only there to signal that these websites have a discoverable oembed provider.

    You can see which providers don't have schemes via this jq command: jq '.[] | select(.endpoints[].schemes == null)' providers.json

    This is the current output of this command: ```json { "provider_name": "Beautiful.AI", "provider_url": "https://www.beautiful.ai/", "endpoints": [ { "url": "https://www.beautiful.ai/api/oembed", "discovery": true } ] } { "provider_name": "Box Office Buz", "provider_url": "http://boxofficebuz.com", "endpoints": [ { "url": "http://boxofficebuz.com/oembed", "discovery": true } ] } { "provider_name": "eduMedia", "provider_url": "https://www.edumedia-sciences.com/", "endpoints": [ { "url": "https://www.edumedia-sciences.com/oembed.json", "discovery": true }, { "url": "https://www.edumedia-sciences.com/oembed.xml", "discovery": true } ] } { "provider_name": "eduMedia", "provider_url": "https://www.edumedia-sciences.com/", "endpoints": [ { "url": "https://www.edumedia-sciences.com/oembed.json", "discovery": true }, { "url": "https://www.edumedia-sciences.com/oembed.xml", "discovery": true } ] } { "provider_name": "GloriaTV", "provider_url": "https://gloria.tv/", "endpoints": [ { "url": "https://gloria.tv/oembed/", "discovery": true } ] } { "provider_name": "Matterport", "provider_url": "https://matterport.com/", "endpoints": [ { "url": "https://my.matterport.com/api/v1/models/oembed/", "discovery": true, "formats": [ "json" ] } ] } { "provider_name": "PingVP", "provider_url": "https://www.pingvp.com/", "endpoints": [ { "url": "https://beta.pingvp.com.kpnis.nl/p/oembed.php", "discovery": true } ] } { "provider_name": "Rumble", "provider_url": "https://rumble.com/", "endpoints": [ { "url": "https://rumble.com/api/Media/oembed.{format}", "discovery": true } ] } { "provider_name": "Typlog", "provider_url": "https://typlog.com", "endpoints": [ { "url": "https://typlog.com/oembed", "discovery": true } ] } ```
  2. The Parser also errors out for this spotify scheme: spotify:*. Again IMO this should probably just throw a warning instead of erroring out.

    This would make it easier to just grab the latest providers.json from https://oembed.com and use it. (Which could make #9877 possible)

Steps to reproduce

Homeserver

-

Synapse Version

1.113.0

Installation Method

Docker (matrixdotorg/synapse)

Database

-

Workers

I don't know

Platform

Not relevant for the issue but I use Debian on a Dedicated Server and Synapse runs inside Docker

Configuration

No response

Relevant log output

# This is the log output for the first issue:

Error in configuration at 'oembed.additional_providers.<item 0>.<item 282>.endpoints.<item 0>':
  'schemes' is a required property

# This is the log output for the second issue:

Error in configuration at 'oembed.additional_providers.<item 0>':
  Unsupported oEmbed scheme (spotify) for pattern: spotify:*

Anything else that would be useful to know?

The docs should probably be refined a bit https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#oembed

I directly knew what the providers.json is and where to get it from, but I don't think that it is mentioned anywhere in the docs. Also a direct link to the providers.json that gets shipped by default would be helpful. I at first thought Synapse wouldn't ship one contrary to what the docs state, but the problem was I only searched for oembed, and @clokep pointed me to the link where it can be found https://github.com/element-hq/synapse/blob/develop/synapse/res/providers.json

bro2020 commented 6 days ago

I agree, this behavior should be corrected.