Skip to content
Snippets Groups Projects
sample_config.yaml 93.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • # you know that will never want synapse to try to spider.
    #
    # Each list entry is a dictionary of url component attributes as returned
    # by urlparse.urlsplit as applied to the absolute form of the URL.  See
    # https://docs.python.org/2/library/urlparse.html#urlparse.urlsplit
    # The values of the dictionary are treated as an filename match pattern
    # applied to that component of URLs, unless they start with a ^ in which
    # case they are treated as a regular expression match.  If all the
    # specified component matches for a given list item succeed, the URL is
    # blacklisted.
    #
    #url_preview_url_blacklist:
    #  # blacklist any URL with a username in its URI
    #  - username: '*'
    #
    #  # blacklist all *.google.com URLs
    #  - netloc: 'google.com'
    #  - netloc: '*.google.com'
    #
    #  # blacklist all plain HTTP URLs
    #  - scheme: 'http'
    #
    #  # blacklist http(s)://www.acme.com/foo
    #  - netloc: 'www.acme.com'
    #    path: '/foo'
    #
    #  # blacklist any URL with a literal IPv4 address
    #  - netloc: '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'
    
    # The largest allowed URL preview spidering size in bytes
    
    # A list of values for the Accept-Language HTTP header used when
    # downloading webpages during URL preview generation. This allows
    # Synapse to specify the preferred languages that URL previews should
    # be in when communicating with remote servers.
    #
    # Each value is a IETF language tag; a 2-3 letter identifier for a
    # language, optionally followed by subtags separated by '-', specifying
    # a country or region variant.
    #
    # Multiple values can be provided, and a weight can be added to each by
    # using quality value syntax (;q=). '*' translates to any language.
    #
    # Defaults to "en".
    #
    # Example:
    #
    # url_preview_accept_language:
    #   - en-UK
    #   - en-US;q=0.9
    #   - fr;q=0.8
    #   - *;q=0.7
    #
    url_preview_accept_language:
    #   - en
    
    
    # See docs/CAPTCHA_SETUP.md for full details of configuring this.
    
    # This homeserver's ReCAPTCHA public key. Must be specified if
    # enable_registration_captcha is enabled.
    
    #recaptcha_public_key: "YOUR_PUBLIC_KEY"
    
    # This homeserver's ReCAPTCHA private key. Must be specified if
    # enable_registration_captcha is enabled.
    
    #recaptcha_private_key: "YOUR_PRIVATE_KEY"
    
    # Uncomment to enable ReCaptcha checks when registering, preventing signup
    
    # unless a captcha is answered. Requires a valid ReCaptcha
    
    # public/private key. Defaults to 'false'.
    
    #enable_registration_captcha: true
    
    
    # The API endpoint to use for verifying m.login.recaptcha responses.
    
    # Defaults to "https://www.recaptcha.net/recaptcha/api/siteverify".
    
    #recaptcha_siteverify_api: "https://my.recaptcha.site"
    
    
    
    ## TURN ##
    
    # The public URIs of the TURN server to give to clients
    #
    #turn_uris: []
    
    # The shared secret used to compute passwords for the TURN server
    #
    #turn_shared_secret: "YOUR_SHARED_SECRET"
    
    # The Username and password if the TURN server needs them and
    # does not use a token
    #
    #turn_username: "TURNSERVER_USERNAME"
    #turn_password: "TURNSERVER_PASSWORD"
    
    # How long generated TURN credentials last
    #
    
    
    # Whether guests should be allowed to use the TURN server.
    # This defaults to True, otherwise VoIP will be unreliable for guests.
    # However, it does introduce a slight security risk as it allows users to
    # connect to arbitrary endpoints without having first signed up for a
    # valid account (e.g. by passing a CAPTCHA).
    #
    
    Brendan Abolivier's avatar
    Brendan Abolivier committed
    # Registration can be rate-limited using the parameters in the "Ratelimiting"
    # section of this file.
    
    # Optional account validity configuration. This allows for accounts to be denied
    # any request after a given period.
    #
    
    Brendan Abolivier's avatar
    Brendan Abolivier committed
    # Once this feature is enabled, Synapse will look for registered users without an
    # expiration date at startup and will add one to every account it found using the
    # current settings at that time.
    # This means that, if a validity period is set, and Synapse is restarted (it will
    # then derive an expiration date from the current validity period), and some time
    # after that the validity period changes and Synapse is restarted, the users'
    
    Brendan Abolivier's avatar
    Brendan Abolivier committed
    # expiration dates won't be updated unless their account is manually renewed. This
    
    Brendan Abolivier's avatar
    Brendan Abolivier committed
    # date will be randomly selected within a range [now + period - d ; now + period],
    
    Brendan Abolivier's avatar
    Brendan Abolivier committed
    # where d is equal to 10% of the validity period.
    
    Brendan Abolivier's avatar
    Brendan Abolivier committed
    #
    
    account_validity:
      # The account validity feature is disabled by default. Uncomment the
      # following line to enable it.
      #
      #enabled: true
    
      # The period after which an account is valid after its registration. When
      # renewing the account, its validity period will be extended by this amount
      # of time. This parameter is required when using the account validity
      # feature.
      #
      #period: 6w
    
      # The amount of time before an account's expiry date at which Synapse will
      # send an email to the account's email address with a renewal link. By
      # default, no such emails are sent.
      #
      # If you enable this setting, you will also need to fill out the 'email' and
      # 'public_baseurl' configuration sections.
      #
      #renew_at: 1w
    
      # The subject of the email sent out with the renewal link. '%(app)s' can be
      # used as a placeholder for the 'app_name' parameter from the 'email'
      # section.
      #
      # Note that the placeholder must be written '%(app)s', including the
      # trailing 's'.
      #
      # If this is not set, a default value is used.
      #
      #renew_email_subject: "Renew your %(app)s account"
    
      # Directory in which Synapse will try to find templates for the HTML files to
      # serve to the user when trying to renew an account. If not set, default
      # templates from within the Synapse package will be used.
      #
      #template_dir: "res/templates"
    
      # File within 'template_dir' giving the HTML to be displayed to the user after
      # they successfully renewed their account. If not set, default text is used.
      #
      #account_renewed_html_path: "account_renewed.html"
    
      # File within 'template_dir' giving the HTML to be displayed when the user
      # tries to renew an account with an invalid renewal token. If not set,
      # default text is used.
      #
      #invalid_token_html_path: "invalid_token.html"
    
    # Time that a user's session remains valid for, after they log in.
    #
    # Note that this is not currently compatible with guest logins.
    #
    # Note also that this is calculated at login time: changes are not applied
    # retrospectively to users who have already logged in.
    #
    # By default, this is infinite.
    #
    #session_lifetime: 24h
    
    
    # The user must provide all of the below types of 3PID when registering.
    #
    #registrations_require_3pid:
    #  - email
    #  - msisdn
    
    # Explicitly disable asking for MSISDNs from the registration
    # flow (overrides registrations_require_3pid if MSISDNs are set as required)
    #
    
    #disable_msisdn_registration: true
    
    
    # Mandate that users are only allowed to associate certain formats of
    # 3PIDs with accounts on this server.
    #
    #allowed_local_3pids:
    #  - medium: email
    #    pattern: '.*@matrix\.org'
    #  - medium: email
    #    pattern: '.*@vector\.im'
    #  - medium: msisdn
    #    pattern: '\+44'
    
    
    # Enable 3PIDs lookup requests to identity servers from this server.
    #
    #enable_3pid_lookup: true
    
    
    # If set, allows registration of standard or admin accounts by anyone who
    # has the shared secret, even if registration is otherwise disabled.
    
    #registration_shared_secret: <PRIVATE STRING>
    
    
    # Set the number of bcrypt rounds used to generate password hash.
    # Larger numbers increase the work factor needed to generate the hash.
    # The default number is 12 (which equates to 2^12 rounds).
    # N.B. that increasing this will exponentially increase the time required
    # to register or login - e.g. 24 => 2^24 rounds which will take >20 mins.
    #
    
    
    # Allows users to register as guests without a password/email/etc, and
    # participate in rooms hosted on this server which have been made
    # accessible to anonymous users.
    #
    
    
    # The identity server which we suggest that clients should use when users log
    # in on this server.
    #
    # (By default, no suggestion is made, so it is left up to the client.
    # This setting is ignored unless public_baseurl is also set.)
    #
    #default_identity_server: https://matrix.org
    
    
    # Handle threepid (email/phone etc) registration and password resets through a set of
    # *trusted* identity servers. Note that this allows the configured identity server to
    # reset passwords for accounts!
    #
    # Be aware that if `email` is not set, and SMTP options have not been
    # configured in the email config block, registration and user password resets via
    # email will be globally disabled.
    #
    # Additionally, if `msisdn` is not set, registration and password resets via msisdn
    
    # will be disabled regardless, and users will not be able to associate an msisdn
    # identifier to their account. This is due to Synapse currently not supporting
    # any method of sending SMS messages on its own.
    
    #
    # To enable using an identity server for operations regarding a particular third-party
    # identifier type, set the value to the URL of that identity server as shown in the
    # examples below.
    #
    # Servers handling the these requests must answer the `/requestToken` endpoints defined
    # by the Matrix Identity Service API specification:
    # https://matrix.org/docs/spec/identity_service/latest
    #
    
    # If a delegate is specified, the config option public_baseurl must also be filled out.
    #
    
        #email: https://example.com     # Delegate email sending to example.com
    
        #msisdn: http://localhost:8090  # Delegate SMS sending to this local process
    
    
    # Whether users are allowed to change their displayname after it has
    # been initially set. Useful when provisioning users based on the
    # contents of a third-party directory.
    #
    # Does not apply to server administrators. Defaults to 'true'
    #
    #enable_set_displayname: false
    
    # Whether users are allowed to change their avatar after it has been
    # initially set. Useful when provisioning users based on the contents
    # of a third-party directory.
    #
    # Does not apply to server administrators. Defaults to 'true'
    #
    #enable_set_avatar_url: false
    
    # Whether users can change the 3PIDs associated with their accounts
    # (email address and msisdn).
    #
    # Defaults to 'true'
    #
    #enable_3pid_changes: false
    
    
    # Users who register on this homeserver will automatically be joined
    
    # to these rooms.
    #
    # By default, any room aliases included in this list will be created
    # as a publicly joinable room when the first user registers for the
    # homeserver. This behaviour can be customised with the settings below.
    
    #
    #auto_join_rooms:
    #  - "#example:example.com"
    
    # Where auto_join_rooms are specified, setting this flag ensures that the
    # the rooms exist by creating them when the first user on the
    # homeserver registers.
    
    #
    # By default the auto-created rooms are publicly joinable from any federated
    # server. Use the autocreate_auto_join_rooms_federated and
    # autocreate_auto_join_room_preset settings below to customise this behaviour.
    #
    
    # Setting to false means that if the rooms are not manually created,
    # users cannot be auto-joined since they do not exist.
    #
    
    # Defaults to true. Uncomment the following line to disable automatically
    # creating auto-join rooms.
    #
    #autocreate_auto_join_rooms: false
    
    # Whether the auto_join_rooms that are auto-created are available via
    # federation. Only has an effect if autocreate_auto_join_rooms is true.
    #
    # Note that whether a room is federated cannot be modified after
    # creation.
    #
    # Defaults to true: the room will be joinable from other servers.
    # Uncomment the following to prevent users from other homeservers from
    # joining these rooms.
    #
    #autocreate_auto_join_rooms_federated: false
    
    # The room preset to use when auto-creating one of auto_join_rooms. Only has an
    # effect if autocreate_auto_join_rooms is true.
    #
    # This can be one of "public_chat", "private_chat", or "trusted_private_chat".
    # If a value of "private_chat" or "trusted_private_chat" is used then
    # auto_join_mxid_localpart must also be configured.
    #
    # Defaults to "public_chat", meaning that the room is joinable by anyone, including
    # federated servers if autocreate_auto_join_rooms_federated is true (the default).
    # Uncomment the following to require an invitation to join these rooms.
    #
    #autocreate_auto_join_room_preset: private_chat
    
    # The local part of the user id which is used to create auto_join_rooms if
    # autocreate_auto_join_rooms is true. If this is not provided then the
    # initial user account that registers will be used to create the rooms.
    #
    # The user id is also used to invite new users to any auto-join rooms which
    # are set to invite-only.
    #
    # It *must* be configured if autocreate_auto_join_room_preset is set to
    # "private_chat" or "trusted_private_chat".
    #
    # Note that this must be specified in order for new users to be correctly
    # invited to any auto-join rooms which have been set to invite-only (either
    # at the time of creation or subsequently).
    #
    # Note that, if the room already exists, this user must be joined and
    # have the appropriate permissions to invite new members.
    #
    #auto_join_mxid_localpart: system
    
    # When auto_join_rooms is specified, setting this flag to false prevents
    # guest accounts from being automatically joined to the rooms.
    #
    # Defaults to true.
    #
    #auto_join_rooms_for_guests: false
    
    
    
    ## Metrics ###
    
    # Enable collection and rendering of performance metrics
    #
    
    
    # Enable sentry integration
    # NOTE: While attempts are made to ensure that the logs don't contain
    # any sensitive information, this cannot be guaranteed. By enabling
    # this option the sentry server may therefore receive sensitive
    # information, and it in turn may then diseminate sensitive information
    # through insecure notification channels if so configured.
    #
    #sentry:
    #    dsn: "..."
    
    
    # Flags to enable Prometheus metrics which are not suitable to be
    # enabled by default, either for performance reasons or limited use.
    #
    metrics_flags:
    
        # Publish synapse_federation_known_servers, a gauge of the number of
    
        # servers this homeserver knows about, including itself. May cause
        # performance problems on large homeservers.
        #
        #known_servers: true
    
    
    # Whether or not to report anonymized homeserver usage statistics.
    
    # The endpoint to report the anonymized homeserver usage statistics to.
    # Defaults to https://matrix.org/report-usage-stats/push
    #
    #report_stats_endpoint: https://example.com/report-usage-stats/push
    
    
    
    ## API Configuration ##
    
    # A list of event types that will be included in the room_invite_state
    #
    
    #room_invite_state_types:
    #  - "m.room.join_rules"
    #  - "m.room.canonical_alias"
    #  - "m.room.avatar"
    #  - "m.room.encryption"
    #  - "m.room.name"
    
    # A list of application service config files to use
    
    #app_service_config_files:
    #  - app_service_1.yaml
    #  - app_service_2.yaml
    
    # Uncomment to enable tracking of application service IP addresses. Implicitly
    
    # enables MAU tracking for application service users.
    #
    
    #track_appservice_user_ips: true
    
    
    
    # a secret which is used to sign access tokens. If none is specified,
    # the registration_shared_secret is used, if one is given; otherwise,
    # a secret key is derived from the signing key.
    #
    
    #macaroon_secret_key: <PRIVATE STRING>
    
    
    # a secret which is used to calculate HMACs for form values, to stop
    # falsification of values. Must be specified for the User Consent
    # forms to work.
    #
    
    #form_secret: <PRIVATE STRING>
    
    
    ## Signing Keys ##
    
    # Path to the signing key to sign messages with
    #
    signing_key_path: "CONFDIR/SERVERNAME.signing.key"
    
    # The keys that the server used to sign messages with but won't use
    
    # to sign new messages.
    #
    old_signing_keys:
      # For each key, `key` should be the base64-encoded public key, and
      # `expired_ts`should be the time (in milliseconds since the unix epoch) that
      # it was last used.
      #
      # It is possible to build an entry from an old signing.key file using the
      # `export_signing_key` script which is provided with synapse.
      #
      # For example:
      #
      #"ed25519:id": { key: "base64string", expired_ts: 123456789123 }
    
    
    # How long key response published by this server is valid for.
    # Used to set the valid_until_ts in /key/v2 APIs.
    # Determines how quickly servers will query to check which keys
    # are still valid.
    #
    
    
    # The trusted servers to download signing keys from.
    #
    
    # When we need to fetch a signing key, each server is tried in parallel.
    #
    # Normally, the connection to the key server is validated via TLS certificates.
    # Additional security can be provided by configuring a `verify key`, which
    # will make synapse check that the response is signed by that key.
    #
    # This setting supercedes an older setting named `perspectives`. The old format
    # is still supported for backwards-compatibility, but it is deprecated.
    #
    
    # 'trusted_key_servers' defaults to matrix.org, but using it will generate a
    # warning on start-up. To suppress this warning, set
    # 'suppress_key_server_warning' to true.
    #
    
    # Options for each entry in the list include:
    #
    #    server_name: the name of the server. required.
    #
    #    verify_keys: an optional map from key id to base64-encoded public key.
    #       If specified, we will check that the response is signed by at least
    #       one of the given keys.
    #
    #    accept_keys_insecurely: a boolean. Normally, if `verify_keys` is unset,
    #       and federation_verify_certificates is not `true`, synapse will refuse
    #       to start, because this would allow anyone who can spoof DNS responses
    #       to masquerade as the trusted key server. If you know what you are doing
    #       and are sure that your network environment provides a secure connection
    #       to the key server, you can set this to `true` to override this
    #       behaviour.
    #
    # An example configuration might look like:
    #
    #trusted_key_servers:
    #  - server_name: "my_trusted_server.example.com"
    #    verify_keys:
    #      "ed25519:auto": "abcdefghijklmnopqrstuvwxyzabcdefghijklmopqr"
    #  - server_name: "my_other_trusted_server.example.com"
    #
    
    trusted_key_servers:
      - server_name: "matrix.org"
    
    # Uncomment the following to disable the warning that is emitted when the
    # trusted_key_servers include 'matrix.org'. See above.
    
    Erik Johnston's avatar
    Erik Johnston committed
    # The signing keys to use when acting as a trusted key server. If not specified
    # defaults to the server signing key.
    
    #
    # Can contain multiple keys, one per line.
    #
    #key_server_signing_keys_path: "key_server_signing_keys.key"
    
    ## Single sign-on integration ##
    
    
    # The following settings can be used to make Synapse use a single sign-on
    # provider for authentication, instead of its internal password database.
    
    # You will probably also want to set the following options to `false` to
    
    # disable the regular login/registration flows:
    #   * enable_registration
    #   * password_config.enabled
    
    # You will also want to investigate the settings under the "sso" configuration
    # section below.
    
    
    # Enable SAML2 for registration and login. Uses pysaml2.
    #
    # At least one of `sp_config` or `config_path` must be set in this section to
    # enable SAML login.
    
    # Once SAML support is enabled, a metadata file will be exposed at
    # https://<server>:<port>/_matrix/saml2/metadata.xml, which you may be able to
    # use to configure your SAML IdP with. Alternatively, you can manually configure
    # the IdP to use an ACS location of
    # https://<server>:<port>/_matrix/saml2/authn_response.
    #
    
    saml2_config:
      # `sp_config` is the configuration for the pysaml2 Service Provider.
      # See pysaml2 docs for format of config.
      #
      # Default values will be used for the 'entityid' and 'service' settings,
      # so it is not normally necessary to specify them unless you need to
      # override them.
      #
    
      sp_config:
        # Point this to the IdP's metadata. You must provide either a local
        # file via the `local` attribute or (preferably) a URL via the
        # `remote` attribute.
        #
        #metadata:
        #  local: ["saml2/idp.xml"]
        #  remote:
        #    - url: https://our_idp/metadata.xml
    
    
        # Allowed clock difference in seconds between the homeserver and IdP.
        #
        # Uncomment the below to increase the accepted time difference from 0 to 3 seconds.
        #
        #accepted_time_diff: 3
    
    
        # By default, the user has to go to our login page first. If you'd like
        # to allow IdP-initiated login, set 'allow_unsolicited: true' in a
        # 'service.sp' section:
        #
        #service:
        #  sp:
        #    allow_unsolicited: true
    
        # The examples below are just used to generate our metadata xml, and you
        # may well not need them, depending on your setup. Alternatively you
        # may need a whole lot more detail - see the pysaml2 docs!
    
        #description: ["My awesome SP", "en"]
        #name: ["Test SP", "en"]
    
    
        #ui_info:
        #  display_name:
        #    - lang: en
        #      text: "Display Name is the descriptive name of your service."
        #  description:
        #    - lang: en
        #      text: "Description should be a short paragraph explaining the purpose of the service."
        #  information_url:
        #    - lang: en
        #      text: "https://example.com/terms-of-service"
        #  privacy_statement_url:
        #    - lang: en
        #      text: "https://example.com/privacy-policy"
        #  keywords:
        #    - lang: en
        #      text: ["Matrix", "Element"]
        #  logo:
        #    - lang: en
        #      text: "https://example.com/logo.svg"
        #      width: "200"
        #      height: "80"
    
    
        #organization:
        #  name: Example com
        #  display_name:
        #    - ["Example co", "en"]
        #  url: "http://example.com"
    
        #contact_person:
        #  - given_name: Bob
        #    sur_name: "the Sysadmin"
        #    email_address": ["admin@example.com"]
        #    contact_type": technical
    
    
      # Instead of putting the config inline as above, you can specify a
      # separate pysaml2 configuration file:
      #
      #config_path: "CONFDIR/sp_conf.py"
    
    
      # The lifetime of a SAML session. This defines how long a user has to
    
      # complete the authentication process, if allow_unsolicited is unset.
    
      # An external module can be provided here as a custom solution to
      # mapping attributes returned from a saml provider onto a matrix user.
    
      user_mapping_provider:
        # The custom module's class. Uncomment to use a custom module.
        #
        #module: mapping_provider.SamlMappingProvider
    
        # Custom configuration values for the module. Below options are
        # intended for the built-in provider, they should be changed if
        # using a custom module. This section will be passed as a Python
        # dictionary to the module's `parse_config` method.
        #
        config:
          # The SAML attribute (after mapping via the attribute maps) to use
          # to derive the Matrix ID from. 'uid' by default.
          #
          # Note: This used to be configured by the
          # saml2_config.mxid_source_attribute option. If that is still
          # defined, its value will be used instead.
          #
          #mxid_source_attribute: displayName
    
          # The mapping system to use for mapping the saml attribute onto a
          # matrix ID.
          #
          # Options include:
          #  * 'hexencode' (which maps unpermitted characters to '=xx')
          #  * 'dotreplace' (which replaces unpermitted characters with
          #     '.').
          # The default is 'hexencode'.
          #
          # Note: This used to be configured by the
          # saml2_config.mxid_mapping option. If that is still defined, its
          # value will be used instead.
          #
          #mxid_mapping: dotreplace
    
      # In previous versions of synapse, the mapping from SAML attribute to
      # MXID was always calculated dynamically rather than stored in a
      # table. For backwards- compatibility, we will look for user_ids
      # matching such a pattern before creating a new account.
    
      #
      # This setting controls the SAML attribute which will be used for this
    
      # backwards-compatibility lookup. Typically it should be 'uid', but if
      # the attribute maps are changed, it may be necessary to change it.
    
      #
      # The default is 'uid'.
      #
      #grandfathered_mxid_source_attribute: upn
    
      # It is possible to configure Synapse to only allow logins if SAML attributes
      # match particular values. The requirements can be listed under
      # `attribute_requirements` as shown below. All of the listed attributes must
      # match for the login to be permitted.
      #
      #attribute_requirements:
      #  - attribute: userGroup
      #    value: "staff"
      #  - attribute: department
      #    value: "sales"
    
    
      # If the metadata XML contains multiple IdP entities then the `idp_entityid`
      # option must be set to the entity to redirect users to.
      #
      # Most deployments only have a single IdP entity and so should omit this
      # option.
      #
      #idp_entityid: 'https://our_idp/entityid'
    
    
    # Enable OpenID Connect (OIDC) / OAuth 2.0 for registration and login.
    
    # See https://github.com/matrix-org/synapse/blob/master/docs/openid.md
    # for some example configurations.
    
      # Uncomment the following to enable authorization against an OpenID Connect
      # server. Defaults to false.
      #
      #enabled: true
    
      # Uncomment the following to disable use of the OIDC discovery mechanism to
      # discover endpoints. Defaults to true.
      #
      #discover: false
    
      # the OIDC issuer. Used to validate tokens and (if discovery is enabled) to
      # discover the provider's endpoints.
      #
      # Required if 'enabled' is true.
      #
      #issuer: "https://accounts.example.com/"
    
      # oauth2 client id to use.
      #
      # Required if 'enabled' is true.
      #
      #client_id: "provided-by-your-issuer"
    
      # oauth2 client secret to use.
      #
      # Required if 'enabled' is true.
      #
      #client_secret: "provided-by-your-issuer"
    
      # auth method to use when exchanging the token.
      # Valid values are 'client_secret_basic' (default), 'client_secret_post' and
      # 'none'.
      #
      #client_auth_method: client_secret_post
    
      # list of scopes to request. This should normally include the "openid" scope.
      # Defaults to ["openid"].
      #
      #scopes: ["openid", "profile"]
    
      # the oauth2 authorization endpoint. Required if provider discovery is disabled.
      #
      #authorization_endpoint: "https://accounts.example.com/oauth2/auth"
    
      # the oauth2 token endpoint. Required if provider discovery is disabled.
      #
      #token_endpoint: "https://accounts.example.com/oauth2/token"
    
      # the OIDC userinfo endpoint. Required if discovery is disabled and the
      # "openid" scope is not requested.
      #
      #userinfo_endpoint: "https://accounts.example.com/userinfo"
    
      # URI where to fetch the JWKS. Required if discovery is disabled and the
      # "openid" scope is used.
      #
      #jwks_uri: "https://accounts.example.com/.well-known/jwks.json"
    
      # Uncomment to skip metadata verification. Defaults to false.
      #
      # Use this if you are connecting to a provider that is not OpenID Connect
      # compliant.
      # Avoid this in production.
      #
      #skip_verification: true
    
      # Whether to fetch the user profile from the userinfo endpoint. Valid
      # values are: "auto" or "userinfo_endpoint".
      #
      # Defaults to "auto", which fetches the userinfo endpoint if "openid" is included
      # in `scopes`. Uncomment the following to always fetch the userinfo endpoint.
      #
      #user_profile_method: "userinfo_endpoint"
    
    
      # Uncomment to allow a user logging in via OIDC to match a pre-existing account instead
      # of failing. This could be used if switching from password logins to OIDC. Defaults to false.
      #
      #allow_existing_users: true
    
    
      # An external module can be provided here as a custom solution to mapping
      # attributes returned from a OIDC provider onto a matrix user.
      #
      user_mapping_provider:
        # The custom module's class. Uncomment to use a custom module.
        # Default is 'synapse.handlers.oidc_handler.JinjaOidcMappingProvider'.
        #
        # See https://github.com/matrix-org/synapse/blob/master/docs/sso_mapping_providers.md#openid-mapping-providers
        # for information on implementing a custom mapping provider.
        #
        #module: mapping_provider.OidcMappingProvider
    
        # Custom configuration values for the module. This section will be passed as
        # a Python dictionary to the user mapping provider module's `parse_config`
        # method.
        #
        # The examples below are intended for the default provider: they should be
        # changed if using a custom provider.
    
        config:
          # name of the claim containing a unique identifier for the user.
          # Defaults to `sub`, which OpenID Connect compliant providers should provide.
    
          # Jinja2 template for the localpart of the MXID.
    
          # When rendering, this template is given the following variables:
          #   * user: The claims returned by the UserInfo Endpoint and/or in the ID
          #     Token
    
          # If this is not set, the user will be prompted to choose their
          # own username.
    
          #localpart_template: "{{ user.preferred_username }}"
    
          # Jinja2 template for the display name to set on first login.
          #
          # If unset, no displayname will be set.
          #
          #display_name_template: "{{ user.given_name }} {{ user.last_name }}"
    
          # Jinja2 templates for extra attributes to send back to the client during
          # login.
          #
          # Note that these are non-standard and clients will ignore them without modifications.
          #
          #extra_attributes:
            #birthdate: "{{ user.birthdate }}"
    
    
    # Enable Central Authentication Service (CAS) for registration and login.
    
    cas_config:
      # Uncomment the following to enable authorization against a CAS server.
      # Defaults to false.
      #
      #enabled: true
    
      # The URL of the CAS authorization endpoint.
      #
      #server_url: "https://cas-server.com"
    
      # The public URL of the homeserver.
      #
      #service_url: "https://homeserver.domain.com:8448"
    
      # The attribute of the CAS response to use as the display name.
      #
      # If unset, no displayname will be set.
      #
      #displayname_attribute: name
    
      # It is possible to configure Synapse to only allow logins if CAS attributes
      # match particular values. All of the keys in the mapping below must exist
      # and the values must match the given value. Alternately if the given value
      # is None then any value is allowed (the attribute just must exist).
      # All of the listed attributes must match for the login to be permitted.
      #
      #required_attributes:
      #  userGroup: "staff"
      #  department: None
    
    # Additional settings to use with single-sign on systems such as OpenID Connect,
    # SAML2 and CAS.
    
        # A list of client URLs which are whitelisted so that the user does not
        # have to confirm giving access to their account to the URL. Any client
        # whose URL starts with an entry in the following list will not be subject
        # to an additional confirmation step after the SSO login is completed.
        #
        # WARNING: An entry such as "https://my.client" is insecure, because it
        # will also match "https://my.client.evil.site", exposing your users to
        # phishing attacks from evil.site. To avoid this, include a slash after the
        # hostname: "https://my.client/".
        #
    
        # If public_baseurl is set, then the login fallback page (used by clients
        # that don't natively support the required login flows) is whitelisted in
        # addition to any URLs in this list.
        #
    
        # By default, this list is empty.
        #
        #client_whitelist:
        #  - https://riot.im/develop
        #  - https://my.custom.client/
    
    
        # 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.
    
        #
        # Synapse will look for the following templates in this directory:
        #
    
        # * HTML page to prompt the user to choose an Identity Provider during
        #   login: 'sso_login_idp_picker.html'.
        #
        #   This is only used if multiple SSO Identity Providers are configured.
        #
        #   When rendering, this template is given the following variables:
        #     * redirect_url: the URL that the user will be redirected to after
        #       login. Needs manual escaping (see
        #       https://jinja.palletsprojects.com/en/2.11.x/templates/#html-escaping).
        #
        #     * server_name: the homeserver's name.
        #
        #     * providers: a list of available Identity Providers. Each element is
        #       an object with the following attributes:
        #         * idp_id: unique identifier for the IdP
        #         * idp_name: user-facing name for the IdP
        #
        #   The rendered HTML page should contain a form which submits its results
        #   back as a GET request, with the following query parameters:
        #
        #     * redirectUrl: the client redirect URI (ie, the `redirect_url` passed
        #       to the template)
        #
        #     * idp: the 'idp_id' of the chosen IDP.
        #
    
        # * HTML page for a confirmation step before redirecting back to the client
        #   with the login token: 'sso_redirect_confirm.html'.
    
        #
        #   When rendering, this template is given three variables:
        #     * redirect_url: the URL the user is about to be redirected to. Needs
        #                     manual escaping (see
        #                     https://jinja.palletsprojects.com/en/2.11.x/templates/#html-escaping).
        #
        #     * display_url: the same as `redirect_url`, but with the query
    
        #                    parameters stripped. The intention is to have a
    
        #                    human-readable URL to show to users, not to use it as
        #                    the final address to redirect to. Needs manual escaping
        #                    (see https://jinja.palletsprojects.com/en/2.11.x/templates/#html-escaping).
        #
        #     * server_name: the homeserver's name.
        #
    
        # * HTML page which notifies the user that they are authenticating to confirm
        #   an operation on their account during the user interactive authentication
        #   process: 'sso_auth_confirm.html'.
        #
        #   When rendering, this template is given the following variables:
        #     * redirect_url: the URL the user is about to be redirected to. Needs
        #                     manual escaping (see
        #                     https://jinja.palletsprojects.com/en/2.11.x/templates/#html-escaping).
        #
        #     * description: the operation which the user is being asked to confirm
        #
        # * HTML page shown after a successful user interactive authentication session:
        #   'sso_auth_success.html'.
        #
        #   Note that this page must include the JavaScript which notifies of a successful authentication
        #   (see https://matrix.org/docs/spec/client_server/r0.6.0#fallback).
        #
        #   This template has no additional variables.
        #
        # * HTML page shown during single sign-on if a deactivated user (according to Synapse's database)
        #   attempts to login: 'sso_account_deactivated.html'.
        #
        #   This template has no additional variables.
        #
    
        # * HTML page to display to users if something goes wrong during the
        #   OpenID Connect authentication process: 'sso_error.html'.
        #
        #   When rendering, this template is given two variables:
        #     * error: the technical name of the error
        #     * error_description: a human-readable message for the error
        #
    
        # You can see the default templates at:
        # https://github.com/matrix-org/synapse/tree/master/synapse/res/templates
        #
        #template_dir: "res/templates"
    
    
    
    # JSON web token integration. The following settings can be used to make
    # Synapse JSON web tokens for authentication, instead of its internal
    # password database.
    #
    # Each JSON Web Token needs to contain a "sub" (subject) claim, which is
    # used as the localpart of the mxid.
    #
    
    # Additionally, the expiration time ("exp"), not before time ("nbf"),
    # and issued at ("iat") claims are validated if present.
    #
    
    # Note that this is a non-standard login type and client support is