HEX
Server: Apache
System: Linux panel.gemzo.net 4.18.0-477.10.1.lve.el8.x86_64 #1 SMP Wed May 17 07:12:55 EDT 2023 x86_64
User: birehlibraryps (1007)
PHP: 8.1.28
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //sbin/cloudlinux-xray
#!/opt/alt/python37/bin/python3 -sbb
# coding:utf-8

# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2020 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import getopt
import sys
import os
import subprocess
import time
import json
from enum import Enum
from clcommon.utils import is_nginx_running

class State(Enum):
    INSTALLED = 'installed'
    INSTALLING = 'installing'
    NOT_INSTALLED = 'not_installed'


PACKAGE_NAME = 'lvemanager-xray'
PACKAGE_PATH = '/usr/sbin/cloudlinux-xray-manager'
PACKAGE_INSTALL_ERROR_LOG = '/var/log/xray_install_error.log'


def install_package():
    command = 'yum install -y {}'.format(PACKAGE_NAME)
    logger = open(PACKAGE_INSTALL_ERROR_LOG, 'w')
    subprocess.Popen(command,
                     stdin=open(os.devnull, 'w'),
                     stdout=logger,
                     stderr=logger,
                     shell=True,
                     executable='/bin/bash')
    return State.INSTALLING


def check_package_installed():
    if check_status() == State.INSTALLING:
        return State.INSTALLING
    else:
        return State.INSTALLED if os.path.isfile(PACKAGE_PATH) else State.NOT_INSTALLED


def check_status():
    command = ['/bin/bash',
               '-c', '/bin/ps aux | grep "[y]um install -y {}"'.format(PACKAGE_NAME)]
    try:
        subprocess.check_output(command, stderr=subprocess.STDOUT, text=True)
        return State.INSTALLING
    except subprocess.CalledProcessError:
        pass


def get_log():
    with open(PACKAGE_INSTALL_ERROR_LOG, 'r') as file:
        return file.read()


def usage():
    print("usage: {} {{-h|-i|-c}}\n".format(sys.argv[0]),
          "where:\n"
          "\t-h, --help: show help message\n"
          "\t-i, --install: install {} package\n".format(PACKAGE_NAME),
          "\t-c, --check: check status of {} package\n".format(PACKAGE_NAME),
          "\t-l, --log: print the log file of {} package\n".format(PACKAGE_NAME))
    exit(2)


if __name__ == '__main__':
    opts = []
    result = None
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'icl', ['install', 'check', 'log'])
    except getopt.GetoptError as err:
        usage()
    if not len(opts):
        usage()
    try:
        for o, a in opts:
            if o in ('-h', '--help'):
                usage()
            elif o in ('-i', '--install'):
                result = install_package().value
            elif o in ('-c', '--check'):
                result = check_package_installed().value
            elif o in ('-l', '--log'):
                result = get_log()
        print(json.dumps({"result": "success",
                          "timestamp": time.time(),
                          "response": result,
                          "is_nginx_running": is_nginx_running()}))
    except Exception as error:
        print(json.dumps({"result": "error", "timestamp": time.time(), "response": str(error)}))
    sys.exit(0)