2018-05-10 19:17:11 -04:00
|
|
|
# Copyright 2018 New Vector Ltd
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
# You may obtain a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
# limitations under the License.
|
|
|
|
|
2019-01-29 10:29:09 -05:00
|
|
|
from os import path
|
2021-09-23 07:13:34 -04:00
|
|
|
from typing import Optional
|
2019-01-29 10:29:09 -05:00
|
|
|
|
|
|
|
from synapse.config import ConfigError
|
|
|
|
|
2018-05-10 19:17:11 -04:00
|
|
|
from ._base import Config
|
|
|
|
|
|
|
|
DEFAULT_CONFIG = """\
|
|
|
|
# User Consent configuration
|
|
|
|
#
|
2018-05-30 14:42:19 -04:00
|
|
|
# for detailed instructions, see
|
2021-07-07 07:35:45 -04:00
|
|
|
# https://matrix-org.github.io/synapse/latest/consent_tracking.html
|
2018-05-30 14:42:19 -04:00
|
|
|
#
|
2018-05-17 07:09:18 -04:00
|
|
|
# Parts of this section are required if enabling the 'consent' resource under
|
|
|
|
# 'listeners', in particular 'template_dir' and 'version'.
|
2018-05-10 19:17:11 -04:00
|
|
|
#
|
|
|
|
# 'template_dir' gives the location of the templates for the HTML forms.
|
|
|
|
# This directory should contain one subdirectory per language (eg, 'en', 'fr'),
|
|
|
|
# and each language directory should contain the policy document (named as
|
|
|
|
# '<version>.html') and a success page (success.html).
|
|
|
|
#
|
2018-05-17 07:09:18 -04:00
|
|
|
# 'version' specifies the 'current' version of the policy document. It defines
|
|
|
|
# the version to be served by the consent resource if there is no 'v'
|
|
|
|
# parameter.
|
2018-05-10 19:17:11 -04:00
|
|
|
#
|
2018-05-17 12:35:31 -04:00
|
|
|
# 'server_notice_content', if enabled, will send a user a "Server Notice"
|
|
|
|
# asking them to consent to the privacy policy. The 'server_notices' section
|
2018-05-25 06:36:43 -04:00
|
|
|
# must also be configured for this to work. Notices will *not* be sent to
|
|
|
|
# guest users unless 'send_server_notice_to_guests' is set to true.
|
2018-05-17 12:35:31 -04:00
|
|
|
#
|
2018-05-22 03:56:52 -04:00
|
|
|
# 'block_events_error', if set, will block any attempts to send events
|
|
|
|
# until the user consents to the privacy policy. The value of the setting is
|
|
|
|
# used as the text of the error.
|
|
|
|
#
|
2018-11-06 05:32:34 -05:00
|
|
|
# 'require_at_registration', if enabled, will add a step to the registration
|
|
|
|
# process, similar to how captcha works. Users will be required to accept the
|
|
|
|
# policy before their account is created.
|
|
|
|
#
|
|
|
|
# 'policy_name' is the display name of the policy users will see when registering
|
|
|
|
# for an account. Has no effect unless `require_at_registration` is enabled.
|
|
|
|
# Defaults to "Privacy Policy".
|
|
|
|
#
|
2019-02-19 08:54:29 -05:00
|
|
|
#user_consent:
|
|
|
|
# template_dir: res/templates/privacy
|
|
|
|
# version: 1.0
|
|
|
|
# server_notice_content:
|
|
|
|
# msgtype: m.text
|
|
|
|
# body: >-
|
|
|
|
# To continue using this homeserver you must review and agree to the
|
|
|
|
# terms and conditions at %(consent_uri)s
|
2019-10-23 08:22:54 -04:00
|
|
|
# send_server_notice_to_guests: true
|
2019-02-19 08:54:29 -05:00
|
|
|
# block_events_error: >-
|
|
|
|
# To continue using this homeserver you must review and agree to the
|
|
|
|
# terms and conditions at %(consent_uri)s
|
2019-10-23 08:22:54 -04:00
|
|
|
# require_at_registration: false
|
2019-02-19 08:54:29 -05:00
|
|
|
# policy_name: Privacy Policy
|
2018-05-23 10:24:31 -04:00
|
|
|
#
|
2018-05-10 19:17:11 -04:00
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
class ConsentConfig(Config):
|
2019-10-10 04:39:35 -04:00
|
|
|
|
|
|
|
section = "consent"
|
|
|
|
|
2019-10-02 08:29:01 -04:00
|
|
|
def __init__(self, *args):
|
2020-09-18 09:56:44 -04:00
|
|
|
super().__init__(*args)
|
2018-05-18 10:41:40 -04:00
|
|
|
|
2021-09-23 07:13:34 -04:00
|
|
|
self.user_consent_version: Optional[str] = None
|
|
|
|
self.user_consent_template_dir: Optional[str] = None
|
2018-05-18 10:41:40 -04:00
|
|
|
self.user_consent_server_notice_content = None
|
2018-05-25 06:36:43 -04:00
|
|
|
self.user_consent_server_notice_to_guests = False
|
2018-05-22 03:56:52 -04:00
|
|
|
self.block_events_without_consent_error = None
|
2018-11-06 05:32:34 -05:00
|
|
|
self.user_consent_at_registration = False
|
|
|
|
self.user_consent_policy_name = "Privacy Policy"
|
2018-05-18 10:41:40 -04:00
|
|
|
|
2019-06-24 06:34:45 -04:00
|
|
|
def read_config(self, config, **kwargs):
|
2018-05-18 10:41:40 -04:00
|
|
|
consent_config = config.get("user_consent")
|
2021-01-27 10:59:50 -05:00
|
|
|
self.terms_template = self.read_template("terms.html")
|
2020-10-02 06:15:53 -04:00
|
|
|
|
2018-05-18 10:41:40 -04:00
|
|
|
if consent_config is None:
|
|
|
|
return
|
|
|
|
self.user_consent_version = str(consent_config["version"])
|
2019-01-29 10:29:09 -05:00
|
|
|
self.user_consent_template_dir = self.abspath(consent_config["template_dir"])
|
2021-09-23 07:13:34 -04:00
|
|
|
if not isinstance(self.user_consent_template_dir, str) or not path.isdir(
|
|
|
|
self.user_consent_template_dir
|
|
|
|
):
|
2019-01-29 10:29:09 -05:00
|
|
|
raise ConfigError(
|
|
|
|
"Could not find template directory '%s'"
|
|
|
|
% (self.user_consent_template_dir,)
|
|
|
|
)
|
2018-05-18 10:41:40 -04:00
|
|
|
self.user_consent_server_notice_content = consent_config.get(
|
|
|
|
"server_notice_content"
|
|
|
|
)
|
2018-05-22 03:56:52 -04:00
|
|
|
self.block_events_without_consent_error = consent_config.get(
|
|
|
|
"block_events_error"
|
2019-06-20 05:32:02 -04:00
|
|
|
)
|
2018-05-25 06:36:43 -04:00
|
|
|
self.user_consent_server_notice_to_guests = bool(
|
2018-05-22 03:56:52 -04:00
|
|
|
consent_config.get("send_server_notice_to_guests", False)
|
2019-06-20 05:32:02 -04:00
|
|
|
)
|
2018-11-06 05:32:34 -05:00
|
|
|
self.user_consent_at_registration = bool(
|
|
|
|
consent_config.get("require_at_registration", False)
|
2018-05-22 03:56:52 -04:00
|
|
|
)
|
2018-11-06 05:32:34 -05:00
|
|
|
self.user_consent_policy_name = consent_config.get(
|
|
|
|
"policy_name", "Privacy Policy"
|
|
|
|
)
|
2018-05-10 19:17:11 -04:00
|
|
|
|
2019-06-21 19:00:20 -04:00
|
|
|
def generate_config_section(self, **kwargs):
|
2018-05-10 19:17:11 -04:00
|
|
|
return DEFAULT_CONFIG
|