mirror of
				https://github.com/usmannasir/cyberpanel.git
				synced 2025-10-31 10:26:01 +01:00 
			
		
		
		
	
		
			
	
	
		
			397 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			397 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | import os.path | ||
|  | 
 | ||
|  | from plogical.processUtilities import ProcessUtilities | ||
|  | import json | ||
|  | import re | ||
|  | from django.shortcuts import HttpResponse | ||
|  | from random import randint | ||
|  | from .models import * | ||
|  | from xml.etree import ElementTree | ||
|  | 
 | ||
|  | class PHPManager: | ||
|  | 
 | ||
|  |     @staticmethod | ||
|  |     def findPHPVersions(): | ||
|  |         # distro = ProcessUtilities.decideDistro() | ||
|  |         # if distro == ProcessUtilities.centos: | ||
|  |         #     return ['PHP 5.3', 'PHP 5.4', 'PHP 5.5', 'PHP 5.6', 'PHP 7.0', 'PHP 7.1', 'PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] | ||
|  |         # elif distro == ProcessUtilities.cent8: | ||
|  |         #     return ['PHP 7.1','PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] | ||
|  |         # elif distro == ProcessUtilities.ubuntu20: | ||
|  |         #     return ['PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] | ||
|  |         # else: | ||
|  |         #     return ['PHP 7.0', 'PHP 7.1', 'PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] | ||
|  | 
 | ||
|  |         try: | ||
|  | 
 | ||
|  |             # Run the shell command and capture the output | ||
|  |             result = ProcessUtilities.outputExecutioner('ls -la /usr/local/lsws') | ||
|  | 
 | ||
|  |             # Get the lines containing 'lsphp' in the output | ||
|  |             lsphp_lines = [line for line in result.split('\n') if 'lsphp' in line] | ||
|  | 
 | ||
|  | 
 | ||
|  |             if os.path.exists(ProcessUtilities.debugPath): | ||
|  |                 from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging | ||
|  |                 logging.writeToFile(f'Found PHP lines in findPHPVersions: {lsphp_lines}') | ||
|  | 
 | ||
|  | 
 | ||
|  |             # Extract the version from the lines and format it as 'PHP x.y' | ||
|  |             php_versions = ['PHP ' + line.split()[8][5] + '.' + line.split()[8][6:] for line in lsphp_lines] | ||
|  | 
 | ||
|  |             finalPHPVersions = [] | ||
|  |             for php in php_versions: | ||
|  |                 phpString = PHPManager.getPHPString(php) | ||
|  | 
 | ||
|  |                 if os.path.exists("/usr/local/lsws/lsphp" + str(phpString) + "/bin/lsphp"): | ||
|  |                     finalPHPVersions.append(php) | ||
|  | 
 | ||
|  |             if os.path.exists(ProcessUtilities.debugPath): | ||
|  |                 from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging | ||
|  |                 logging.writeToFile(f'Found PHP versions in findPHPVersions: {finalPHPVersions}') | ||
|  | 
 | ||
