111 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
# -*- coding: utf-8 -*-
 | 
						|
# Copyright 2015, 2016 OpenMarket Ltd
 | 
						|
# Copyright 2020 The Matrix.org Foundation C.I.C.
 | 
						|
#
 | 
						|
# 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.
 | 
						|
 | 
						|
from ._base import Config
 | 
						|
 | 
						|
 | 
						|
class AuthConfig(Config):
 | 
						|
    """Password and login configuration
 | 
						|
    """
 | 
						|
 | 
						|
    section = "auth"
 | 
						|
 | 
						|
    def read_config(self, config, **kwargs):
 | 
						|
        password_config = config.get("password_config", {})
 | 
						|
        if password_config is None:
 | 
						|
            password_config = {}
 | 
						|
 | 
						|
        self.password_enabled = password_config.get("enabled", True)
 | 
						|
        self.password_localdb_enabled = password_config.get("localdb_enabled", True)
 | 
						|
        self.password_pepper = password_config.get("pepper", "")
 | 
						|
 | 
						|
        # Password policy
 | 
						|
        self.password_policy = password_config.get("policy") or {}
 | 
						|
        self.password_policy_enabled = self.password_policy.get("enabled", False)
 | 
						|
 | 
						|
        # User-interactive authentication
 | 
						|
        ui_auth = config.get("ui_auth") or {}
 | 
						|
        self.ui_auth_session_timeout = ui_auth.get("session_timeout", 0)
 | 
						|
 | 
						|
    def generate_config_section(self, config_dir_path, server_name, **kwargs):
 | 
						|
        return """\
 | 
						|
        password_config:
 | 
						|
           # Uncomment to disable password login
 | 
						|
           #
 | 
						|
           #enabled: false
 | 
						|
 | 
						|
           # Uncomment to disable authentication against the local password
 | 
						|
           # database. This is ignored if `enabled` is false, and is only useful
 | 
						|
           # if you have other password_providers.
 | 
						|
           #
 | 
						|
           #localdb_enabled: false
 | 
						|
 | 
						|
           # Uncomment and change to a secret random string for extra security.
 | 
						|
           # DO NOT CHANGE THIS AFTER INITIAL SETUP!
 | 
						|
           #
 | 
						|
           #pepper: "EVEN_MORE_SECRET"
 | 
						|
 | 
						|
           # Define and enforce a password policy. Each parameter is optional.
 | 
						|
           # This is an implementation of MSC2000.
 | 
						|
           #
 | 
						|
           policy:
 | 
						|
              # Whether to enforce the password policy.
 | 
						|
              # Defaults to 'false'.
 | 
						|
              #
 | 
						|
              #enabled: true
 | 
						|
 | 
						|
              # Minimum accepted length for a password.
 | 
						|
              # Defaults to 0.
 | 
						|
              #
 | 
						|
              #minimum_length: 15
 | 
						|
 | 
						|
              # Whether a password must contain at least one digit.
 | 
						|
              # Defaults to 'false'.
 | 
						|
              #
 | 
						|
              #require_digit: true
 | 
						|
 | 
						|
              # Whether a password must contain at least one symbol.
 | 
						|
              # A symbol is any character that's not a number or a letter.
 | 
						|
              # Defaults to 'false'.
 | 
						|
              #
 | 
						|
              #require_symbol: true
 | 
						|
 | 
						|
              # Whether a password must contain at least one lowercase letter.
 | 
						|
              # Defaults to 'false'.
 | 
						|
              #
 | 
						|
              #require_lowercase: true
 | 
						|
 | 
						|
              # Whether a password must contain at least one lowercase letter.
 | 
						|
              # Defaults to 'false'.
 | 
						|
              #
 | 
						|
              #require_uppercase: true
 | 
						|
 | 
						|
        ui_auth:
 | 
						|
            # The number of milliseconds to allow a user-interactive authentication
 | 
						|
            # session to be active.
 | 
						|
            #
 | 
						|
            # This defaults to 0, meaning the user is queried for their credentials
 | 
						|
            # before every action, but this can be overridden to alow a single
 | 
						|
            # validation to be re-used.  This weakens the protections afforded by
 | 
						|
            # the user-interactive authentication process, by allowing for multiple
 | 
						|
            # (and potentially different) operations to use the same validation session.
 | 
						|
            #
 | 
						|
            # Uncomment below to allow for credential validation to last for 15
 | 
						|
            # seconds.
 | 
						|
            #
 | 
						|
            #session_timeout: 15000
 | 
						|
        """
 |