[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: vendors.py
File is not writable. Editing disabled.
from __future__ import absolute_import from __future__ import division from __future__ import print_function import os from typing import Tuple, List, Optional, Any, Dict # NOQA from vendors_api import CONFIG_PATH from vendors_api.exceptions import NotFound, NotImplementedByVendor from clcommon.cpapi.GeneralPanel import GeneralPanelPluginV1 from clcommon.cpapi.cpapiexceptions import NoDBAccessData, NotSupported, NoDomain from vendors_api.parser import PublicApi from clcommon.const import ALL_CL_FEATURES, Feature class PanelPlugin(GeneralPanelPluginV1): def __init__(self): super(PanelPlugin, self).__init__() self._api = PublicApi() def getCPName(self): if not os.path.exists(CONFIG_PATH): return None return self._api.panel_info().name def get_cp_description(self): if not os.path.exists(CONFIG_PATH): return None info = self._api.panel_info() return {'name': info.name, 'version': info.version, 'additional_info': None} def admin_packages(self, raise_exc=False): main_admin = self._api.admins(is_main=True)[0] return [pack.name for pack in self._api.packages(owner=main_admin.name)] def resellers_packages(self, raise_exc=False): result = {} main_admin = self._api.admins(is_main=True)[0] for pack in self._api.packages(): if pack.owner == main_admin.name: continue if pack.owner not in result: result[pack.owner] = [] result[pack.owner].append(pack.name) return result def get_uids_list_by_package(self, package_name, reseller_name=None): main_admin = self._api.admins(is_main=True)[0] try: users = self._api.users( package_name=package_name, package_owner=reseller_name or main_admin.name, fields=['id'] ) except NotFound: return [] return [str(u.id) for u in users] def admins(self): admins = self._api.admins() return [admin.unix_user for admin in admins if admin.unix_user] def resellers(self): resellers = self._api.resellers() return tuple(r.name for r in resellers) def is_reseller(self, username): return username in self.resellers() def db_access(self): try: db = self._api.db_info().mysql except NotImplementedByVendor as e: raise NoDBAccessData('db_info is not implemented by vendor: `%s`' % e) if db is None: raise NoDBAccessData('db_access is not supported by this control panel') access = dict() access['login'] = db.access.login access['pass'] = db.access.password access['host'] = db.access.host access['port'] = db.access.port return access def dblogin_cplogin_pairs(self, cplogin_lst=None, with_system_users=False): try: db = self._api.db_info().mysql except NotImplementedByVendor as e: raise NotSupported('db_info is not implemented by vendor: `%s`' % e) if db is None: raise NotSupported('dblogin_cplogin_pairs is not supported by this control panel') result = [] for sys_user, db_users in db.mapping.items(): if cplogin_lst and sys_user not in cplogin_lst: continue for db_user in db_users: result.append([db_user, sys_user]) return tuple(result) def _convert_by_mapping(self, objects, mapping, keyls): def _get_key_nested(token, obj): keys = token.split('.') for key in keys: obj = getattr(obj, key, None) return obj result = [] for user in objects: as_array = [] for key in keyls: if key not in mapping: value = None else: value = _get_key_nested(mapping[key], user) as_array.append(value) result.append(as_array) return result def _sys_users_info(self, sys_login, keyls): # type: (Optional[str], Tuple[str]) -> List[Tuple] mapping = { 'cplogin': 'username', 'mail': 'email', 'reseller': 'owner', 'dns': 'domain', 'locale': 'locale_code', 'package': 'package.name' } try: users = self._api.users(filter_names=sys_login) except NotFound: return [] return self._convert_by_mapping(users, mapping, keyls) def _resellers_info(self, sys_login, keyls): # type: (Optional[str], Tuple[str]) -> List[Tuple] mapping = { 'cplogin': 'name', 'mail': 'email', 'locale': 'locale_code', } try: resellers = self._api.resellers(filter_names=sys_login) except NotFound: resellers = [] try: admins = self._api.admins(filter_names=sys_login) except NotFound: admins = [] return self._convert_by_mapping(resellers + admins, mapping, keyls) def cpinfo(self, cpuser=None, keyls=('cplogin', 'package', 'mail', 'reseller', 'dns'), search_sys_users=True): if search_sys_users: return self._sys_users_info(cpuser, keyls) else: return self._resellers_info(cpuser, keyls) def list_users(self, raise_exc=False): users = self._api.users(fields=['id', 'package', 'owner']) result = {} for user in users: result[user.id] = { 'package': getattr(user.package, 'name', None), 'reseller': user.owner } return result def get_reseller_users(self, reseller): try: users = self._api.users(owner=reseller, fields=['id', 'package', 'owner']) except NotFound: return {} return { user.id: {'package': getattr(user.package, 'name', None), 'reseller': user.owner} for user in users } def list_all(self, raise_exc=False): users = self._api.users(fields=['id', 'package']) return { user.id: getattr(user.package, 'name', None) for user in users } def reseller_package_by_uid(self, user_id): try: user = self._api.users(unix_id=user_id, fields=['owner', 'package'])[0] except(NotFound, IndexError): return '', '' return user.owner, getattr(user.package, 'name', None) def get_admin_emails_list(self): # see get_admin_email in __init__ # we do not care how much admins exist # in control panel now # so just return one main_admin = self._api.admins(is_main=True)[0] return [main_admin.email] def docroot(self, domain): try: domain = self._api.domains(name=domain)[domain] except (NotFound, KeyError): raise NoDomain("Can't obtain document root for domain '%s'" % domain) return domain.document_root, domain.owner @staticmethod def useraliases(cpuser, domain): """ Return aliases from user domain :param str|unicode cpuser: user login :param str|unicode domain: :return list of aliases """ return [] def userdomains(self, cpuser): try: domains = self._api.domains(owner=cpuser) except NotFound: return [] result = [] # main domain must be first sorted_domains = sorted(list(domains.items()), key=lambda __d: not __d[1].is_main) for domain, info in sorted_domains: result.append((domain, info.document_root)) return result def reseller_users(self, resellername=None): try: return [ user.username for user in self._api.users( owner=resellername, fields=['username']) ] except NotFound: return [] def reseller_domains(self, resellername=None): try: users = self.reseller_users(resellername) return dict(self.cpinfo(users, keyls=('cplogin', 'dns'))) except NotFound: return {} def get_user_login_url(self, domain): url_template = self._api.panel_info().user_login_url if url_template is None: return url_template return url_template.format(domain=domain) def get_reseller_id_pairs(self): return {r.name: r.id for r in self._api.resellers()} def get_admin_locale(self): main_admin = self._api.admins(is_main=True)[0] return main_admin.locale_code def get_supported_cl_features(self) -> Dict[str, bool]: features = self._api.panel_info().supported_cl_features if features is None: return ALL_CL_FEATURES # LVE is critical for many other modules, so there is live-check try: features.update({Feature.LVE: self.is_feature_lve_supported()}) except Exception: pass return features
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server05.hostinghome.co.in
Server IP: 192.168.74.40
PHP Version: 7.4.33
Server Software: Apache
System: Linux server05.hostinghome.co.in 3.10.0-962.3.2.lve1.5.81.el7.x86_64 #1 SMP Wed May 31 10:36:47 UTC 2023 x86_64
HDD Total: 1.95 TB
HDD Free: 690.92 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Disabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes
gcc:
Yes
pkexec:
No
git:
Yes
User Info
Username: itsweb
User ID (UID): 1619
Group ID (GID): 1621
Script Owner UID: 1619
Current Dir Owner: N/A