|  |             # Now php_versions contains the formatted PHP versions | ||
|  |             return finalPHPVersions | ||
|  |         except BaseException as msg: | ||
|  |             from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging | ||
|  |             logging.writeToFile(f'Error while finding php versions on system: {str(msg)}') | ||
|  |             return ['PHP 7.0', 'PHP 7.1', 'PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] | ||
|  | 
 | ||
|  |     @staticmethod | ||
|  |     def findApachePHPVersions(): | ||
|  |         # distro = ProcessUtilities.decideDistro() | ||
|  |         # if distro == ProcessUtilities.centos: | ||
|  |         #     return ['PHP 5.3', 'PHP 5.4', 'PHP 5.5', 'PHP 5.6', 'PHP 7.0', 'PHP 7.1', 'PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] | ||
|  |         # elif distro == ProcessUtilities.cent8: | ||
|  |         #     return ['PHP 7.1','PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] | ||
|  |         # elif distro == ProcessUtilities.ubuntu20: | ||
|  |         #     return ['PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] | ||
|  |         # else: | ||
|  |         #     return ['PHP 7.0', 'PHP 7.1', 'PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] | ||
|  | 
 | ||
|  |         try: | ||
|  | 
 | ||
|  |             # Run the shell command and capture the output | ||
|  |             from ApachController.ApacheController import ApacheController as ApachController | ||
|  |             result = ProcessUtilities.outputExecutioner(f'ls -la {ApachController.phpBasepath}') | ||
|  | 
 | ||
|  |             if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8: | ||
|  | 
 | ||
|  |                 # Get the lines containing 'lsphp' in the output | ||
|  |                 lsphp_lines = [line for line in result.split('\n') if 'php' in line] | ||
|  | 
 | ||
|  |                 if os.path.exists(ProcessUtilities.debugPath): | ||
|  |                     from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging | ||
|  |                     logging.writeToFile(f'Found PHP lines in findApachePHPVersions: {lsphp_lines}') | ||
|  | 
 | ||
|  |                 # Extract the version from the lines and format it as 'PHP x.y' | ||
|  |                 # Extract and format PHP versions | ||
|  |                 php_versions = [] | ||
|  |                 for entry in lsphp_lines: | ||
|  |                     # Find substring starting with 'php' and extract the version part | ||
|  |                     version = entry.split('php')[1] | ||
|  |                     # Format version as PHP X.Y | ||
|  |                     formatted_version = f"PHP {version[0]}.{version[1]}" | ||
|  |                     php_versions.append(formatted_version) | ||
|  |             else: | ||
|  | 
 | ||
|  |                 lsphp_lines = [line for line in result.split('\n')] | ||
|  | 
 | ||
|  |                 if os.path.exists(ProcessUtilities.debugPath): | ||
|  |                     from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging | ||
|  |                     logging.writeToFile(f'Found PHP lines in findApachePHPVersions: {lsphp_lines}') | ||
|  | 
 | ||
|  |                 # Extract the version from the lines and format it as 'PHP x.y' | ||
|  |                 # Extract and format PHP versions | ||
|  |                 php_versions = [] | ||
|  |                 for entry in lsphp_lines: | ||
|  |                     # Find substring starting with 'php' and extract the version part | ||
|  |                     try: | ||
|  |                         version = entry.split('.') | ||
|  |                         # Format version as PHP X.Y | ||
|  |                         formatted_version = f"PHP {version[-2][-1]}.{version[-1]}" | ||
|  |                         if formatted_version != 'PHP  .': | ||
|  |                             php_versions.append(formatted_version) | ||
|  |                     except: | ||
|  |                         pass | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |             if os.path.exists(ProcessUtilities.debugPath): | ||
|  |                 from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging | ||
|  |                 logging.writeToFile(f'Found PHP versions in findApachePHPVersions: {php_versions}') | ||
|  | 
 | ||
|  |             # Now php_versions contains the formatted PHP versions | ||
|  |             return php_versions | ||
|  |         except BaseException as msg: | ||
|  |             from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging | ||
|  |             logging.writeToFile(f'Error while finding php versions on system: {str(msg)}') | ||
|  |             return ['PHP 7.0', 'PHP 7.1', 'PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] | ||
|  | 
 | ||
|  |     @staticmethod | ||
|  |     def getPHPString(phpVersion): | ||
|  |         # Ex: "PHP 5.3" type string, return Ex: "53" type string | ||
|  |         phpVersion = phpVersion.split() | ||
|  |         php = phpVersion[1].replace(".", "") | ||
|  | 
 | ||
|  |         return php | ||
|  | 
 | ||
|  |     @staticmethod | ||
|  |     def FindPHPFPMPath(phpVersion): | ||
|  |         if phpVersion == "PHP 5.3": | ||
|  |             return "/opt/remi/php54/root/etc/php.ini" | ||
|  |         elif phpVersion == "PHP 5.4": | ||
|  |             return "/opt/remi/php54/root/etc/php.ini" | ||
|  |         elif phpVersion == "PHP 5.5": | ||
|  |             return "/opt/remi/php55/root/etc/php.ini" | ||
|  |         elif phpVersion == "PHP 5.6": | ||
|  |             return "/etc/opt/remi/php56/php.ini" | ||
|  |         elif phpVersion == "PHP 7.0": | ||
|  |             return "/etc/opt/remi/php70/php.ini" | ||
|  |         elif phpVersion == "PHP 7.1": | ||
|  |             return "/etc/opt/remi/php71/php.ini" | ||
|  |         elif phpVersion == "PHP 7.2": | ||
|  |             return "/etc/opt/remi/php72/php.ini" | ||
|  |         elif phpVersion == "PHP 7.3": | ||
|  |             return "/etc/opt/remi/php73/php.ini" | ||
|  | 
 | ||
|  | 
 | ||
|  |     @staticmethod | ||
|  |     def getCurrentPHPConfig(phpVersion): | ||
|  |         allow_url_fopen = "0" | ||
|  |         display_errors = "0" | ||
|  |         file_uploads = "0" | ||
|  |         allow_url_include = "0" | ||
|  |         memory_limit = "" | ||
|  |         max_execution_time = "" | ||
|  |         upload_max_filesize = "" | ||
|  |         max_input_time = "" | ||
|  | 
 | ||
|  |         command = "cat " + PHPManager.FindPHPFPMPath(phpVersion) | ||
|  | 
 | ||
|  |         data = ProcessUtilities.outputExecutioner(command).split('\n') | ||
|  | 
 | ||
|  |         for items in data: | ||
|  |             if items.find("allow_url_fopen") > -1 and items.find("=") > -1: | ||
|  |                 if items.find("On") > -1: | ||
|  |                     allow_url_fopen = "1" | ||
|  |             if items.find("display_errors") > -1 and items.find("=") > -1: | ||
|  |                 if items.find("On") > -1: | ||
|  |                     display_errors = "1" | ||
|  |             if items.find("file_uploads") > -1 and items.find("=") > -1: | ||
|  |                 if items.find("On") > -1: | ||
|  |                     file_uploads = "1" | ||
|  |             if items.find("allow_url_include") > -1 and items.find("=") > -1: | ||
|  |                 if items.find("On") > -1: | ||
|  |                     allow_url_include = "1" | ||
|  |             if items.find("memory_limit") > -1 and items.find("=") > -1: | ||
|  |                 memory_limit = re.findall(r"[A-Za-z0-9_]+", items)[1] | ||
|  |             if items.find("max_execution_time") > -1 and items.find("=") > -1: | ||
|  |                 max_execution_time = re.findall(r"[A-Za-z0-9_]+", items)[1] | ||
|  |             if items.find("upload_max_filesize") > -1 and items.find("=") > -1: | ||
|  |                 upload_max_filesize = re.findall(r"[A-Za-z0-9_]+", items)[1] | ||
|  |             if items.find("max_input_time") > -1 and items.find("=") > -1: | ||
|  |                 max_input_time = re.findall(r"[A-Za-z0-9_]+", items)[1] | ||
|  |             if items.find("post_max_size") > -1 and items.find("=") > -1: | ||
|  |                 post_max_size = re.findall(r"[A-Za-z0-9_]+", items)[1] | ||
|  | 
 | ||
|  |         final_dic = {'fetchStatus': 1, | ||
|  |                      'allow_url_fopen': allow_url_fopen, | ||
|  |                      'display_errors': display_errors, | ||
|  |                      'file_uploads': file_uploads, | ||
|  |                      'allow_url_include': allow_url_include, | ||
|  |                      'memory_limit': memory_limit, | ||
|  |                      'max_execution_time': max_execution_time, | ||
|  |                      'upload_max_filesize': upload_max_filesize, | ||
|  |                      'max_input_time': max_input_time, | ||
|  |                      'post_max_size': post_max_size, | ||
|  |                      'status': 1} | ||
|  | 
 | ||
|  |         final_json = json.dumps(final_dic) | ||
|  | 
 | ||
|  |         return HttpResponse(final_json) | ||
|  | 
 | ||
|  |     @staticmethod | ||
|  |     def savePHPConfigBasic(data): | ||
|  |         phpVersion = data['phpVersion'] | ||
|  |         allow_url_fopen = data['allow_url_fopen'] | ||
|  |         display_errors = data['display_errors'] | ||
|  |         file_uploads = data['file_uploads'] | ||
|  |         allow_url_include = data['allow_url_include'] | ||
|  |         memory_limit = data['memory_limit'] | ||
|  |         max_execution_time = data['max_execution_time'] | ||
|  |         upload_max_filesize = data['upload_max_filesize'] | ||
|  |         max_input_time = data['max_input_time'] | ||
|  |         post_max_size = data['post_max_size'] | ||
|  | 
 | ||
|  |         if allow_url_fopen: | ||
|  |             allow_url_fopen = "allow_url_fopen = On" | ||
|  |         else: | ||
|  |             allow_url_fopen = "allow_url_fopen = Off" | ||
|  | 
 | ||
|  |         if display_errors: | ||
|  |             display_errors = "display_errors = On" | ||
|  |         else: | ||
|  |             display_errors = "display_errors = Off" | ||
|  | 
 | ||
|  |         if file_uploads: | ||
|  |             file_uploads = "file_uploads = On" | ||
|  |         else: | ||
|  |             file_uploads = "file_uploads = Off" | ||
|  | 
 | ||
|  |         if allow_url_include: | ||
|  |             allow_url_include = "allow_url_include = On" | ||
|  |         else: | ||
|  |             allow_url_include = "allow_url_include = Off" | ||
|  | 
 | ||
|  |         path = PHPManager.FindPHPFPMPath(phpVersion) | ||
|  |         command = "cat " + path | ||
|  |         data = ProcessUtilities.outputExecutioner(command).splitlines() | ||
|  | 
 | ||
|  |         tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999)) | ||
|  | 
 | ||
