Server IP : 195.201.23.43 / Your IP : 18.220.23.205 Web Server : Apache System : Linux webserver2.vercom.be 5.4.0-192-generic #212-Ubuntu SMP Fri Jul 5 09:47:39 UTC 2024 x86_64 User : kdecoratie ( 1041) PHP Version : 7.1.33-63+ubuntu20.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /lib/python3/dist-packages/uaclient/files/ |
Upload File : |
import copy import logging import os from typing import Optional from urllib.parse import urlparse from uaclient import defaults, event_logger, util from uaclient.data_types import ( BoolDataValue, DataObject, Field, IntDataValue, StringDataValue, ) from uaclient.files.data_types import DataObjectFile, DataObjectFileFormat from uaclient.files.files import UAFile # Config proxy fields that are visible and configurable PROXY_FIELDS = [ "apt_http_proxy", "apt_https_proxy", "global_apt_http_proxy", "global_apt_https_proxy", "ua_apt_http_proxy", "ua_apt_https_proxy", "http_proxy", "https_proxy", ] class UserConfigData(DataObject): fields = [ Field("apt_http_proxy", StringDataValue, required=False), Field("apt_https_proxy", StringDataValue, required=False), Field("global_apt_http_proxy", StringDataValue, required=False), Field("global_apt_https_proxy", StringDataValue, required=False), Field("ua_apt_http_proxy", StringDataValue, required=False), Field("ua_apt_https_proxy", StringDataValue, required=False), Field("http_proxy", StringDataValue, required=False), Field("https_proxy", StringDataValue, required=False), Field("apt_news", BoolDataValue, required=False), Field("apt_news_url", StringDataValue, required=False), Field("poll_for_pro_license", BoolDataValue, required=False), Field("polling_error_retry_delay", IntDataValue, required=False), Field("metering_timer", IntDataValue, required=False), Field("update_messaging_timer", IntDataValue, required=False), ] def __init__( self, apt_http_proxy: Optional[str] = None, apt_https_proxy: Optional[str] = None, global_apt_http_proxy: Optional[str] = None, global_apt_https_proxy: Optional[str] = None, ua_apt_http_proxy: Optional[str] = None, ua_apt_https_proxy: Optional[str] = None, http_proxy: Optional[str] = None, https_proxy: Optional[str] = None, apt_news: Optional[bool] = None, apt_news_url: Optional[str] = None, poll_for_pro_license: Optional[bool] = None, polling_error_retry_delay: Optional[int] = None, metering_timer: Optional[int] = None, update_messaging_timer: Optional[int] = None, ): self.apt_http_proxy = apt_http_proxy self.apt_https_proxy = apt_https_proxy self.global_apt_http_proxy = global_apt_http_proxy self.global_apt_https_proxy = global_apt_https_proxy self.ua_apt_http_proxy = ua_apt_http_proxy self.ua_apt_https_proxy = ua_apt_https_proxy self.http_proxy = http_proxy self.https_proxy = https_proxy self.apt_news = apt_news self.apt_news_url = apt_news_url self.poll_for_pro_license = poll_for_pro_license self.polling_error_retry_delay = polling_error_retry_delay self.metering_timer = metering_timer self.update_messaging_timer = update_messaging_timer event = event_logger.get_event_logger() LOG = logging.getLogger(util.replace_top_level_logger_name(__name__)) class UserConfigFileObject: def __init__(self, directory: str = defaults.DEFAULT_DATA_DIR): file_name = defaults.USER_CONFIG_FILE self._private = DataObjectFile( UserConfigData, UAFile( file_name, os.path.join(directory, defaults.PRIVATE_SUBDIR), private=True, ), DataObjectFileFormat.JSON, optional_type_errors_become_null=True, ) self._public = DataObjectFile( UserConfigData, UAFile(file_name, directory, private=False), DataObjectFileFormat.JSON, optional_type_errors_become_null=True, ) @property def public_config(self) -> UserConfigData: public_config = self._public.read() if public_config is None: public_config = UserConfigData() return public_config def redact_config_data( self, user_config: UserConfigData ) -> UserConfigData: redacted_data = copy.deepcopy(user_config) for field in PROXY_FIELDS: value = getattr(redacted_data, field) if value: parsed_url = urlparse(value) if parsed_url.username or parsed_url.password: setattr( redacted_data, field, "<REDACTED>", ) return redacted_data def read(self) -> UserConfigData: if util.we_are_currently_root(): private_config = self._private.read() if private_config is not None: return private_config public_config = self._public.read() if public_config is not None: return public_config return UserConfigData() def write(self, content: UserConfigData): self._private.write(content) redacted_content = self.redact_config_data(content) self._public.write(redacted_content) user_config = UserConfigFileObject(defaults.DEFAULT_DATA_DIR)Private