This commit is contained in:
usmannasir
2023-11-26 14:32:35 +04:00
parent f41f07d8f2
commit 6a4e63bf93
7 changed files with 223 additions and 55 deletions

View File

@@ -12,14 +12,30 @@ class PHPManager:
@staticmethod @staticmethod
def findPHPVersions(): def findPHPVersions():
distro = ProcessUtilities.decideDistro() # distro = ProcessUtilities.decideDistro()
if distro == ProcessUtilities.centos: # 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'] # 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: # elif distro == ProcessUtilities.cent8:
return ['PHP 7.1','PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] # return ['PHP 7.1','PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1']
elif distro == ProcessUtilities.ubuntu20: # elif distro == ProcessUtilities.ubuntu20:
return ['PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] # return ['PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1']
else: # 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]
# 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]
# Now php_versions contains the formatted PHP versions
return php_versions
except BaseException as msg:
return ['PHP 7.0', 'PHP 7.1', 'PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1'] return ['PHP 7.0', 'PHP 7.1', 'PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1']
@staticmethod @staticmethod

View File

@@ -1,6 +1,7 @@
#!/usr/local/CyberCP/bin/python #!/usr/local/CyberCP/bin/python
import os,sys import os,sys
from ApachController.ApacheVhosts import ApacheVhost
from manageServices.models import PDNSStatus from manageServices.models import PDNSStatus
from .processUtilities import ProcessUtilities from .processUtilities import ProcessUtilities
@@ -674,8 +675,6 @@ class ACLManager:
@staticmethod @staticmethod
def checkOwnership(domain, admin, currentACL): def checkOwnership(domain, admin, currentACL):
try: try:
childDomain = ChildDomains.objects.get(domain=domain) childDomain = ChildDomains.objects.get(domain=domain)
@@ -995,3 +994,70 @@ class ACLManager:
except BaseException as msg: except BaseException as msg:
return 0, str(msg), None return 0, str(msg), None
@staticmethod
def FindDocRootOfSite(vhostConf,domainName):
try:
if vhostConf == None:
vhostConf = f'/usr/local/lsws/conf/vhosts/{domainName}/vhost.conf'
if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
command = "awk '/docRoot/ {print $2}' " + vhostConf
docRoot = ProcessUtilities.outputExecutioner(command, 'root', True).rstrip('\n')
#docRoot = docRoot.replace('$VH_ROOT', f'/home/{domainName}')
return docRoot
else:
command = "awk '/DocumentRoot/ {print $2; exit}' " + vhostConf
docRoot = ProcessUtilities.outputExecutioner(command, 'root', True).rstrip('\n')
return docRoot
except:
pass
@staticmethod
def ReplaceDocRoot(vhostConf, domainName, NewDocRoot):
try:
if vhostConf == None:
vhostConf = f'/usr/local/lsws/conf/vhosts/{domainName}/vhost.conf'
if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
#command = f"sed -i 's/docRoot\s\s*.*/docRoot {NewDocRoot}/g " + vhostConf
command = f"sed -i 's#docRoot\s\s*.*#docRoot {NewDocRoot}#g' " + vhostConf
ProcessUtilities.executioner(command, 'root', True)
else:
command = f"sed -i 's#DocumentRoot\s\s*[^[:space:]]*#DocumentRoot {NewDocRoot}#g' " + vhostConf
ProcessUtilities.executioner(command, 'root', True)
except:
pass
@staticmethod
def FindDocRootOfSiteApache(vhostConf, domainName):
try:
finalConfPath = ApacheVhost.configBasePath + domainName + '.conf'
if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
if os.path.exists(finalConfPath):
command = "awk '/DocumentRoot/ {print $2; exit}' " + finalConfPath
docRoot = ProcessUtilities.outputExecutioner(command, 'root', True).rstrip('\n')
return docRoot
else:
return None
else:
return None
except:
return None
@staticmethod
def ReplaceDocRootApache(vhostConf, domainName, NewDocRoot):
try:
finalConfPath = ApacheVhost.configBasePath + domainName + '.conf'
if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
command = f"sed -i 's#DocumentRoot\s\s*[^[:space:]]*#DocumentRoot {NewDocRoot}#g' " + finalConfPath
ProcessUtilities.executioner(command, 'root', True)
except:
pass

View File

@@ -4,6 +4,7 @@ import os, sys
import shutil import shutil
import time import time
from ApachController.ApacheVhosts import ApacheVhost
from loginSystem.models import Administrator from loginSystem.models import Administrator
from managePHP.phpManager import PHPManager from managePHP.phpManager import PHPManager
from plogical.acl import ACLManager from plogical.acl import ACLManager
@@ -112,7 +113,7 @@ class ApplicationInstaller(multi.Thread):
vhFile = f'/usr/local/lsws/conf/vhosts/{domainName}/vhost.conf' vhFile = f'/usr/local/lsws/conf/vhosts/{domainName}/vhost.conf'
phpPath = phpUtilities.GetPHPVersionFromFile(vhFile) phpPath = phpUtilities.GetPHPVersionFromFile(vhFile, domainName)
### basically for now php 8.0 is being checked ### basically for now php 8.0 is being checked
@@ -188,6 +189,13 @@ class ApplicationInstaller(multi.Thread):
command = 'mkdir -p ' + finalPath command = 'mkdir -p ' + finalPath
ProcessUtilities.executioner(command, externalApp) ProcessUtilities.executioner(command, externalApp)
command = f'rm -rf {finalPath}*'
ProcessUtilities.executioner(command, externalApp)
command = f'rm -rf {finalPath}.*'
ProcessUtilities.executioner(command, externalApp)
## checking for directories/files ## checking for directories/files
if self.dataLossCheck(finalPath, tempStatusPath, externalApp) == 0: if self.dataLossCheck(finalPath, tempStatusPath, externalApp) == 0:
@@ -199,16 +207,20 @@ class ApplicationInstaller(multi.Thread):
statusFile.writelines('Downloading Mautic Core,30') statusFile.writelines('Downloading Mautic Core,30')
statusFile.close() statusFile.close()
command = "wget https://github.com/mautic/mautic/releases/download/%s/%s.zip" % ( #command = "wget https://github.com/mautic/mautic/releases/download/%s/%s.zip" % (
ApplicationInstaller.MauticVersion, ApplicationInstaller.MauticVersion) #ApplicationInstaller.MauticVersion, ApplicationInstaller.MauticVersion)
ProcessUtilities.outputExecutioner(command, externalApp, None, finalPath)
### replace command with composer install
command = f'{phpPath} /usr/bin/composer create-project mautic/recommended-project:^4 {finalPath}'
ProcessUtilities.outputExecutioner(command, externalApp, None)
statusFile = open(tempStatusPath, 'w') statusFile = open(tempStatusPath, 'w')
statusFile.writelines('Extracting Mautic Core,50') statusFile.writelines('Extracting Mautic Core,50')
statusFile.close() statusFile.close()
command = "unzip %s.zip" % (ApplicationInstaller.MauticVersion) ### replace command with composer install
ProcessUtilities.outputExecutioner(command, externalApp, None, finalPath) #command = "unzip %s.zip" % (ApplicationInstaller.MauticVersion)
#ProcessUtilities.outputExecutioner(command, externalApp, None, finalPath)
## ##
@@ -222,53 +234,99 @@ class ApplicationInstaller(multi.Thread):
else: else:
finalURL = domainName finalURL = domainName
ACLManager.CreateSecureDir()
localDB = '%s/%s' % ('/usr/local/CyberCP/tmp', str(randint(1000, 9999)))
localDBContent = """<?php # ACLManager.CreateSecureDir()
// Example local.php to test install (to adapt of course) # localDB = '%s/%s' % ('/usr/local/CyberCP/tmp', str(randint(1000, 9999)))
$parameters = array( #
// Do not set db_driver and mailer_from_name as they are used to assume Mautic is installed # localDBContent = """<?php
'db_host' => 'localhost', # // Example local.php to test install (to adapt of course)
'db_table_prefix' => null, # $parameters = array(
'db_port' => 3306, # // Do not set db_driver and mailer_from_name as they are used to assume Mautic is installed
'db_name' => '%s', # 'db_host' => 'localhost',
'db_user' => '%s', # 'db_table_prefix' => null,
'db_password' => '%s', # 'db_port' => 3306,
'db_backup_tables' => true, # 'db_name' => '%s',
'db_backup_prefix' => 'bak_', # 'db_user' => '%s',
'admin_email' => '%s', # 'db_password' => '%s',
'admin_password' => '%s', # 'db_backup_tables' => true,
'mailer_transport' => null, # 'db_backup_prefix' => 'bak_',
'mailer_host' => null, # 'admin_email' => '%s',
'mailer_port' => null, # 'admin_password' => '%s',
'mailer_user' => null, # 'mailer_transport' => null,
'mailer_password' => null, # 'mailer_host' => null,
'mailer_api_key' => null, # 'mailer_port' => null,
'mailer_encryption' => null, # 'mailer_user' => null,
'mailer_auth_mode' => null, # 'mailer_password' => null,
);""" % (dbName, dbUser, dbPassword, email, password) # 'mailer_api_key' => null,
# 'mailer_encryption' => null,
# 'mailer_auth_mode' => null,
# );""" % (dbName, dbUser, dbPassword, email, password)
#
# writeToFile = open(localDB, 'w')
# writeToFile.write(localDBContent)
# writeToFile.close()
writeToFile = open(localDB, 'w') #command = 'rm -rf %s/app/config/local.php' % (finalPath)
writeToFile.write(localDBContent) #ProcessUtilities.executioner(command, externalApp)
writeToFile.close()
command = 'rm -rf %s/app/config/local.php' % (finalPath) #command = 'chown %s:%s %s' % (externalApp, externalApp, localDB)
ProcessUtilities.executioner(command, externalApp) #ProcessUtilities.executioner(command)
command = 'chown %s:%s %s' % (externalApp, externalApp, localDB) #command = 'cp %s %s/app/config/local.php' % (localDB, finalPath)
ProcessUtilities.executioner(command) #ProcessUtilities.executioner(command, externalApp)
command = 'cp %s %s/app/config/local.php' % (localDB, finalPath) ### replace install command with comspoer soo
ProcessUtilities.executioner(command, externalApp) #command = f"{phpPath} bin/console mautic:install http://%s -f" % (finalURL)
command = f"{phpPath} bin/console mautic:install --db_host='localhost' --db_name='{dbName}' --db_user='{dbUser}' --db_password='{dbPassword}' --admin_username='{username}' --admin_email='{email}' --admin_password='{password}' --db_port='3306' http://{finalURL} -f"
command = f"{phpPath} bin/console mautic:install http://%s -f" % (finalURL)
result = ProcessUtilities.outputExecutioner(command, externalApp, None, finalPath) result = ProcessUtilities.outputExecutioner(command, externalApp, None, finalPath)
if result.find('Install complete') == -1: if result.find('Install complete') == -1:
raise BaseException(result) raise BaseException(result)
os.remove(localDB)
ExistingDocRoot = ACLManager.FindDocRootOfSite(None, domainName)
if ExistingDocRoot.find('docroot') > -1:
ExistingDocRoot = ExistingDocRoot.replace('docroot', '')
NewDocRoot = f'{ExistingDocRoot}/docroot'
ACLManager.ReplaceDocRoot(None, domainName, NewDocRoot)
if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
try:
ExistingDocRootApache = ACLManager.FindDocRootOfSiteApache(None, domainName)
if ExistingDocRootApache.find('docroot') == -1:
NewDocRootApache = f'{ExistingDocRootApache}docroot'
else:
NewDocRootApache = ExistingDocRootApache
if ExistingDocRootApache != None:
ACLManager.ReplaceDocRootApache(None, domainName, NewDocRootApache)
except:
pass
### fix incorrect rules in .htaccess of mautic
if ProcessUtilities.decideServer() == ProcessUtilities.ent:
htAccessPath = f'{finalPath}docroot/.htaccess'
command = f"sed -i '/# Fallback for Apache < 2.4/,/<\/IfModule>/d' {htAccessPath}"
ProcessUtilities.executioner(command, externalApp, True)
command = f"sed -i '/# Apache 2.4+/,/<\/IfModule>/d' {htAccessPath}"
ProcessUtilities.executioner(command, externalApp, True)
#os.remove(localDB)
command = f"systemctl restart {ApacheVhost.serviceName}"
ProcessUtilities.normalExecutioner(command)
installUtilities.reStartLiteSpeedSocket() installUtilities.reStartLiteSpeedSocket()
statusFile = open(tempStatusPath, 'w') statusFile = open(tempStatusPath, 'w')

View File

@@ -1,4 +1,7 @@
import sys import sys
from ApachController.ApacheVhosts import ApacheVhost
sys.path.append('/usr/local/CyberCP') sys.path.append('/usr/local/CyberCP')
from plogical import CyberCPLogFileWriter as logging from plogical import CyberCPLogFileWriter as logging
import subprocess import subprocess
@@ -217,7 +220,16 @@ class phpUtilities:
return msg return msg
@staticmethod @staticmethod
def GetPHPVersionFromFile(vhFile): def GetPHPVersionFromFile(vhFile, domainName=None):
finalConfPath = ApacheVhost.configBasePath + domainName + '.conf'
if os.path.exists(finalConfPath):
command = f'grep -Eo -m 1 "php[0-9]+" {finalConfPath} | sed -n "1p"'
result = ProcessUtilities.outputExecutioner(command, None, True).rstrip('\n')
result = f'/usr/local/lsws/ls{result}/bin/lsphp'
result = result.rsplit("lsphp", 1)[0] + "php"
return result
if ProcessUtilities.decideServer() == ProcessUtilities.OLS: if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
command = f'grep -Eo "/usr/local/lsws/lsphp[0-9]+/bin/lsphp" {vhFile}' command = f'grep -Eo "/usr/local/lsws/lsphp[0-9]+/bin/lsphp" {vhFile}'
result = ProcessUtilities.outputExecutioner(command, None, True).rstrip('\n') result = ProcessUtilities.outputExecutioner(command, None, True).rstrip('\n')

View File

@@ -10,6 +10,7 @@ try:
from websiteFunctions.models import ChildDomains, Websites from websiteFunctions.models import ChildDomains, Websites
except: except:
pass pass
from plogical.acl import ACLManager
class sslUtilities: class sslUtilities:
@@ -320,7 +321,8 @@ context /.well-known/acme-challenge {
except BaseException as msg: except BaseException as msg:
website = Websites.objects.get(domain=virtualHostName) website = Websites.objects.get(domain=virtualHostName)
externalApp = website.externalApp externalApp = website.externalApp
DocumentRoot = ' DocumentRoot /home/' + virtualHostName + '/public_html\n' docRoot = ACLManager.FindDocRootOfSite(None, virtualHostName)
DocumentRoot = f' DocumentRoot {docRoot}\n'
data = open(completePathToConfigFile, 'r').readlines() data = open(completePathToConfigFile, 'r').readlines()
phpHandler = '' phpHandler = ''

View File

@@ -270,7 +270,8 @@ class sslUtilities:
except BaseException as msg: except BaseException as msg:
website = Websites.objects.get(domain=virtualHostName) website = Websites.objects.get(domain=virtualHostName)
externalApp = website.externalApp externalApp = website.externalApp
DocumentRoot = ' DocumentRoot /home/' + virtualHostName + '/public_html\n' docRoot = ACLManager.FindDocRootOfSite(None, virtualHostName)
DocumentRoot = f' DocumentRoot {docRoot}\n'
data = open(completePathToConfigFile, 'r').readlines() data = open(completePathToConfigFile, 'r').readlines()
phpHandler = '' phpHandler = ''

View File

@@ -0,0 +1,13 @@
import subprocess
# Run the shell command and capture the output
result = subprocess.run(['ls', '-la'], capture_output=True, text=True)
# Get the lines containing 'lsphp' in the output
lsphp_lines = [line for line in result.stdout.split('\n') if 'lsphp' in line]
# Extract the version from the lines
php_versions = [line.split()[8] for line in lsphp_lines]
print(php_versions)