|  |         writeToFile = open(tempStatusPath, 'w') | ||
|  | 
 | ||
|  |         for items in data: | ||
|  |             if items.find("allow_url_fopen") > -1 and items.find("=") > -1: | ||
|  |                 writeToFile.writelines(allow_url_fopen + "\n") | ||
|  |             elif items.find("display_errors") > -1 and items.find("=") > -1: | ||
|  |                 writeToFile.writelines(display_errors + "\n") | ||
|  |             elif items.find("file_uploads") > -1 and items.find("=") > -1 and not items.find( | ||
|  |                     "max_file_uploads") > -1: | ||
|  |                 writeToFile.writelines(file_uploads + "\n") | ||
|  |             elif items.find("allow_url_include") > -1 and items.find("=") > -1: | ||
|  |                 writeToFile.writelines(allow_url_include + "\n") | ||
|  | 
 | ||
|  |             elif items.find("memory_limit") > -1 and items.find("=") > -1: | ||
|  |                 writeToFile.writelines("memory_limit = " + memory_limit + "\n") | ||
|  | 
 | ||
|  |             elif items.find("max_execution_time") > -1 and items.find("=") > -1: | ||
|  |                 writeToFile.writelines("max_execution_time = " + max_execution_time + "\n") | ||
|  | 
 | ||
