mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 03:53:50 +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 ""
 |