mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import configparser
 | 
						|
import os
 | 
						|
from typing import Optional, overload
 | 
						|
 | 
						|
 | 
						|
class ZulipSettingsError(Exception):
 | 
						|
    pass
 | 
						|
 | 
						|
 | 
						|
DEPLOY_ROOT = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))
 | 
						|
 | 
						|
config_file = configparser.RawConfigParser()
 | 
						|
config_file.read("/etc/zulip/zulip.conf")
 | 
						|
 | 
						|
# Whether this instance of Zulip is running in a production environment.
 | 
						|
PRODUCTION = config_file.has_option("machine", "deploy_type")
 | 
						|
DEVELOPMENT = not PRODUCTION
 | 
						|
secrets_file = configparser.RawConfigParser()
 | 
						|
if PRODUCTION:  # nocoverage
 | 
						|
    secrets_file.read("/etc/zulip/zulip-secrets.conf")
 | 
						|
else:
 | 
						|
    secrets_file.read(os.path.join(DEPLOY_ROOT, "zproject/dev-secrets.conf"))
 | 
						|
 | 
						|
 | 
						|
@overload
 | 
						|
def get_secret(key: str, default_value: str, development_only: bool = False) -> str:
 | 
						|
    ...
 | 
						|
 | 
						|
 | 
						|
@overload
 | 
						|
def get_secret(
 | 
						|
    key: str, default_value: Optional[str] = None, development_only: bool = False
 | 
						|
) -> Optional[str]:
 | 
						|
    ...
 | 
						|
 | 
						|
 | 
						|
def get_secret(
 | 
						|
    key: str, default_value: Optional[str] = None, development_only: bool = False
 | 
						|
) -> Optional[str]:
 | 
						|
    if development_only and PRODUCTION:  # nocoverage
 | 
						|
        return default_value
 | 
						|
    return secrets_file.get("secrets", key, fallback=default_value)
 | 
						|
 | 
						|
 | 
						|
def get_mandatory_secret(key: str) -> str:
 | 
						|
    secret = get_secret(key)
 | 
						|
    if secret is None:
 | 
						|
        if os.environ.get("DISABLE_MANDATORY_SECRET_CHECK") == "True":
 | 
						|
            return ""
 | 
						|
        raise ZulipSettingsError(f'Mandatory secret "{key}" is not set')
 | 
						|
    return secret
 | 
						|
 | 
						|
 | 
						|
@overload
 | 
						|
def get_config(section: str, key: str, default_value: str) -> str:
 | 
						|
    ...
 | 
						|
 | 
						|
 | 
						|
@overload
 | 
						|
def get_config(section: str, key: str, default_value: Optional[str] = None) -> Optional[str]:
 | 
						|
    ...
 | 
						|
 | 
						|
 | 
						|
def get_config(section: str, key: str, default_value: Optional[str] = None) -> Optional[str]:
 | 
						|
    return config_file.get(section, key, fallback=default_value)
 | 
						|
 | 
						|
 | 
						|
def get_from_file_if_exists(path: str) -> str:
 | 
						|
    if os.path.exists(path):
 | 
						|
        with open(path) as f:
 | 
						|
            return f.read()
 | 
						|
    else:
 | 
						|
        return ""
 |