⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.74
Server IP:
104.21.32.1
Server:
Linux vmi2315822.contaboserver.net 5.15.0-134-generic #145-Ubuntu SMP Wed Feb 12 20:08:39 UTC 2025 x86_64
Server Software:
LiteSpeed
PHP Version:
8.3.21
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
local
/
CyberCP
/
websiteFunctions
/
View File Name :
StagingSetup.py
#!/usr/local/CyberCP/bin/python import subprocess import threading as multi from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging from plogical.virtualHostUtilities import virtualHostUtilities from plogical.processUtilities import ProcessUtilities from .models import Websites, ChildDomains from plogical.applicationInstaller import ApplicationInstaller from plogical.mysqlUtilities import mysqlUtilities from random import randint import os class StagingSetup(multi.Thread): def __init__(self, function, extraArgs): multi.Thread.__init__(self) self.function = function self.extraArgs = extraArgs def run(self): try: if self.function == 'startCloning': self.startCloning() elif self.function == 'startSyncing': self.startSyncing() except BaseException as msg: logging.writeToFile(str(msg) + ' [StagingSetup.run]') def startCloning(self): global ApplicationInstaller try: tempStatusPath = self.extraArgs['tempStatusPath'] self.tempStatusPath = tempStatusPath masterDomain = self.extraArgs['masterDomain'] domain = self.extraArgs['domain'] admin = self.extraArgs['admin'] website = Websites.objects.get(domain=masterDomain) from managePHP.phpManager import PHPManager php = PHPManager.getPHPString(website.phpSelection) FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) try: import json from cloudAPI.models import WPDeployments wpd = WPDeployments.objects.get(owner=website) path = json.loads(wpd.config)['path'] masterPath = '/home/%s/public_html/%s' % (masterDomain, path) replaceDomain = '%s/%s' % (masterDomain, path) except: masterPath = '/home/%s/public_html' % (masterDomain) replaceDomain = masterDomain ### Check WP CLI try: command = 'wp --info' outout = ProcessUtilities.outputExecutioner(command) if not outout.find('WP-CLI root dir:') > -1: from plogical.applicationInstaller import ApplicationInstaller ai = ApplicationInstaller(None, None) ai.installWPCLI() except subprocess.CalledProcessError: from plogical.applicationInstaller import ApplicationInstaller ai = ApplicationInstaller(None, None) ai.installWPCLI() configPath = '%s/wp-config.php' % (masterPath) ## Check if WP Detected on Main Site command = 'ls -la %s' % (configPath) output = ProcessUtilities.outputExecutioner(command) if output.find('No such file or') > -1: logging.statusWriter(tempStatusPath, 'WordPress is not detected. [404]') return 0 ## command = 'chmod 755 %s' % (masterPath) ProcessUtilities.executioner(command) ## Creating Child Domain path = "/home/" + masterDomain + "/" + domain logging.statusWriter(tempStatusPath, 'Creating domain for staging environment..,5') phpSelection = website.phpSelection execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" execPath = execPath + " createDomain --masterDomain " + masterDomain + " --virtualHostName " + domain + \ " --phpVersion '" + phpSelection + "' --ssl 1 --dkimCheck 0 --openBasedir 0 --path " + path + ' --websiteOwner ' \ + admin.userName + ' --tempStatusPath %s' % (tempStatusPath + '1') + " --apache 0" ProcessUtilities.executioner(execPath) domainCreationStatusPath = tempStatusPath + '1' data = open(domainCreationStatusPath, 'r').read() if data.find('[200]') > -1: pass else: logging.statusWriter(tempStatusPath, 'Failed to create child-domain for staging environment. [404]') return 0 logging.statusWriter(tempStatusPath, 'Domain successfully created..,15') ### Get table prefix of master site command = '%s -d error_reporting=0 /usr/bin/wp config get table_prefix --allow-root --skip-plugins --skip-themes --path=%s' % ( FinalPHPPath, masterPath) TablePrefix = ProcessUtilities.outputExecutioner(command).rstrip('\n') ### ## Creating WP Site and setting Database command = '%s -d error_reporting=0 /usr/bin/wp core download --path=%s' % (FinalPHPPath, path) ProcessUtilities.executioner(command, website.externalApp) logging.statusWriter(tempStatusPath, 'Creating and copying database..,50') dbNameRestore, dbUser, dbPassword = ApplicationInstaller(None, None).dbCreation(tempStatusPath, website) command = '%s -d error_reporting=0 /usr/bin/wp core config --dbname=%s --dbuser=%s --dbpass=%s --dbhost=%s:%s --path=%s' % (FinalPHPPath, dbNameRestore, dbUser, dbPassword, ApplicationInstaller.LOCALHOST, ApplicationInstaller.PORT, path) ProcessUtilities.executioner(command, website.externalApp) ### Set table prefix command = '%s -d error_reporting=0 /usr/bin/wp config set table_prefix %s --path=%s' % (FinalPHPPath, TablePrefix , path) ProcessUtilities.executioner(command, website.externalApp) ## Exporting and importing database command = '%s -d error_reporting=0 /usr/bin/wp --allow-root --skip-plugins --skip-themes --path=%s db export %s/dbexport-stage.sql' % (FinalPHPPath, masterPath, path) ProcessUtilities.executioner(command) ## Import command = '%s -d error_reporting=0 /usr/bin/wp --allow-root --skip-plugins --skip-themes --path=%s --quiet db import %s/dbexport-stage.sql' % (FinalPHPPath, path, path) ProcessUtilities.executioner(command) try: command = 'rm -f %s/dbexport-stage.sql' % (path) ProcessUtilities.executioner(command) except: pass ## Sync WP-Content Folder command = '%s -d error_reporting=0 /usr/bin/wp theme path --skip-plugins --skip-themes --allow-root --path=%s' % (FinalPHPPath, masterPath) WpContentPath = ProcessUtilities.outputExecutioner(command).splitlines()[-1].replace('themes', '') command = 'cp -R %s %s/' % (WpContentPath, path) ProcessUtilities.executioner(command) ## Copy htaccess command = 'cp -f %s/.htaccess %s/' % (WpContentPath.replace('/wp-content/', ''), path) ProcessUtilities.executioner(command) ## Search and replace url command = '%s -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "%s" "%s"' % (FinalPHPPath, path, replaceDomain, domain) ProcessUtilities.executioner(command) command = '%s -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "www.%s" "%s"' % (FinalPHPPath, path, domain, domain) ProcessUtilities.executioner(command) command = '%s -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://%s" "http://%s"' % ( FinalPHPPath, path, domain, domain) ProcessUtilities.executioner(command) logging.statusWriter(tempStatusPath, 'Fixing permissions..,90') from filemanager.filemanager import FileManager fm = FileManager(None, None) fm.fixPermissions(masterDomain) from plogical.installUtilities import installUtilities installUtilities.reStartLiteSpeed() logging.statusWriter(tempStatusPath, 'Completed,[200]') return 0 except BaseException as msg: mesg = '%s. [168][404]' % (str(msg)) logging.statusWriter(self.tempStatusPath, mesg) def startSyncing(self): try: tempStatusPath = self.extraArgs['tempStatusPath'] childDomain = self.extraArgs['childDomain'] #eraseCheck = self.extraArgs['eraseCheck'] dbCheck = self.extraArgs['dbCheck'] #copyChanged = self.extraArgs['copyChanged'] child = ChildDomains.objects.get(domain=childDomain) from managePHP.phpManager import PHPManager php = PHPManager.getPHPString(child.master.phpSelection) FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) try: import json from cloudAPI.models import WPDeployments wpd = WPDeployments.objects.get(owner=child.master) path = json.loads(wpd.config)['path'] masterPath = '/home/%s/public_html/%s' % (child.master.domain, path) replaceDomain = '%s/%s' % (child.master.domain, path) except: masterPath = '/home/%s/public_html' % (child.master.domain) replaceDomain = child.master.domain command = 'chmod 755 /home/%s/public_html' % (child.master.domain) ProcessUtilities.executioner(command) configPath = '%s/wp-config.php' % (child.path) if not os.path.exists(configPath): logging.statusWriter(tempStatusPath, 'WordPress is not detected. [404]') return 0 ## Restore db logging.statusWriter(tempStatusPath, 'Syncing databases..,10') command = '%s -d error_reporting=0 /usr/bin/wp --allow-root --skip-plugins --skip-themes --path=%s db export %s/dbexport-stage.sql' % (FinalPHPPath, child.path, masterPath) result = ProcessUtilities.outputExecutioner(command) if os.path.exists(ProcessUtilities.debugPath): logging.writeToFile(result) ## Restore to master domain command = '%s -d error_reporting=0 /usr/bin/wp --allow-root --skip-plugins --skip-themes --path=%s --quiet db import %s/dbexport-stage.sql' % (FinalPHPPath, masterPath, masterPath) result = ProcessUtilities.outputExecutioner(command) if os.path.exists(ProcessUtilities.debugPath): logging.writeToFile(result) try: command = 'rm -f %s/dbexport-stage.sql' % (masterPath) ProcessUtilities.executioner(command) except: pass ## Sync WP-Content Folder logging.statusWriter(tempStatusPath, 'Syncing data..,50') command = '%s -d error_reporting=0 /usr/bin/wp theme path --allow-root --skip-plugins --skip-themes --path=%s' % (FinalPHPPath, masterPath) WpContentPath = ProcessUtilities.outputExecutioner(command).splitlines()[-1].replace('wp-content/themes', '') if os.path.exists(ProcessUtilities.debugPath): logging.writeToFile(WpContentPath) command = 'cp -R %s/wp-content/ %s' % (child.path, WpContentPath) ProcessUtilities.executioner(command) ## COPY Htaccess command = 'cp -f %s/.htaccess %s' % (child.path, WpContentPath) ProcessUtilities.executioner(command) ## Search and replace url command = '%s -d error_reporting=0 /usr/bin/wp search-replace --allow-root --skip-plugins --skip-themes --path=%s "%s" "%s"' % (FinalPHPPath, masterPath, child.domain, replaceDomain) result = ProcessUtilities.outputExecutioner(command) if os.path.exists(ProcessUtilities.debugPath): logging.writeToFile(result) command = '%s -d error_reporting=0 /usr/bin/wp search-replace --allow-root --skip-plugins --skip-themes --path=%s "www.%s" "%s"' % (FinalPHPPath,masterPath, child.domain, replaceDomain) result = ProcessUtilities.outputExecutioner(command) if os.path.exists(ProcessUtilities.debugPath): logging.writeToFile(result) command = '%s -d error_reporting=0 /usr/bin/wp search-replace --allow-root --skip-plugins --skip-themes --path=%s "https://%s" "http://%s"' % (FinalPHPPath, masterPath, replaceDomain, replaceDomain) result = ProcessUtilities.outputExecutioner(command) if os.path.exists(ProcessUtilities.debugPath): logging.writeToFile(result) from filemanager.filemanager import FileManager fm = FileManager(None, None) fm.fixPermissions(child.master.domain) from plogical.installUtilities import installUtilities installUtilities.reStartLiteSpeed() logging.statusWriter(tempStatusPath, 'Completed,[200]') return 0 except BaseException as msg: mesg = '%s. [404]' % (str(msg)) logging.statusWriter(tempStatusPath, mesg)