HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/manageServices/serviceManager.py
import os.path
import sys
import django
sys.path.append('/usr/local/CyberCP')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
django.setup()
from random import randint
from plogical.processUtilities import ProcessUtilities
from dns.models import Supermasters
from manageServices.models import SlaveServers
import argparse
from serverStatus.serverStatusUtil import ServerStatusUtil
from plogical import CyberCPLogFileWriter as logging
import subprocess

class ServiceManager:

    slaveConfPath = '/home/cyberpanel/slaveConf'

    def __init__(self, extraArgs):
        self.extraArgs = extraArgs

    def managePDNS(self):
        type = self.extraArgs['type']

        if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
            path = '/etc/pdns/pdns.conf'
        else:
            path = '/etc/powerdns/pdns.conf'

        data = ProcessUtilities.outputExecutioner('sudo cat ' + path).splitlines()
        #data = subprocess.check_output(shlex.split('sudo cat ' + path)).decode("utf-8").splitlines()


        if type == 'MASTER':
            counter = 0

            ipsString = ''
            ipStringNoSubnet = ''

            for items in SlaveServers.objects.all():
                if items.slaveServerIP:
                    ipsString = ipsString + '%s/32, ' % (items.slaveServerIP)
                    ipStringNoSubnet = ipStringNoSubnet + '%s, ' % (items.slaveServerIP)

            ipsString = ipsString.rstrip(', ')
            ipStringNoSubnet = ipStringNoSubnet.rstrip(', ')

            tempPath = "/home/cyberpanel/" + str(randint(1000, 9999))
            writeToFile = open(tempPath, 'w')

            for items in data:
                if items.find('allow-axfr-ips') > -1:
                    continue

                if items.find('also-notify') > -1:
                    continue

                if items.find('daemon=') > -1:
                    continue

                if items.find('disable-axfr') > -1:
                    continue

                if items.find('slave') > -1:
                    continue

                if items.find('master') > -1:
                    continue

                counter = counter + 1

                writeToFile.writelines(items + '\n')


            writeToFile.writelines('allow-axfr-ips=' + ipsString + '\n')
            writeToFile.writelines('also-notify=' + ipStringNoSubnet + '\n')
            writeToFile.writelines('daemon=no\n')
            writeToFile.writelines('disable-axfr=no\n')
            writeToFile.writelines('primary=yes\n')
            writeToFile.close()

            command = 'sudo mv ' + tempPath + ' ' + path
            ProcessUtilities.executioner(command)
        else:
            import os

            if not os.path.exists(ServiceManager.slaveConfPath):

                writeToFile = open(ServiceManager.slaveConfPath, 'w')
                writeToFile.write('configured')
                writeToFile.close()

                counter = 0

                tempPath = "/home/cyberpanel/" + str(randint(1000, 9999))
                writeToFile = open(tempPath, 'w')

                for items in data:
                    if items.find('allow-axfr-ips') > -1:
                        continue

                    if items.find('also-notify') > -1:
                        continue

                    if items.find('daemon=') > -1:
                        continue

                    if items.find('disable-axfr') > -1:
                        continue

                    if items.find('slave') > -1:
                        continue

                    counter = counter + 1

                    writeToFile.writelines(items  + '\n')

                slaveData = """
secondary=yes
daemon=yes
disable-axfr=yes
guardian=yes
local-address=0.0.0.0
local-port=53
prmary=no
xfr-cycle-interval=60
setgid=pdns
setuid=pdns
autosecondary=yes
"""

                writeToFile.writelines(slaveData)
                writeToFile.close()

                command = 'sudo mv ' + tempPath + ' ' + path
                ProcessUtilities.executioner(command)

            for items in Supermasters.objects.all():
                items.delete()

            Supermasters(ip=self.extraArgs['masterServerIP'], nameserver=self.extraArgs['slaveServerNS'], account='').save()

    @staticmethod
    def InstallElasticSearch():

        statusFile = open(ServerStatusUtil.lswsInstallStatusPath, 'w')

        if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
            command = 'rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch'
            ServerStatusUtil.executioner(command, statusFile)

            repoPath = '/etc/yum.repos.d/elasticsearch.repo'

            content = '''
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
'''

            writeToFile = open(repoPath, 'w')
            writeToFile.write(content)
            writeToFile.close()

            command = 'yum install --enablerepo=elasticsearch elasticsearch -y'
            ServerStatusUtil.executioner(command, statusFile)
        else:
            command = 'wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -'
            subprocess.call(command, shell=True)

            command = 'apt-get install apt-transport-https -y'
            ServerStatusUtil.executioner(command, statusFile)

            command = 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list'
            subprocess.call(command, shell=True)

            command = 'apt-get update -y'
            ServerStatusUtil.executioner(command, statusFile)

            command = 'apt-get install elasticsearch -y'
            ServerStatusUtil.executioner(command, statusFile)

        ### Tmp folder configurations

        command = 'mkdir -p /home/elasticsearch/tmp'
        ServerStatusUtil.executioner(command, statusFile)

        command = 'chown elasticsearch:elasticsearch /home/elasticsearch/tmp'
        ServerStatusUtil.executioner(command, statusFile)

        jvmOptions = '/etc/elasticsearch/jvm.options'

        writeToFile = open(jvmOptions, 'a')
        writeToFile.write('-Djava.io.tmpdir=/home/elasticsearch/tmp\n')
        writeToFile.close()

        command = 'systemctl enable elasticsearch'
        ServerStatusUtil.executioner(command, statusFile)

        command = 'systemctl start elasticsearch'
        ServerStatusUtil.executioner(command, statusFile)

        command = 'touch /home/cyberpanel/elasticsearch'
        ServerStatusUtil.executioner(command, statusFile)



        logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath,
                                                      "Packages successfully installed.[200]\n", 1)
        return 0

    @staticmethod
    def RemoveElasticSearch():

        statusFile = open(ServerStatusUtil.lswsInstallStatusPath, 'w')

        if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
            command = 'rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch'
            ServerStatusUtil.executioner(command, statusFile)

            repoPath = '/etc/yum.repos.d/elasticsearch.repo'

            try:
                os.remove(repoPath)
            except:
                pass

            command = 'yum erase elasticsearch -y'
            ServerStatusUtil.executioner(command, statusFile)
        else:

            try:
                os.remove('/etc/apt/sources.list.d/elastic-7.x.list')
            except:
                pass


            command = 'apt-get remove elasticsearch -y'
            ServerStatusUtil.executioner(command, statusFile)

        ### Tmp folder configurations

        command = 'rm -rf /home/elasticsearch/tmp'
        ServerStatusUtil.executioner(command, statusFile)


        command = 'rm -f /home/cyberpanel/elasticsearch'
        ServerStatusUtil.executioner(command, statusFile)

        logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath,
                                                  "ElasticSearch successfully removed.[200]\n", 1)
        return 0

    @staticmethod
    def InstallRedis():

        statusFile = open(ServerStatusUtil.lswsInstallStatusPath, 'w')

        if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
            command = 'yum install redis -y'
            ServerStatusUtil.executioner(command, statusFile)
        else:

            command = 'DEBIAN_FRONTEND=noninteractive apt-get install redis-server -y'
            ServerStatusUtil.executioner(command, statusFile)


        command = 'systemctl enable redis'
        ServerStatusUtil.executioner(command, statusFile)

        command = 'systemctl start redis'
        ServerStatusUtil.executioner(command, statusFile)

        command = 'touch /home/cyberpanel/redis'
        ServerStatusUtil.executioner(command, statusFile)

        logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath,
                                                  "Redis successfully installed.[200]\n", 1)
        return 0

    @staticmethod
    def RemoveRedis():

        statusFile = open(ServerStatusUtil.lswsInstallStatusPath, 'w')

        if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
            command = 'yum erase redis -y'
            ServerStatusUtil.executioner(command, statusFile)
        else:

            command = 'apt-get remove redis-server -y'
            ServerStatusUtil.executioner(command, statusFile)


        command = 'rm -f /home/cyberpanel/redis'
        ServerStatusUtil.executioner(command, statusFile)

        logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath,
                                                  "Redis successfully removed.[200]\n", 1)
        return 0

def main():

    parser = argparse.ArgumentParser(description='CyberPanel Application Manager')
    parser.add_argument('--function', help='Function')


    args = vars(parser.parse_args())

    if args["function"] == "InstallElasticSearch":
        ServiceManager.InstallElasticSearch()
    elif args["function"] == "RemoveElasticSearch":
        ServiceManager.RemoveElasticSearch()
    elif args["function"] == "InstallRedis":
        ServiceManager.InstallRedis()
    elif args["function"] == "RemoveRedis":
        ServiceManager.RemoveRedis()



if __name__ == "__main__":
    main()