|
Server : Apache System : Linux cvar2.toservers.com 3.10.0-962.3.2.lve1.5.73.el7.x86_64 #1 SMP Wed Aug 24 21:31:23 UTC 2022 x86_64 User : njnconst ( 1116) PHP Version : 8.4.18 Disable Function : NONE Directory : /proc/self/root/opt/alt/python37/lib/python3.7/site-packages/clwpos/hooks/ |
Upload File : |
# 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
from __future__ import absolute_import, print_function
import os
import subprocess
import sys
import shutil
from clcommon.clpwd import drop_privileges
from clcommon.lib.cledition import is_cl_solo_edition
from clcommon.public_hooks.lib import ModifyUserHook
from clwpos.cl_wpos_exceptions import WposError
from clwpos.optimization_modules import OBJECT_CACHE_MODULE, get_admin_config_directory
from clwpos.user.config import UserConfig
from clwpos.utils import WposUser, update_redis_conf, update_wp_config, user_uid
from clwpos.constants import MODULES_MARKERS
from cpanel import reload_redis
class WposModifyUserHook(ModifyUserHook):
"""
Update user's data in Redis and WP configs.
"""
def post_modify_user(self, username: str, new_name: str = None, **kwargs):
"""
Update the name of the user's home directory in:
- ~/.clwpos/redis.conf,
- wp-config.php for Wordpresses with enabled WPOS object cache module.
"""
if new_name is None:
return
new_user = WposUser(new_name)
if not new_user.home_dir.endswith(new_name):
raise WposError('Internal Error. Contact CloudLinux support')
old_user_homedir = os.path.join(new_user.home_dir[:-len(new_name)], username)
old_user = WposUser(username, homedir=old_user_homedir)
with drop_privileges(new_name):
# Update ~/.clwpos/redis.conf
if not os.path.exists(new_user.redis_conf):
# we don't continue if redis.conf is missing
# because it means that user has never enabled the module
return
update_redis_conf(new_user, old_user)
# Update wp-config.php files
# use user's WPOS config to get paths to Wordpresses with WPOS object cache enabled
user_config = UserConfig(new_name)
for abs_wp_path in user_config.wp_paths_with_enabled_module(OBJECT_CACHE_MODULE):
update_wp_config(abs_wp_path, new_user, old_user)
try:
reload_redis()
except Exception as e:
print(f'Error occurred during daemon reload: {e}', file=sys.stderr)
def post_create_user(self, username, owner, **kwargs):
subprocess.run(["/opt/alt/python37/bin/python3", "/usr/sbin/clwpos_collect_information.py", username])
if os.path.isfile(MODULES_MARKERS['object_cache']) and \
os.path.isfile(MODULES_MARKERS['site_optimization']):
print('Allowing both site optimization and object cache for user', username)
subprocess.run(['/usr/bin/cloudlinux-awp-admin', 'set-module', '--modules',
'object_cache,site_optimization',
'--user', username, '--allowed'])
elif os.path.isfile(MODULES_MARKERS['object_cache']):
print('Allowing only object cache for user', username)
subprocess.run(['/usr/bin/cloudlinux-awp-admin', 'set-module', '--modules', 'object_cache',
'--user', username, '--allowed'])
elif os.path.isfile(MODULES_MARKERS['site_optimization']):
print('Allowing only site optimization for user', username)
subprocess.run(['/usr/bin/cloudlinux-awp-admin', 'set-module', '--modules', 'site_optimization',
'--user', username, '--allowed'])
def pre_delete_user(self, username, **kwargs):
"""
Triggered before deleting user.
Cleans up garbage left in /var/clwpos/uids/{user_uid}
Not run on Solo edition
:param username: account name
"""
if is_cl_solo_edition():
print(f'CL Solo edition detected, skipping hook actions')
return
cfg_dir = get_admin_config_directory(user_uid(username=username))
print(f'Checking {cfg_dir}')
if os.path.isdir(cfg_dir):
print(f'{cfg_dir} exists, must be cleaned')
shutil.rmtree(cfg_dir)
else:
print(f'{cfg_dir} does not exist, nothing to be done')