Mini Shell
# coding:utf-8
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2019 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import json
import subprocess
import sys
from libcloudlinux import CloudlinuxCliBase, LVEMANAGER_PLUGIN_NAMES, DEFAULT_PLUGIN_NAME, PASSENGER_DEPEND_PLUGINS
from clselector.clpassenger_detectlib import is_clpassenger_active
from clcommon import ClPwd
class CloudlinuxCliUser(CloudlinuxCliBase):
def __init__(self):
super(CloudlinuxCliUser, self).__init__()
self.command_methods.update({
'spa-get-domains': self.spa_user_domains,
'spa-get-homedir': self.spa_user_homedir,
'cloudlinux-snapshots': self.cl_snapshots
})
def drop_permission(self):
"""
Drop permission to users, if owner of script is user
:return:
"""
data = self.request_data
if data['owner'] != 'user':
self.exit_with_error("User not allowed")
super(CloudlinuxCliUser, self).drop_permission()
self.check_plugin_availability()
def spa_user_domains(self):
try:
from clcommon.cpapi import userdomains
except:
self.exit_with_error('Module unavailable')
domain_list = [x[0] for x in userdomains(self.user_info['username'])]
print(json.dumps(
{"result": "success", "list": domain_list}))
sys.exit(0)
def spa_user_homedir(self):
try:
pwdir = ClPwd().get_homedir(self.user_info['username'])
print(json.dumps({"result": "success", "homedir": pwdir + "/"}))
except KeyError:
self.exit_with_error('No such user')
sys.exit(0)
def cl_snapshots(self):
list_to_request = self.prepair_params_for_command()
try:
output = self.run_util('/usr/sbin/lve-read-snapshot', *list_to_request)
except subprocess.CalledProcessError as processError:
output = processError.output
try:
result = json.loads(output)
except:
self.exit_with_error(output)
return
self.exit_with_success({'data': result['data']})
sys.exit(0)
def check_plugin_availability(self):
plugin_names = {
'nodejs_selector': 'Node.js Selector',
'python_selector': 'Python Selector',
}
selector_enabled = True
manager = None
try:
if self.current_plugin_name == 'nodejs_selector':
from clselect.clselectnodejs.node_manager import NodeManager
manager = NodeManager()
if self.current_plugin_name == 'python_selector':
from clselect.clselectpython.python_manager import PythonManager
manager = PythonManager()
if manager:
selector_enabled = manager.selector_enabled
except:
selector_enabled = False
if not selector_enabled:
self.exit_with_error(
code=503,
error_id='ERROR.not_available_plugin',
context={'pluginName': plugin_names.get(self.current_plugin_name, 'Plugin')},
icon='disabled')
plugin_available_checker = {
'nodejs_selector': self._plugin_available_nodejs,
'python_selector': self._plugin_available_python,
'php_selector': self._plugin_available_php,
'resource_usage': self._plugin_available_resource_usage,
}.get(self.current_plugin_name)
if plugin_available_checker:
plugin_available = plugin_available_checker()
else:
plugin_available = True
if not is_clpassenger_active() and self.current_plugin_name in PASSENGER_DEPEND_PLUGINS:
self.exit_with_error(
code=503,
error_id='ERROR.not_available_passenger',
context={'pluginName': LVEMANAGER_PLUGIN_NAMES.get(self.current_plugin_name, DEFAULT_PLUGIN_NAME)},
icon='disabled')
if not plugin_available:
self.exit_with_error(
code=503,
error_id='ERROR.not_available_plugin',
context={'pluginName': LVEMANAGER_PLUGIN_NAMES.get(self.current_plugin_name, DEFAULT_PLUGIN_NAME)},
icon='disabled')
def _plugin_available_nodejs(self):
try:
from clselect.clselectnodejs.node_manager import NodeManager
manager = NodeManager()
if not manager.selector_enabled or not is_clpassenger_active():
return False
except:
return False
return True
def _plugin_available_python(self):
try:
from clselect.clselectpython.python_manager import PythonManager
manager = PythonManager()
if not manager.selector_enabled or not is_clpassenger_active():
return False
except:
return False
return True
def _plugin_available_php(self):
try:
from clselect.clselectphp.php_manager import PhpManager
manager = PhpManager()
if not manager.selector_enabled:
return False
except:
return False
return True
def _plugin_available_resource_usage(self):
return True
Zerion Mini Shell 1.0