/
opt
/
cloudlinux
/
venv
/
lib64
/
python3.11
/
site-packages
/
xray
/
adviser
/
Upload Filee
HOME
# -*- 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 import pwd import logging from dataclasses import dataclass, field from datetime import datetime, timezone from typing import Optional from clcommon.clwpos_lib import is_wp_path from clcommon.cpapi import docroot @dataclass class ThirdPartyAdvice: """ Class for those advices which are generated not by Smart Advice, 3rd utilities returns different values """ username: str domain: str website: str id: int type: str status: str description: str detailed_description: str is_premium: str module_name: str license_status: str subscription_status: str upgrade_url: str total_stages: int completed_stages: int created_at: Optional[datetime] = field(default_factory=lambda: datetime.now(timezone.utc).isoformat()) updated_at: Optional[datetime] = field(default_factory=lambda: datetime.now(timezone.utc).isoformat()) def to_advice(self): return { 'created_at': self.created_at, 'updated_at': self.updated_at, 'metadata': { 'username': self.username, 'domain': self.domain, 'website': self.website }, 'advice': { 'id': self.id, 'type': self.type, 'status': self.status, 'description': self.description, 'detailed_description': self.detailed_description, 'is_premium': self.is_premium, 'module_name': self.module_name, 'license_status': self.license_status, 'subscription': { 'status': self.subscription_status, 'upgrade_url': self.upgrade_url }, 'total_stages': self.total_stages, 'completed_stages': self.completed_stages } } def does_user_exist_on_server(username): try: pwd.getpwnam(username) return True except KeyError: return False def filter_by_non_existence(advices_to_filter): filtered = [] for item in advices_to_filter: # skip advices which appear to be linked with non-existing users if not does_user_exist_on_server(item['metadata']['username']): logging.info('User %s does not exist anymore on this server,' 'skipping advices for him', item['metadata']['username']) continue full_website_path = docroot(item['metadata']['domain'])[0] + item['metadata']['website'] if not is_wp_path(full_website_path): logging.info('Wordpress site %s does not exist anymore on this server, skipping advice for it', full_website_path) continue filtered.append(item) return filtered