Media repository callbacks

Media repository callbacks allow module developers to customise the behaviour of the media repository on a per user basis. Media repository callbacks can be registered using the module API's register_media_repository_callbacks method.

The available media repository callbacks are:

get_media_config_for_user

First introduced in Synapse v1.132.0

async def get_media_config_for_user(user_id: str) -> Optional[JsonDict]

Caution: This callback is currently experimental . The method signature or behaviour may change without notice.

Called when processing a request from a client for the media config endpoint.

The arguments passed to this callback are:

  • user_id: The Matrix user ID of the user (e.g. @alice:example.com) making the request.

If the callback returns a dictionary then it will be used as the body of the response to the client.

If multiple modules implement this callback, they will be considered in order. If a callback returns None, Synapse falls through to the next one. The value of the first callback that does not return None will be used. If this happens, Synapse will not call any of the subsequent implementations of this callback.

If no module returns a non-None value then the default media config will be returned.

is_user_allowed_to_upload_media_of_size

First introduced in Synapse v1.132.0

async def is_user_allowed_to_upload_media_of_size(user_id: str, size: int) -> bool

Caution: This callback is currently experimental . The method signature or behaviour may change without notice.

Called before media is accepted for upload from a user, in case the module needs to enforce a different limit for the particular user.

The arguments passed to this callback are:

  • user_id: The Matrix user ID of the user (e.g. @alice:example.com) making the request.
  • size: The size in bytes of media that is being requested to upload.

If the module returns False, the current request will be denied with the error code M_TOO_LARGE and the HTTP status code 413.

If multiple modules implement this callback, they will be considered in order. If a callback returns True, Synapse falls through to the next one. The value of the first callback that returns False will be used. If this happens, Synapse will not call any of the subsequent implementations of this callback.