HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux mail.btech-izolacje.pl 5.15.0-140-generic #150-Ubuntu SMP Sat Apr 12 06:00:09 UTC 2025 x86_64
User: pewna6876 (1017)
PHP: 8.2.28
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/CLManager/CLManagerMain.py
import threading as multi
from plogical.acl import ACLManager
import plogical.CyberCPLogFileWriter as logging
from plogical.processUtilities import ProcessUtilities
from django.shortcuts import render
import os
from serverStatus.serverStatusUtil import ServerStatusUtil
import json
from django.shortcuts import HttpResponse
from math import ceil
from websiteFunctions.models import Websites
from CLManager.models import CLPackages
from plogical.httpProc import httpProc

class CLManagerMain(multi.Thread):

    def __init__(self, request=None, templateName=None, function=None, data=None):
        multi.Thread.__init__(self)
        self.request = request
        self.templateName = templateName
        self.function = function
        self.data = data

    def run(self):
        try:
            if self.function == 'submitCageFSInstall':
                self.submitCageFSInstall()
            elif self.function == 'enableOrDisable':
                self.enableOrDisable()
        except BaseException as msg:
            logging.CyberCPLogFileWriter.writeToFile(str(msg) + ' [ContainerManager.run]')

    def renderC(self):

        data = {}
        data['CL'] = 0
        data['activatedPath'] = 0
        CLPath = '/etc/sysconfig/cloudlinux'
        activatedPath = '/home/cyberpanel/cloudlinux'

        if os.path.exists(CLPath):
            data['CL'] = 1

        if os.path.exists(activatedPath):
            data['activatedPath'] = 1

        if data['CL']  == 0:
            proc = httpProc(self.request, 'CLManager/notAvailable.html', data, 'admin')
            return proc.render()
        elif data['activatedPath']  == 0:
            proc = httpProc(self.request, 'CLManager/notAvailable.html', data, 'admin')
            return proc.render()
        else:
            proc = httpProc(self.request, 'CLManager/cloudLinux.html', data, 'admin')
            return proc.render()

    def submitCageFSInstall(self):
        try:
            userID = self.request.session['userID']
            currentACL = ACLManager.loadedACL(userID)

            if currentACL['admin'] == 1:
                pass
            else:
                logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath,
                                                          'Not authorized to install container packages. [404].',
                                                          1)
                return 0

            execPath = "/usr/local/CyberCP/bin/python /usr/local/CyberCP/CLManager/CageFS.py"
            execPath = execPath + " --function submitCageFSInstall"
            ProcessUtilities.outputExecutioner(execPath)

        except BaseException as msg:
            logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath, str(msg) + ' [404].', 1)

    def findWebsitesJson(self, currentACL, userID, pageNumber):
        finalPageNumber = ((pageNumber * 10)) - 10
        endPageNumber = finalPageNumber + 10
        websites = ACLManager.findWebsiteObjects(currentACL, userID)[finalPageNumber:endPageNumber]

        json_data = "["
        checker = 0

        command = '/usr/sbin/cagefsctl --list-enabled'
        Enabled = ProcessUtilities.outputExecutioner(command)

        for items in websites:
            if Enabled.find(items.externalApp) > -1:
                status = 1
            else:
                status = 0
            dic = {'domain': items.domain, 'externalApp': items.externalApp, 'status': status}

            if checker == 0:
                json_data = json_data + json.dumps(dic)
                checker = 1
            else:
                json_data = json_data + ',' + json.dumps(dic)

        json_data = json_data + ']'

        return json_data

    def websitePagination(self, currentACL, userID):
        websites = ACLManager.findAllSites(currentACL, userID)

        pages = float(len(websites)) / float(10)
        pagination = []

        if pages <= 1.0:
            pages = 1
            pagination.append('<li><a href="\#"></a></li>')
        else:
            pages = ceil(pages)
            finalPages = int(pages) + 1

            for i in range(1, finalPages):
                pagination.append('<li><a href="\#">' + str(i) + '</a></li>')

        return pagination

    def getFurtherAccounts(self, userID=None, data=None):
        try:
            currentACL = ACLManager.loadedACL(userID)
            pageNumber = int(data['page'])
            json_data = self.findWebsitesJson(currentACL, userID, pageNumber)
            pagination = self.websitePagination(currentACL, userID)

            cageFSPath = '/home/cyberpanel/cagefs'

            if os.path.exists(cageFSPath):
                default = 'On'
            else:
                default = 'Off'

            final_dic = {'status': 1, 'listWebSiteStatus': 1, 'error_message': "None", "data": json_data,
                         'pagination': pagination, 'default': default}
            final_json = json.dumps(final_dic)
            return HttpResponse(final_json)
        except BaseException as msg:
            dic = {'status': 1, 'listWebSiteStatus': 0, 'error_message': str(msg)}
            json_data = json.dumps(dic)
            return HttpResponse(json_data)

    def enableOrDisable(self):
        try:
            websites = Websites.objects.all()
            if self.data['mode'] == 1:
                for items in websites:
                    command = '/usr/sbin/cagefsctl --enable %s' % (items.externalApp)
                    ProcessUtilities.executioner(command)
            else:
                for items in websites:
                    command = '/usr/sbin/cagefsctl --disable %s' % (items.externalApp)
                    ProcessUtilities.executioner(command)
        except BaseException as msg:
            logging.CyberCPLogFileWriter.writeToFile(str(msg))

    def fetchPackages(self, currentACL):

        if currentACL['admin'] == 1:
            pass
        else:
            return ACLManager.loadErrorJson()

        json_data = "["
        checker = 0

        for items in CLPackages.objects.all():
            dic = {'name': items.name, 'SPEED': items.speed, 'VMEM': items.vmem, 'PMEM': items.pmem, 'IO': items.io, 'IOPS': items.iops, 'EP': items.ep,
                   'NPROC': items.nproc, 'inodessoft': items.inodessoft, 'inodeshard': items.inodeshard}

            if checker == 0:
                json_data = json_data + json.dumps(dic)
                checker = 1
            else:
                json_data = json_data + ',' + json.dumps(dic)

        json_data = json_data + ']'

        final_dic = {'status': 1, 'error_message': "None", "data": json_data}
        final_json = json.dumps(final_dic)
        return HttpResponse(final_json)