|  |             elif items.find("upload_max_filesize") > -1 and items.find("=") > -1: | ||
|  |                 writeToFile.writelines("upload_max_filesize = " + upload_max_filesize + "\n") | ||
|  | 
 | ||
|  |             elif items.find("max_input_time") > -1 and items.find("=") > -1: | ||
|  |                 writeToFile.writelines("max_input_time = " + max_input_time + "\n") | ||
|  |             elif items.find("post_max_size") > -1 and items.find("=") > -1: | ||
|  |                 writeToFile.writelines("post_max_size = " + post_max_size + "\n") | ||
|  |             else: | ||
|  |                 writeToFile.writelines(items + '\n') | ||
|  | 
 | ||
|  |         writeToFile.close() | ||
|  | 
 | ||
|  |         command = "mv %s %s" % (tempStatusPath, path) | ||
|  |         ProcessUtilities.executioner(command) | ||
|  | 
 | ||
|  |         php = PHPManager.getPHPString(phpVersion) | ||
|  | 
 | ||
|  |         command = "systemctl stop php%s-php-fpm" % (php) | ||
|  |         ProcessUtilities.executioner(command) | ||
|  | 
 | ||
|  |         command = "systemctl start php%s-php-fpm" % (php) | ||
|  |         ProcessUtilities.executioner(command) | ||
|  | 
 | ||
|  |         final_dic = {'status': 1} | ||
|  |         final_json = json.dumps(final_dic) | ||
|  |         return HttpResponse(final_json) | ||
|  | 
 | ||
