Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Send the location of the web client to the IS when inviting via 3PIDs. (
Browse files Browse the repository at this point in the history
#8930)

Adds a new setting `email.invite_client_location` which, if defined, is
passed to the identity server during invites.
  • Loading branch information
clokep authored Dec 18, 2020
1 parent d781a81 commit 56e00ca
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 0 deletions.
1 change: 1 addition & 0 deletions changelog.d/8930.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add an `email.invite_client_location` configuration option to send a web client location to the invite endpoint on the identity server which allows customisation of the email template.
6 changes: 6 additions & 0 deletions docs/sample_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2149,6 +2149,12 @@ email:
#
#validation_token_lifetime: 15m

# The web client location to direct users to during an invite. This is passed
# to the identity server as the org.matrix.web_client_location key. Defaults
# to unset, giving no guidance to the identity server.
#
#invite_client_location: https://app.element.io

# Directory in which Synapse will try to find the template files below.
# If not set, or the files named below are not found within the template
# directory, default templates from within the Synapse package will be used.
Expand Down
22 changes: 22 additions & 0 deletions synapse/config/emailconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,22 @@ def read_config(self, config, **kwargs):

self.email_subjects = EmailSubjectConfig(**subjects)

# The invite client location should be a HTTP(S) URL or None.
self.invite_client_location = email_config.get("invite_client_location") or None
if self.invite_client_location:
if not isinstance(self.invite_client_location, str):
raise ConfigError(
"Config option email.invite_client_location must be type str"
)
if not (
self.invite_client_location.startswith("http://")
or self.invite_client_location.startswith("https://")
):
raise ConfigError(
"Config option email.invite_client_location must be a http or https URL",
path=("email", "invite_client_location"),
)

def generate_config_section(self, config_dir_path, server_name, **kwargs):
return (
"""\
Expand Down Expand Up @@ -389,6 +405,12 @@ def generate_config_section(self, config_dir_path, server_name, **kwargs):
#
#validation_token_lifetime: 15m
# The web client location to direct users to during an invite. This is passed
# to the identity server as the org.matrix.web_client_location key. Defaults
# to unset, giving no guidance to the identity server.
#
#invite_client_location: https://app.element.io
# Directory in which Synapse will try to find the template files below.
# If not set, or the files named below are not found within the template
# directory, default templates from within the Synapse package will be used.
Expand Down
5 changes: 5 additions & 0 deletions synapse/handlers/identity.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ def __init__(self, hs):
self.federation_http_client = hs.get_federation_http_client()
self.hs = hs

self._web_client_location = hs.config.invite_client_location

async def threepid_from_creds(
self, id_server: str, creds: Dict[str, str]
) -> Optional[JsonDict]:
Expand Down Expand Up @@ -803,6 +805,9 @@ async def ask_id_server_for_third_party_invite(
"sender_display_name": inviter_display_name,
"sender_avatar_url": inviter_avatar_url,
}
# If a custom web client location is available, include it in the request.
if self._web_client_location:
invite_config["org.matrix.web_client_location"] = self._web_client_location

# Add the identity service access token to the JSON body and use the v2
# Identity Service endpoints if id_access_token is present
Expand Down

0 comments on commit 56e00ca

Please sign in to comment.