|  |     @staticmethod | ||
|  |     def fetchPHPSettingsAdvance(phpVersion): | ||
|  |         command = "cat " + PHPManager.FindPHPFPMPath(phpVersion) | ||
|  |         data = ProcessUtilities.outputExecutioner(command) | ||
|  |         final_dic = {'fetchStatus': 1, | ||
|  |                      'configData': data, | ||
|  |                      'status': 1} | ||
|  | 
 | ||
|  |         final_json = json.dumps(final_dic) | ||
|  | 
 | ||
|  |         return HttpResponse(final_json) | ||
|  | 
 | ||
|  |     @staticmethod | ||
|  |     def savePHPConfigAdvance(data): | ||
|  |         phpVersion = data['phpVersion'] | ||
|  |         configData = data['configData'] | ||
|  | 
 | ||
|  |         path = PHPManager.FindPHPFPMPath(phpVersion) | ||
|  | 
 | ||
|  |         tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999)) | ||
|  | 
 | ||
|  |         writeToFile = open(tempStatusPath, 'w') | ||
|  |         writeToFile.write(configData) | ||
|  |         writeToFile.close() | ||
|  | 
 | ||
|  |         command = "mv %s %s" % (tempStatusPath, path) | ||
|  |         ProcessUtilities.executioner(command) | ||
|  | 
 | ||
|  |         php = PHPManager.getPHPString(phpVersion) | ||
|  | 
 | ||
|  |         command = "systemctl stop php%s-php-fpm" % (php) | ||
|  |         ProcessUtilities.executioner(command) | ||
|  | 
 | ||
|  |         command = "systemctl start php%s-php-fpm" % (php) | ||
|  |         ProcessUtilities.executioner(command) | ||
|  | 
 | ||
|  |         final_dic = {'status': 1} | ||
|  |         final_json = json.dumps(final_dic) | ||
|  |         return HttpResponse(final_json) | ||
|  | 
 | ||
|  |     @staticmethod | ||
|  |     def fetchPHPExtensions(data): | ||
|  | 
 | ||
|  |         if ApachePHP.objects.all().count() == 0: | ||
|  |             phpfilePath = '/usr/local/CyberCP/ApachController/phpApache.xml' | ||
|  | 
 | ||
|  |             for items in ['54', '55', '56', '70', '71', '72', '73']: | ||
|  |                 phpvers = ApachePHP(phpVers='php' + items) | ||
|  |                 phpvers.save() | ||
|  | 
 | ||
|  |                 php = ElementTree.parse(phpfilePath) | ||
|  |                 phpExtensions = php.findall('extension') | ||
|  | 
 | ||
|  |                 for extension in phpExtensions: | ||
|  |                     extensionName = extension.find('extensionName').text % (items) | ||
|  |                     extensionDescription = extension.find('extensionDescription').text | ||
|  |                     status = int(extension.find('status').text) | ||
|  | 
 | ||
|  |                     phpExtension = installedPackagesApache(phpVers=phpvers, | ||
|  |                                                      extensionName=extensionName, | ||
|  |                                                      description=extensionDescription, | ||
|  |                                                      status=status) | ||
|  | 
 | ||
|  |                     phpExtension.save() | ||
|  | 
 | ||
|  |         phpVers = "php" + PHPManager.getPHPString(data['phpVersion']) | ||
|  | 
 | ||
|  |         phpVersion = ApachePHP.objects.get(phpVers=phpVers) | ||
|  | 
 | ||
|  |         records = phpVersion.installedpackagesapache_set.all() | ||
|  | 
 | ||
|  |         json_data = "[" | ||
|  |         checker = 0 | ||
|  | 
 | ||
|  |         for items in records: | ||
|  | 
 | ||
|  |             if items.status == 0: | ||
|  |                 status = "Not-Installed" | ||
|  |             else: | ||
|  |                 status = "Installed" | ||
|  | 
 | ||
|  |             dic = {'id': items.id, | ||
|  |                    'phpVers': items.phpVers.phpVers, | ||
|  |                    'extensionName': items.extensionName, | ||
|  |                    'description': items.description, | ||
|  |                    '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 + ']' | ||
|  |         final_json = json.dumps({'status': 1, 'error_message': "None", "data": json_data}) | ||
|  |         return HttpResponse(final_json) |