diff --git a/plogical/IncScheduler.py b/plogical/IncScheduler.py index 479a0840f..9dd657996 100644 --- a/plogical/IncScheduler.py +++ b/plogical/IncScheduler.py @@ -1,9 +1,11 @@ #!/usr/local/CyberCP/bin/python import os.path import sys + sys.path.append('/usr/local/CyberCP') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings") import django + django.setup() from IncBackups.IncBackupsControl import IncJobs from IncBackups.models import BackupJob @@ -22,6 +24,7 @@ import requests import socket from websiteFunctions.models import NormalBackupJobs, NormalBackupJobLogs from boto3.s3.transfer import TransferConfig + try: from s3Backups.models import BackupPlan, BackupLogs import boto3 @@ -63,7 +66,7 @@ class IncScheduler(multi.Thread): tempPath = "/home/cyberpanel/" + str(randint(1000, 9999)) for job in BackupJob.objects.all(): logging.statusWriter(IncScheduler.logPath, 'Job Description:\n\n Destination: %s, Frequency: %s.\n ' % ( - job.destination, job.frequency), 1) + job.destination, job.frequency), 1) if job.frequency == type: for web in job.jobsites_set.all(): logging.statusWriter(IncScheduler.logPath, 'Backing up %s.' % (web.website), 1) @@ -129,7 +132,7 @@ class IncScheduler(multi.Thread): web = Websites.objects.get(domain=website) message = '[%s Cron] Checking if %s has any pending commits on %s.' % ( - type, website, time.strftime("%m.%d.%Y_%H-%M-%S")) + type, website, time.strftime("%m.%d.%Y_%H-%M-%S")) finalText = '%s\n' % (message) GitLogs(owner=web, type='INFO', message=message).save() @@ -148,7 +151,7 @@ class IncScheduler(multi.Thread): data['domain'] = gitConf['domain'] data['folder'] = gitConf['folder'] data['commitMessage'] = 'Auto commit by CyberPanel %s cron on %s' % ( - type, time.strftime('%m-%d-%Y_%H-%M-%S')) + type, time.strftime('%m-%d-%Y_%H-%M-%S')) if gitConf['autoCommit'] == type: @@ -182,7 +185,7 @@ class IncScheduler(multi.Thread): finalText = '%s\n%s' % (finalText, message) message = '[%s Cron] Finished checking for %s on %s.' % ( - type, website, time.strftime("%m.%d.%Y_%H-%M-%S")) + type, website, time.strftime("%m.%d.%Y_%H-%M-%S")) finalText = '%s\n%s' % (finalText, message) logging.SendEmail(web.adminEmail, web.adminEmail, finalText, 'Git report for %s.' % (web.domain)) GitLogs(owner=web, type='INFO', message=message).save() @@ -333,7 +336,7 @@ class IncScheduler(multi.Thread): if retValues[0] == 0: GDriveJobLogs(owner=items, status=backupSchedule.ERROR, message='[ERROR] Backup failed for %s, error: %s moving on..' % ( - website.domain, retValues[1])).save() + website.domain, retValues[1])).save() continue completeFileToSend = retValues[1] + ".tar.gz" @@ -378,12 +381,9 @@ class IncScheduler(multi.Thread): GDriveJobLogs(owner=items, status=backupSchedule.INFO, message='Job Completed').save() - print("job com[leted") - #logging.writeToFile('job completed') - - + # logging.writeToFile('job completed') url = "https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission" data = { @@ -400,67 +400,67 @@ class IncScheduler(multi.Thread): page_token = None while True: - response = drive.files().list(q="name='%s-%s'" % (items.name,ipAddress), - spaces='drive', + response = drive.files().list(q="name='%s-%s'" % (items.name, ipAddress), + spaces='drive', fields='nextPageToken, files(id, name)', pageToken=page_token).execute() for file in response.get('files', []): # Process change - #print('Fetch Main folder ID: %s (%s)' % (file.get('name'), file.get('id'))) - #logging.writeToFile('Fetch Main folder ID: %s (%s)' % (file.get('name'), file.get('id'))) - mainfolder_id= file.get('id') + # print('Fetch Main folder ID: %s (%s)' % (file.get('name'), file.get('id'))) + # logging.writeToFile('Fetch Main folder ID: %s (%s)' % (file.get('name'), file.get('id'))) + mainfolder_id = file.get('id') page_token = response.get('nextPageToken', None) if page_token is None: break - #print("new job started ") + # print("new job started ") try: page_token = None while True: - response = drive.files().list(q="'%s' in parents"%(mainfolder_id), - spaces='drive', - fields='nextPageToken, files(id, name, createdTime)', - pageToken=page_token).execute() + response = drive.files().list(q="'%s' in parents" % (mainfolder_id), + spaces='drive', + fields='nextPageToken, files(id, name, createdTime)', + pageToken=page_token).execute() for file in response.get('files', []): # Process change - #print('Fetch all folders in main folder: %s (%s) time:-%s' % (file.get('name'), file.get('id'), file.get('createdTime'))) - #logging.writeToFile('Fetch all folders in main folder: %s (%s) time:-%s' % (file.get('name'), file.get('id'),file.get('createdTime'))) + # print('Fetch all folders in main folder: %s (%s) time:-%s' % (file.get('name'), file.get('id'), file.get('createdTime'))) + # logging.writeToFile('Fetch all folders in main folder: %s (%s) time:-%s' % (file.get('name'), file.get('id'),file.get('createdTime'))) ab = file.get('createdTime')[:10] filename = file.get('name') fileDeleteID = file.get('id') - timestamp = time.mktime(datetime.datetime.strptime(ab,"%Y-%m-%d").timetuple()) + timestamp = time.mktime(datetime.datetime.strptime(ab, "%Y-%m-%d").timetuple()) CUrrenttimestamp = time.time() timerrtention = gDriveData['FileRetentiontime'] - if(timerrtention == '1d'): + if (timerrtention == '1d'): new = CUrrenttimestamp - float(86400) - if(new>=timestamp): - resp=drive.files().delete(fileId=fileDeleteID).execute() - logging.writeToFile('Delete file %s '%filename) - elif(timerrtention == '1w'): + if (new >= timestamp): + resp = drive.files().delete(fileId=fileDeleteID).execute() + logging.writeToFile('Delete file %s ' % filename) + elif (timerrtention == '1w'): new = CUrrenttimestamp - float(604800) if (new >= timestamp): resp = drive.files().delete(fileId=fileDeleteID).execute() - logging.writeToFile('Delete file %s '%filename) + logging.writeToFile('Delete file %s ' % filename) elif (timerrtention == '1m'): new = CUrrenttimestamp - float(2592000) if (new >= timestamp): resp = drive.files().delete(fileId=fileDeleteID).execute() - logging.writeToFile('Delete file %s '%filename) + logging.writeToFile('Delete file %s ' % filename) elif (timerrtention == '6m'): new = CUrrenttimestamp - float(15552000) if (new >= timestamp): resp = drive.files().delete(fileId=fileDeleteID).execute() - logging.writeToFile('Delete file %s '%filename) + logging.writeToFile('Delete file %s ' % filename) page_token = response.get('nextPageToken', None) if page_token is None: break - # logging.writeToFile('Createtime list - %s'%Createtime) + # logging.writeToFile('Createtime list - %s'%Createtime) except BaseException as msg: - print('An error occurred fetch child: %s' % msg) - logging.writeToFile('An error occurred fetch child: %s' % msg) + print('An error occurred fetch child: %s' % msg) + logging.writeToFile('An error occurred fetch child: %s' % msg) except BaseException as msg: - logging.writeToFile('job not completed [ERROR:]..%s'%msg) + logging.writeToFile('job not completed [ERROR:]..%s' % msg) except BaseException as msg: GDriveJobLogs(owner=items, status=backupSchedule.ERROR, @@ -523,7 +523,7 @@ class IncScheduler(multi.Thread): NormalBackupJobLogs.objects.filter(owner=backupjob).delete() NormalBackupJobLogs(owner=backupjob, status=backupSchedule.INFO, message='Starting %s backup on %s..' % ( - type, time.strftime("%m.%d.%Y_%H-%M-%S"))).save() + type, time.strftime("%m.%d.%Y_%H-%M-%S"))).save() if oldJobContinue: NormalBackupJobLogs(owner=backupjob, status=backupSchedule.INFO, @@ -886,8 +886,7 @@ Automatic backup failed for %s on %s. emailPath = '/home/vmail/%s/%s' % (website.domain, email.email.split('@')[0]) email.DiskUsage = virtualHostUtilities.getDiskUsageofPath(emailPath) email.save() - print('Disk Usage of %s is %s' % (email.email,email.DiskUsage)) - + print('Disk Usage of %s is %s' % (email.email, email.DiskUsage)) config['DiskUsage'], config['DiskUsagePercentage'] = virtualHostUtilities.getDiskUsage( "/home/" + website.domain, website.package.diskSpace) @@ -947,14 +946,14 @@ Automatic backup failed for %s on %s. if config['pluginUpdates'] == 'Enabled': command = 'wp plugin update --all --minor --allow-root --path=/home/%s/public_html' % ( - config['domainName']) + config['domainName']) ProcessUtilities.executioner(command) ### Themes, for plugins we will do minor updates only. if config['themeUpdates'] == 'Enabled': command = 'wp theme update --all --minor --allow-root --path=/home/%s/public_html' % ( - config['domainName']) + config['domainName']) ProcessUtilities.executioner(command) except BaseException as msg: @@ -970,7 +969,7 @@ Automatic backup failed for %s on %s. from plogical.applicationInstaller import ApplicationInstaller for config in RemoteBackupSchedule.objects.all(): try: - configbakup=json.loads(config.config) + configbakup = json.loads(config.config) backuptype = configbakup['BackupType'] if backuptype == 'Only DataBase': Backuptype = "3" @@ -983,119 +982,231 @@ Automatic backup failed for %s on %s. try: allRemoteBackupsiteobj = RemoteBackupsites.objects.filter(owner=config.pk) for i in allRemoteBackupsiteobj: - backupsiteID=i.WPsites - wpsite=WPSites.objects.get(pk=backupsiteID) - AdminID=wpsite.owner.admin_id + backupsiteID = i.WPsites + wpsite = WPSites.objects.get(pk=backupsiteID) + AdminID = wpsite.owner.admin_id Admin = Administrator.objects.get(pk=AdminID) - extraArgs = {} - extraArgs['adminID'] = Admin.pk - extraArgs['WPid'] = wpsite.pk - extraArgs['Backuptype'] = Backuptype - extraArgs['BackupDestination'] = "SFTP" - extraArgs['SFTPID'] = config.RemoteBackupConfig_id - extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) Lastrun = config.lastrun Currenttime = float(time.time()) if config.timeintervel == "30 Minutes": al = float(Currenttime) - float(1800) if float(al) >= float(Lastrun): - # if 1 == 1: + #if 1 == 1: + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = config.RemoteBackupConfig.configtype + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() elif config.timeintervel == "1 Hour": al = float(Currenttime) - float(3600) if float(al) >= float(Lastrun): + # if 1 == 1: + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = config.RemoteBackupConfig.configtype + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() elif config.timeintervel == "6 Hours": al = float(Currenttime) - float(21600) if float(al) >= float(Lastrun): + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() elif config.timeintervel == "12 Hours": al = float(Currenttime) - float(43200) if float(al) >= float(Lastrun): + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() elif config.timeintervel == "1 Day": al = float(Currenttime) - float(86400) if float(al) >= float(Lastrun): + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() elif config.timeintervel == "3 Days": al = float(Currenttime) - float(259200) if float(al) >= float(Lastrun): + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() elif config.timeintervel == "1 Week": al = float(Currenttime) - float(604800) if float(al) >= float(Lastrun): + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() except BaseException as msg: + print("Error in Sites:%s" % str(msg)) continue except BaseException as msg: - print("Error: [RemoteBackup]: %s"%str(msg)) + print("Error: [RemoteBackup]: %s" % str(msg)) logging.writeToFile('%s. [RemoteBackup]' % (str(msg))) - @staticmethod def SendTORemote(FileName, RemoteBackupID): import pysftp @@ -1117,7 +1228,6 @@ Automatic backup failed for %s on %s. with pysftp.Connection(HostName, username=Username, password=Password, cnopts=cnopts) as sftp: print("Connection succesfully stablished ... ") - try: with sftp.cd(Path): sftp.put(FileName) @@ -1131,6 +1241,109 @@ Automatic backup failed for %s on %s. except BaseException as msg: logging.writeToFile('%s. [SendTORemote]' % (str(msg))) + @staticmethod + def SendToS3Cloud(FileName, RemoteBackupCofigID, backupID, scheduleID): + import boto3 + import json + import time + from websiteFunctions.models import RemoteBackupConfig, WPSitesBackup, RemoteBackupSchedule + import plogical.randomPassword as randomPassword + try: + print("UPloading to S3") + Backupobj = WPSitesBackup.objects.get(pk=backupID) + backupConfig = json.loads(Backupobj.config) + websitedomain = backupConfig['WebDomain'] + RemoteBackupOBJ = RemoteBackupConfig.objects.get(pk=RemoteBackupCofigID) + config = json.loads(RemoteBackupOBJ.config) + provider = config['Provider'] + if provider == "Backblaze": + EndURl = config['EndUrl'] + elif provider == "Amazon": + EndURl = "https://s3.us-east-1.amazonaws.com" + elif provider == "Wasabi": + EndURl = "https://s3.wasabisys.com" + + AccessKey = config['AccessKey'] + SecertKey = config['SecertKey'] + + session = boto3.session.Session() + + client = session.client( + 's3', + endpoint_url=EndURl, + aws_access_key_id=AccessKey, + aws_secret_access_key=SecertKey, + verify=False + ) + + # ############Creating Bucket + # BucketName = randomPassword.generate_pass().lower() + # print("BucketName...%s"%BucketName) + # + # try: + # client.create_bucket(Bucket=BucketName) + # except BaseException as msg: + # print("Error in Creating bucket...: %s" % str(msg)) + # logging.writeToFile("Create bucket error---%s:" % str(msg)) + + + ####getting Bucket from backup schedule + Scheduleobj = RemoteBackupSchedule.objects.get(pk=scheduleID) + Scheduleconfig = json.loads(Scheduleobj.config) + BucketName = Scheduleconfig['BucketName'] + #####Uploading File + + uploadfilename = 'backup-' + websitedomain + "-" + time.strftime("%m.%d.%Y_%H-%M-%S") + print("uploadfilename....%s"%uploadfilename) + + try: + res = client.upload_file(Filename=FileName, Bucket=BucketName, Key=uploadfilename) + print("res of Uploading...: %s" % res) + + except BaseException as msg: + print("Error in Uploading...: %s" % msg) + + ###################### version id, this only applied to blackbaze + try: + + s3 = boto3.resource( + 's3', + endpoint_url=EndURl, + aws_access_key_id=AccessKey, + aws_secret_access_key=SecertKey, + ) + + bucket = BucketName + key = uploadfilename + versions = s3.Bucket(bucket).object_versions.filter(Prefix=key) + data = {} + + for version in versions: + obj = version.get() + print("VersionId---%s:" % obj.get('VersionId')) + data['backupVersionId'] = obj.get('VersionId') + + ab = os.path.getsize(FileName) + filesize = float(ab) / 1024.0 + + backupConfig['uploadfilename'] = uploadfilename + backupConfig['backupVersionId'] = data['backupVersionId'] + backupConfig['BucketName'] = BucketName + backupConfig['Uplaodingfilesize'] = filesize + Backupobj.config = json.dumps(backupConfig) + Backupobj.save() + + except BaseException as msg: + print("Version ID Error: %s"%str(msg)) + + + + + + + except BaseException as msg: + print('%s. [SendToS3Cloud]' % (str(msg))) + logging.writeToFile('%s. [SendToS3Cloud]' % (str(msg))) def main(): @@ -1151,7 +1364,6 @@ def main(): ib = IncScheduler('startBackup', {'freq': args.function}) ib.start() - ### IncScheduler.startBackup(args.function) @@ -1166,4 +1378,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/plogical/applicationInstaller.py b/plogical/applicationInstaller.py index 87349b100..6ea2f6e88 100755 --- a/plogical/applicationInstaller.py +++ b/plogical/applicationInstaller.py @@ -2444,7 +2444,7 @@ $parameters = array( raise BaseException(stdout) logging.statusWriter(self.tempStatusPath, 'Completed.[200]') - return 1, f"/home/backup/{config['name']}.tar.gz" + return 1, f"/home/backup/{config['name']}.tar.gz", backupobj.id #### Only Website Data === 2 elif Backuptype == "2": @@ -2576,7 +2576,7 @@ $parameters = array( raise BaseException(stdout) logging.statusWriter(self.tempStatusPath, 'Completed.[200]') - return 1, f"/home/backup/{config['name']}.tar.gz" + return 1, f"/home/backup/{config['name']}.tar.gz", backupobj.id #### Only Database === 3 else: @@ -2705,7 +2705,7 @@ $parameters = array( raise BaseException(stdout) logging.statusWriter(self.tempStatusPath, 'Completed.[200]') - return 1, f"/home/backup/{config['name']}.tar.gz" + return 1, f"/home/backup/{config['name']}.tar.gz", backupobj.id except BaseException as msg: logging.writeToFile("Error WPCreateBackup ....... %s" % str(msg)) @@ -2715,7 +2715,7 @@ $parameters = array( except: pass logging.statusWriter(self.tempStatusPath, f'{str(msg)}. [404]') - return 0, str(msg) + return 0, str(msg), None def RestoreWPbackupNow(self): try: @@ -2725,7 +2725,7 @@ $parameters = array( from packages.models import Package import pysftp import pysftp as sftp - + import boto3 if os.path.exists(ProcessUtilities.debugPath): logging.writeToFile("Error Restore WP backup Now ....... start:%s"% self.extraArgs['Domain']) @@ -2754,12 +2754,12 @@ $parameters = array( #####Check Backup Type BackupType = config['Backuptype'] BackupDestination = config['BackupDestination'] - SFTP_ID = config['SFTP_ID'] + RemoteBackupID = config['SFTP_ID'] #SFTPBackups if BackupDestination == 'SFTP': - RemoteBackupOBJ = RemoteBackupConfig.objects.get(pk=SFTP_ID) + RemoteBackupOBJ = RemoteBackupConfig.objects.get(pk=RemoteBackupID) RemoteBackupconf = json.loads(RemoteBackupOBJ.config) HostName = RemoteBackupconf['Hostname'] Username = RemoteBackupconf['Username'] @@ -3836,6 +3836,1091 @@ $parameters = array( installUtilities.reStartLiteSpeed() + ###S#Backups + elif BackupDestination == 'S3': + uploadfilename = config['uploadfilename'] + BucketName = config['BucketName'] + RemoteBackupOBJ = RemoteBackupConfig.objects.get(pk=RemoteBackupID) + RemoteBackupconf = json.loads(RemoteBackupOBJ.config) + provider = RemoteBackupconf['Provider'] + if provider == "Backblaze": + EndURl = RemoteBackupconf['EndUrl'] + elif provider == "Amazon": + EndURl = "https://s3.us-east-1.amazonaws.com" + elif provider == "Wasabi": + EndURl = "https://s3.wasabisys.com" + AccessKey = RemoteBackupconf['AccessKey'] + SecertKey = RemoteBackupconf['SecertKey'] + + session = boto3.session.Session() + + client = session.client( + 's3', + endpoint_url=EndURl, + aws_access_key_id=AccessKey, + aws_secret_access_key=SecertKey, + verify=False + ) + + FinalZipPath = "/home/cyberpanel/%s.tar.gz" % (uploadfilename) + try: + client.download_file(BucketName, uploadfilename, FinalZipPath) + except BaseException as msg: + logging.writeToFile("Error in downloadfile: ..%s"%str(msg)) + + command = "mv %s /home/backup" % FinalZipPath + ProcessUtilities.executioner(command) + + ##### CHeck if Backup type is Only Database + if BackupType == 'DataBase Backup': + if (DomainName == "" and int(self.extraArgs['DesSiteID']) != -1): + wpsite = WPSites.objects.get(pk=DesSiteID) + VHuser = wpsite.owner.externalApp + PhpVersion = wpsite.owner.phpSelection + newWPpath = wpsite.path + newurl = wpsite.FinalURL + + ## get WPsite Database name and usr + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + #####Get DBname + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_NAME --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') == -1: + Finaldbname = stdout.rstrip("\n") + else: + raise BaseException(stdout) + + #####Get DBuser + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_USER --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') == -1: + Finaldbuser = stdout.rstrip("\n") + else: + raise BaseException(stdout) + + #####Get DBpsswd + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_PASSWORD --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') == -1: + Finaldbpasswd = stdout.rstrip("\n") + else: + raise BaseException(stdout) + + ### ##Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {wpsite.owner.externalApp}:{wpsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,30') + + #####First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % (VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + # dump Mysql file in unzippath path + unzippathdb = "%s/ab/usr/local/CyberCP/tmp/%s/%s" % (self.tempPath, oldtemppath, DumpFileName) + command = "mysql -u root %s < %s" % (Finaldbname, unzippathdb) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Restoreing Data Base...,70') + #####SetUp DataBase Settings + ##set DBName + command = "sudo -u %s %s /usr/bin/wp config set DB_NAME %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbname, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBuser + command = "sudo -u %s %s /usr/bin/wp config set DB_USER %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbuser, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBpasswd + command = "sudo -u %s %s /usr/bin/wp config set DB_PASSWORD %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbpasswd, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, newWPpath, oldurl, newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, newWPpath, newurl, newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={newWPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + # ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + ###Restart Server + + from plogical.installUtilities import installUtilities + installUtilities.reStartLiteSpeed() + ####Check if BAckup type is Only Webdata + elif BackupType == 'Website Backup': + if (DomainName == "" and int(self.extraArgs['DesSiteID']) != -1): + wpsite = WPSites.objects.get(pk=DesSiteID) + webobj = Websites.objects.get(pk=wpsite.owner_id) + ag = WPSites.objects.filter(owner=webobj).count() + if ag > 0: + ###Website found --> Wpsite Found + finalurl = "%s%s" % (webobj.domain, oldurl[oldurl.find('/'):]) + try: + WPobj = WPSites.objects.get(FinalURL=finalurl, owner=webobj) + ###Website found --> WPsite Found --> Final URL Match + #### Do not create Ne site + ### get WPsite Database name and usr + VHuser = wpsite.owner.externalApp + PhpVersion = WPobj.owner.phpSelection + newWPpath = WPobj.path + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ### Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {wpsite.owner.externalApp}:{wpsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,30') + + ###First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % ( + VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/" % (self.tempPath, oldtemppath) + + command = "sudo -u %s cp -R %s* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s cp -R %s.[^.]* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, newWPpath, oldurl, finalurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, newWPpath, finalurl, finalurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={newWPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + # ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + except: + ####Website found --> WPsite Found --> Final URL Not Match + ####Create new obj and call wordpressnew + Newurl = wpsite.FinalURL + WPpath = wpsite.path + VHuser = wpsite.owner.externalApp + PhpVersion = wpsite.owner.phpSelection + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ### Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {wpsite.owner.externalApp}:{wpsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,30') + + ###First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % ( + VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/" % (self.tempPath, oldtemppath) + + command = "sudo -u %s cp -R %s* %s" % (VHuser, unzippath, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s cp -R %s.[^.]* %s" % (VHuser, unzippath, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, WPpath, oldurl, Newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, WPpath, Newurl, Newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={WPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + # ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + elif (DomainName != "" and int(self.extraArgs['DesSiteID']) == -1): + DataToPass = {} + + DataToPass['title'] = config['WPtitle'] + DataToPass['domain'] = DomainName + DataToPass['WPVersion'] = "6.0" + DataToPass['adminUser'] = config['WebVHuser'] + DataToPass['Email'] = config['WebadminEmail'] + DataToPass['PasswordByPass'] = config['DatabaseUser'] + DataToPass['AutomaticUpdates'] = config['WPAutoUpdates'] + DataToPass['Plugins'] = config['WPPluginUpdates'] + DataToPass['Themes'] = config['WPThemeUpdates'] + DataToPass['websiteOwner'] = WebOwner + DataToPass['package'] = packegs + try: + oldpath = config['WPsitepath'] + abc = oldpath.split("/") + newpath = abc[4] + oldhome = "0" + except BaseException as msg: + oldhome = "1" + + if self.extraArgs['path'] == '': + newurl = DomainName + else: + newurl = "%s/%s" % (DomainName, self.extraArgs['path']) + + DataToPass['path'] = self.extraArgs['path'] + + DataToPass['home'] = self.extraArgs['home'] + + ab = WebsiteManager() + coreResult = ab.submitWorpressCreation(userID, DataToPass) + coreResult1 = json.loads((coreResult).content) + logging.writeToFile("WP Creating website result....%s" % coreResult1) + reutrntempath = coreResult1['tempStatusPath'] + while (1): + lastLine = open(reutrntempath, 'r').read() + logging.writeToFile("Error WP creating lastline ....... %s" % lastLine) + if lastLine.find('[200]') > -1: + break + elif lastLine.find('[404]') > -1: + logging.statusWriter(self.tempStatusPath, + 'Failed to Create WordPress: error: %s. [404]' % lastLine) + return 0 + else: + logging.statusWriter(self.tempStatusPath, 'Creating WordPress....,20') + time.sleep(2) + + logging.statusWriter(self.tempStatusPath, 'Restoring site ....,30') + NewWPsite = WPSites.objects.get(FinalURL=newurl) + VHuser = NewWPsite.owner.externalApp + PhpVersion = NewWPsite.owner.phpSelection + newWPpath = NewWPsite.path + + ###### Same code already used in Existing site + + ### get WPsite Database name and usr + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ### Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {NewWPsite.owner.externalApp}:{NewWPsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,40') + + ###First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % (VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Copying Data File...,60') + ###Copy backup content to newsite + if oldhome == "0": + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/" % (self.tempPath, oldtemppath) + else: + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/public_html/" % ( + self.tempPath, oldtemppath) + + command = "sudo -u %s cp -R %s* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s cp -R %s.[^.]* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, newWPpath, oldurl, newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, newWPpath, newurl, newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={newWPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ###Restart Server + + from plogical.installUtilities import installUtilities + installUtilities.reStartLiteSpeed() + + ####Check if backup type is Both web and DB + else: + ############## Existing site + if (DomainName == "" and int(self.extraArgs['DesSiteID']) != -1): + wpsite = WPSites.objects.get(pk=DesSiteID) + webobj = Websites.objects.get(pk=wpsite.owner_id) + ag = WPSites.objects.filter(owner=webobj).count() + if ag > 0: + ###Website found --> Wpsite Found + finalurl = "%s%s" % (webobj.domain, oldurl[oldurl.find('/'):]) + try: + WPobj = WPSites.objects.get(FinalURL=finalurl, owner=webobj) + ###Website found --> WPsite Found --> Final URL Match + #### Do not create Ne site + ### get WPsite Database name and usr + VHuser = wpsite.owner.externalApp + PhpVersion = WPobj.owner.phpSelection + newWPpath = WPobj.path + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ######Get DBname + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_NAME --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbname = stdout.rstrip("\n") + + ######Get DBuser + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_USER --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbuser = stdout.rstrip("\n") + + #####Get DBpsswd + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_PASSWORD --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbpasswd = stdout.rstrip("\n") + + ### Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {wpsite.owner.externalApp}:{wpsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,30') + + ###First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % ( + VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/" % (self.tempPath, oldtemppath) + + command = "sudo -u %s cp -R %s* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s cp -R %s.[^.]* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + # dump Mysql file in unzippath path + unzippath2 = "%s/ab/usr/local/CyberCP/tmp/%s/%s" % ( + self.tempPath, oldtemppath, DumpFileName) + command = "mysql -u root %s < %s" % (Finaldbname, unzippath2) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Restoreing Data Base...,70') + #####SetUp DataBase Settings + ##set DBName + command = "sudo -u %s %s /usr/bin/wp config set DB_NAME %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbname, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBuser + command = "sudo -u %s %s /usr/bin/wp config set DB_USER %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbuser, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBpasswd + command = "sudo -u %s %s /usr/bin/wp config set DB_PASSWORD %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbpasswd, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, newWPpath, oldurl, finalurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, newWPpath, finalurl, finalurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={newWPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + # ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + except: + ####Website found --> WPsite Found --> Final URL Not Match + ####Create new obj and call wordpressnew + Newurl = wpsite.FinalURL + WPpath = wpsite.path + VHuser = wpsite.owner.externalApp + PhpVersion = wpsite.owner.phpSelection + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ######Get DBname + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_NAME --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, WPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbname = stdout.rstrip("\n") + + ######Get DBuser + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_USER --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, WPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbuser = stdout.rstrip("\n") + + #####Get DBpsswd + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_PASSWORD --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, WPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbpasswd = stdout.rstrip("\n") + + ### Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {wpsite.owner.externalApp}:{wpsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,30') + + ###First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % ( + VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/" % (self.tempPath, oldtemppath) + + command = "sudo -u %s cp -R %s* %s" % (VHuser, unzippath, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s cp -R %s.[^.]* %s" % (VHuser, unzippath, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + # dump Mysql file in unzippath path + unzippath2 = "%s/ab/usr/local/CyberCP/tmp/%s/%s" % ( + self.tempPath, oldtemppath, DumpFileName) + command = "mysql -u root %s < %s" % (Finaldbname, unzippath2) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Restoreing Data Base...,70') + #####SetUp DataBase Settings + ##set DBName + command = "sudo -u %s %s /usr/bin/wp config set DB_NAME %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbname, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBuser + command = "sudo -u %s %s /usr/bin/wp config set DB_USER %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbuser, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBpasswd + command = "sudo -u %s %s /usr/bin/wp config set DB_PASSWORD %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbpasswd, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, WPpath, oldurl, Newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, WPpath, Newurl, Newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={WPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + # ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + ############## New Site + elif (DomainName != "" and int(self.extraArgs['DesSiteID']) == -1): + ###############Create New WordPressSite First + # logging.writeToFile("New Website Domain ....... %s" % str(DomainName)) + # logging.writeToFile("New Website Domain path....... %s" % str(self.extraArgs['path'])) + DataToPass = {} + + DataToPass['title'] = config['WPtitle'] + DataToPass['domain'] = DomainName + DataToPass['WPVersion'] = "6.0" + DataToPass['adminUser'] = config['WebVHuser'] + DataToPass['Email'] = config['WebadminEmail'] + DataToPass['PasswordByPass'] = config['DatabaseUser'] + DataToPass['AutomaticUpdates'] = config['WPAutoUpdates'] + DataToPass['Plugins'] = config['WPPluginUpdates'] + DataToPass['Themes'] = config['WPThemeUpdates'] + DataToPass['websiteOwner'] = WebOwner + DataToPass['package'] = packegs + try: + oldpath = config['WPsitepath'] + abc = oldpath.split("/") + newpath = abc[4] + oldhome = "0" + except BaseException as msg: + oldhome = "1" + + if self.extraArgs['path'] == '': + newurl = DomainName + else: + newurl = "%s/%s" % (DomainName, self.extraArgs['path']) + + DataToPass['path'] = self.extraArgs['path'] + + DataToPass['home'] = self.extraArgs['home'] + + ab = WebsiteManager() + coreResult = ab.submitWorpressCreation(userID, DataToPass) + coreResult1 = json.loads((coreResult).content) + logging.writeToFile("WP Creating website result....%s" % coreResult1) + reutrntempath = coreResult1['tempStatusPath'] + while (1): + lastLine = open(reutrntempath, 'r').read() + logging.writeToFile("Error WP creating lastline ....... %s" % lastLine) + if lastLine.find('[200]') > -1: + break + elif lastLine.find('[404]') > -1: + logging.statusWriter(self.tempStatusPath, + 'Failed to Create WordPress: error: %s. [404]' % lastLine) + return 0 + else: + logging.statusWriter(self.tempStatusPath, 'Creating WordPress....,20') + time.sleep(2) + + logging.statusWriter(self.tempStatusPath, 'Restoring site ....,30') + logging.writeToFile("Create site url =%s" % newurl) + NewWPsite = WPSites.objects.get(FinalURL=newurl) + VHuser = NewWPsite.owner.externalApp + PhpVersion = NewWPsite.owner.phpSelection + newWPpath = NewWPsite.path + + ###### Same code already used in Existing site + + ### get WPsite Database name and usr + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ######Get DBname + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_NAME --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbname = stdout.rstrip("\n") + + ######Get DBuser + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_USER --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbuser = stdout.rstrip("\n") + + #####Get DBpsswd + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_PASSWORD --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbpasswd = stdout.rstrip("\n") + + ### Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {NewWPsite.owner.externalApp}:{NewWPsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,40') + + ###First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % (VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Copying Data File...,60') + ###Copy backup content to newsite + if oldhome == "0": + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/" % (self.tempPath, oldtemppath) + else: + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/public_html/" % ( + self.tempPath, oldtemppath) + + command = "sudo -u %s cp -R %s* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s cp -R %s.[^.]* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + # dump Mysql file in unzippath path + unzippath2 = "%s/ab/usr/local/CyberCP/tmp/%s/%s" % (self.tempPath, oldtemppath, DumpFileName) + command = "mysql -u root %s < %s" % (Finaldbname, unzippath2) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Restoreing Data Base...,80') + #####SetUp DataBase Settings + ##set DBName + command = "sudo -u %s %s /usr/bin/wp config set DB_NAME %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbname, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBuser + command = "sudo -u %s %s /usr/bin/wp config set DB_USER %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbuser, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBpasswd + command = "sudo -u %s %s /usr/bin/wp config set DB_PASSWORD %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbpasswd, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, newWPpath, oldurl, newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, newWPpath, newurl, newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={newWPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ###Restart Server + + from plogical.installUtilities import installUtilities + installUtilities.reStartLiteSpeed() #####Local BAckups else: diff --git a/plogical/test.py b/plogical/test.py index e69de29bb..93258abd8 100644 --- a/plogical/test.py +++ b/plogical/test.py @@ -0,0 +1,9 @@ +config= { + "name": "habi", + "dev": "python" +} + +print(config) +config['klm'] ="tls" + +print(config) \ No newline at end of file diff --git a/websiteFunctions/static/websiteFunctions/websiteFunctions.js b/websiteFunctions/static/websiteFunctions/websiteFunctions.js index c743a525d..7542b08a8 100755 --- a/websiteFunctions/static/websiteFunctions/websiteFunctions.js +++ b/websiteFunctions/static/websiteFunctions/websiteFunctions.js @@ -1961,9 +1961,11 @@ app.controller('RestoreWPBackup', function ($scope, $http, $timeout, $window) { function DeleteBackupConfigNow(url) { window.location.href = url; } + function DeleteRemoteBackupsiteNow(url) { window.location.href = url; } + function DeleteBackupfileConfigNow(url) { window.location.href = url; } @@ -1972,15 +1974,47 @@ function DeleteBackupfileConfigNow(url) { app.controller('RemoteBackupConfig', function ($scope, $http, $timeout, $window) { $scope.RemoteBackupLoading = true; $scope.SFTPBackUpdiv = true; - $scope.S3backupdiv = true; + + $scope.EndpointURLdiv = true; + $scope.Selectprovider = true; + $scope.S3keyNamediv = true; + $scope.Accesskeydiv = true; + $scope.SecretKeydiv = true; $scope.SelectRemoteBackuptype = function () { var val = $scope.RemoteBackuptype; if (val == "SFTP") { $scope.SFTPBackUpdiv = false; - $scope.S3backupdiv = true; - } else { - $scope.S3backupdiv = false; + $scope.EndpointURLdiv = true; + $scope.Selectprovider = true; + $scope.S3keyNamediv = true; + $scope.Accesskeydiv = true; + $scope.SecretKeydiv = true; + } else if (val == "S3") { + $scope.EndpointURLdiv = true; + $scope.Selectprovider = false; + $scope.S3keyNamediv = false; + $scope.Accesskeydiv = false; + $scope.SecretKeydiv = false; $scope.SFTPBackUpdiv = true; + } else { + $scope.RemoteBackupLoading = true; + $scope.SFTPBackUpdiv = true; + + $scope.EndpointURLdiv = true; + $scope.Selectprovider = true; + $scope.S3keyNamediv = true; + $scope.Accesskeydiv = true; + $scope.SecretKeydiv = true; + } + } + + $scope.SelectProvidertype = function () { + $scope.EndpointURLdiv = true; + var provider = $scope.Providervalue + if (provider == 'Backblaze') { + $scope.EndpointURLdiv = false; + } else { + $scope.EndpointURLdiv = true; } } @@ -1991,65 +2025,87 @@ app.controller('RemoteBackupConfig', function ($scope, $http, $timeout, $window) var Passwd = $scope.Password; var path = $scope.path; var type = $scope.RemoteBackuptype; - + var Providervalue = $scope.Providervalue; + var data; if (type == "SFTP") { - var data = { + data = { Hname: Hname, Uname: Uname, Passwd: Passwd, path: path, type: type } - var url = "/websites/SaveBackupConfig"; - - - var config = { - headers: { - 'X-CSRFToken': getCookie('csrftoken') + } else if (type == "S3") { + if (Providervalue == "Backblaze") { + data = { + S3keyname: $scope.S3keyName, + Provider: Providervalue, + AccessKey: $scope.Accesskey, + SecertKey: $scope.SecretKey, + EndUrl: $scope.EndpointURL, + type: type } - }; - $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); - - - function ListInitialDatas(response) { - $scope.RemoteBackupLoading = true; - if (response.data.status === 1) { - new PNotify({ - title: 'Success!', - text: 'Successfully Saved!.', - type: 'success' - }); - location.reload(); - - - } else { - new PNotify({ - title: 'Error!', - text: response.data.error_message, - type: 'error' - }); + } else { + data = { + S3keyname: $scope.S3keyName, + Provider: Providervalue, + AccessKey: $scope.Accesskey, + SecertKey: $scope.SecretKey, + type: type } + } - function cantLoadInitialDatas(response) { - $scope.RemoteBackupLoading = true; + } + var url = "/websites/SaveBackupConfig"; + + + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + $scope.RemoteBackupLoading = true; + if (response.data.status === 1) { new PNotify({ - title: 'Operation Failed!', + title: 'Success!', + text: 'Successfully Saved!.', + type: 'success' + }); + location.reload(); + + + } else { + new PNotify({ + title: 'Error!', text: response.data.error_message, type: 'error' }); - - } } + function cantLoadInitialDatas(response) { + $scope.RemoteBackupLoading = true; + new PNotify({ + title: 'Operation Failed!', + text: response.data.error_message, + type: 'error' + }); + + + } + } }); - +var UpdatescheduleID; app.controller('BackupSchedule', function ($scope, $http, $timeout, $window) { $scope.BackupScheduleLoading = true; $scope.SaveBackupSchedule = function () { @@ -2062,7 +2118,7 @@ app.controller('BackupSchedule', function ($scope, $http, $timeout, $window) { FileRetention: FileRetention, Backfrequency: Backfrequency, ScheduleName: $scope.ScheduleName, - RemoteConfigID : $('#RemoteConfigID').html(), + RemoteConfigID: $('#RemoteConfigID').html(), BackupType: $scope.BackupType } var url = "/websites/SaveBackupSchedule"; @@ -2108,17 +2164,73 @@ app.controller('BackupSchedule', function ($scope, $http, $timeout, $window) { } + }; + + + $scope.getupdateid = function (ID) { + UpdatescheduleID = ID; } + $scope.UpdateRemoteschedules = function () { + $scope.RemoteBackupLoading = false; + var Frequency = $scope.RemoteFrequency; + var fretention = $scope.RemoteFileretention; + + var data = { + ScheduleID: UpdatescheduleID, + Frequency: Frequency, + FileRetention: fretention + } + var url = "/websites/UpdateRemoteschedules"; + + + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + $scope.RemoteBackupLoading = true; + if (response.data.status === 1) { + new PNotify({ + title: 'Success!', + text: 'Successfully Updated!.', + type: 'success' + }); + location.reload(); + + + } else { + new PNotify({ + title: 'Error!', + text: response.data.error_message, + type: 'error' + }); + } + } + + function cantLoadInitialDatas(response) { + $scope.RemoteBackupLoading = true; + new PNotify({ + title: 'Operation Failed!', + text: response.data.error_message, + type: 'error' + }); + + + } + }; $scope.AddWPsiteforRemoteBackup = function () { $scope.RemoteBackupLoading = false; - var data = { - WpsiteID: $('#Wpsite').val(), - RemoteScheduleID : $('#RemoteScheduleID').html() + WpsiteID: $('#Wpsite').val(), + RemoteScheduleID: $('#RemoteScheduleID').html() } var url = "/websites/AddWPsiteforRemoteBackup"; @@ -2163,7 +2275,7 @@ app.controller('BackupSchedule', function ($scope, $http, $timeout, $window) { } - } + }; }); /* Java script code to create account */ app.controller('createWebsite', function ($scope, $http, $timeout, $window) { diff --git a/websiteFunctions/templates/websiteFunctions/BackupfileConfig.html b/websiteFunctions/templates/websiteFunctions/BackupfileConfig.html index c57fb4064..8824c3035 100644 --- a/websiteFunctions/templates/websiteFunctions/BackupfileConfig.html +++ b/websiteFunctions/templates/websiteFunctions/BackupfileConfig.html @@ -27,6 +27,7 @@ + @@ -86,6 +87,10 @@ ID Schedule Name + Backup Frequency + Backup File Retention + + Last Run Remote Configuration Action @@ -97,6 +102,9 @@ {{ sub.id }} {{ sub.Name }} + {{ sub.Frequency }} + {{ sub.Retention }} + {{ sub.LastRun }} {{ sub.RemoteConfiguration }} + Add WordPress Sites @@ -117,6 +130,68 @@ + + diff --git a/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html b/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html index 5b18dc1f3..127c19ffd 100644 --- a/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html +++ b/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html @@ -30,6 +30,7 @@ @@ -68,8 +69,45 @@ -
- S3 BAckups + +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
@@ -93,30 +131,31 @@ Backup Type HostName - Path + Path / Key Name Action - + {% for sub in backupconfigs %} - - {{ sub.Type }} - {{ sub.HostName }} - {{ sub.Path }} - - + {{ sub.Type }} + {{ sub.HostName }} + {{ sub.Path }} + + + - Schedule Backups - - + type="button" class="btn btn-border btn-alt border-green btn-link font-green"> + Schedule Backups + + {% endfor %} @@ -124,7 +163,6 @@
- diff --git a/websiteFunctions/urls.py b/websiteFunctions/urls.py index 9d812686a..6a97fe0df 100755 --- a/websiteFunctions/urls.py +++ b/websiteFunctions/urls.py @@ -52,6 +52,7 @@ urlpatterns = [ url(r'^SaveBackupConfig', views.SaveBackupConfig, name='SaveBackupConfig'), url(r'^SaveBackupSchedule', views.SaveBackupSchedule, name='SaveBackupSchedule'), url(r'^AddWPsiteforRemoteBackup', views.AddWPsiteforRemoteBackup, name='AddWPsiteforRemoteBackup'), + url(r'^UpdateRemoteschedules', views.UpdateRemoteschedules, name='UpdateRemoteschedules'), diff --git a/websiteFunctions/views.py b/websiteFunctions/views.py index 96bc48d33..7c93504c0 100755 --- a/websiteFunctions/views.py +++ b/websiteFunctions/views.py @@ -502,6 +502,27 @@ def AddWPsiteforRemoteBackup(request): return redirect(loadLoginPage) +def UpdateRemoteschedules(request): + try: + userID = request.session['userID'] + + result = pluginManager.preWebsiteCreation(request) + if result != 200: + return result + + wm = WebsiteManager() + coreResult = wm.UpdateRemoteschedules(userID, json.loads(request.body)) + + result = pluginManager.postWebsiteCreation(request, coreResult) + if result != 200: + return result + + return coreResult + + except KeyError: + return redirect(loadLoginPage) + + def installwpcore(request): try: userID = request.session['userID'] diff --git a/websiteFunctions/website.py b/websiteFunctions/website.py index 30799a0eb..ac3951d40 100755 --- a/websiteFunctions/website.py +++ b/websiteFunctions/website.py @@ -25,6 +25,7 @@ from plogical.mailUtilities import mailUtilities from random import randint import time import re +import boto3 from plogical.childDomain import ChildDomainManager from math import ceil from plogical.alias import AliasManager @@ -222,12 +223,30 @@ class WebsiteManager: Data['backupconfigs'] =[] for i in allcon: configr = json.loads(i.config) - Data['backupconfigs'].append({ - 'id':i.pk, - 'Type': i.configtype, - 'HostName': configr['Hostname'], - 'Path': configr['Path'] - }) + if i.configtype == "SFTP": + Data['backupconfigs'].append({ + 'id': i.pk, + 'Type': i.configtype, + 'HostName': configr['Hostname'], + 'Path': configr['Path'] + }) + elif i.configtype == "S3": + Provider = configr['Provider'] + if Provider == "Backblaze": + Data['backupconfigs'].append({ + 'id': i.pk, + 'Type': i.configtype, + 'HostName': Provider, + 'Path': configr['S3keyname'] + }) + else: + Data['backupconfigs'].append({ + 'id': i.pk, + 'Type': i.configtype, + 'HostName': Provider, + 'Path': configr['S3keyname'] + }) + proc = httpProc(request, 'websiteFunctions/RemoteBackupConfig.html', Data, 'createWebsite') return proc.render() @@ -254,10 +273,15 @@ class WebsiteManager: allsechedule = RemoteBackupSchedule.objects.filter(RemoteBackupConfig=RemoteConfigobj) Data['Backupschedule'] = [] for i in allsechedule: + lastrun = i.lastrun + LastRun = time.strftime('%Y-%m-%d', time.localtime(float(lastrun))) Data['Backupschedule'].append({ 'id': i.pk, 'Name': i.Name, - 'RemoteConfiguration': i.RemoteBackupConfig.configtype + 'RemoteConfiguration': i.RemoteBackupConfig.configtype, + 'Retention': i.fileretention, + 'Frequency': i.timeintervel, + 'LastRun': LastRun }) proc = httpProc(request, 'websiteFunctions/BackupfileConfig.html', Data, 'createWebsite') @@ -1148,8 +1172,37 @@ class WebsiteManager: "Password": Passwd, "Path": path } - mkobj = RemoteBackupConfig(owner=admin, configtype=ConfigType, config=json.dumps(config)) - mkobj.save() + elif ConfigType == "S3": + Provider = data['Provider'] + if Provider == "Backblaze": + S3keyname = data['S3keyname'] + SecertKey = data['SecertKey'] + AccessKey = data['AccessKey'] + EndUrl = data['EndUrl'] + config = { + "Provider": Provider, + "S3keyname": S3keyname, + "SecertKey": SecertKey, + "AccessKey": AccessKey, + "EndUrl": EndUrl + + } + else: + S3keyname = data['S3keyname'] + SecertKey = data['SecertKey'] + AccessKey = data['AccessKey'] + config = { + "Provider": Provider, + "S3keyname": S3keyname, + "SecertKey": SecertKey, + "AccessKey": AccessKey, + + } + + + + mkobj = RemoteBackupConfig(owner=admin, configtype=ConfigType, config=json.dumps(config)) + mkobj.save() time.sleep(1) @@ -1174,11 +1227,46 @@ class WebsiteManager: ScheduleName = data['ScheduleName'] RemoteConfigID = data['RemoteConfigID'] BackupType = data['BackupType'] - config = { - 'BackupType': BackupType - } + RemoteBackupConfigobj = RemoteBackupConfig.objects.get(pk=RemoteConfigID) + Rconfig = json.loads(RemoteBackupConfigobj.config) + provider = Rconfig['Provider'] + if provider == "Backblaze": + EndURl = Rconfig['EndUrl'] + elif provider == "Amazon": + EndURl = "https://s3.us-east-1.amazonaws.com" + elif provider == "Wasabi": + EndURl = "https://s3.wasabisys.com" + + AccessKey = Rconfig['AccessKey'] + SecertKey = Rconfig['SecertKey'] + + session = boto3.session.Session() + + client = session.client( + 's3', + endpoint_url=EndURl, + aws_access_key_id=AccessKey, + aws_secret_access_key=SecertKey, + verify=False + ) + + ############Creating Bucket + BucketName = randomPassword.generate_pass().lower() + + try: + client.create_bucket(Bucket=BucketName) + except BaseException as msg: + logging.CyberCPLogFileWriter.writeToFile("Creating Bucket Error: %s"%str(msg)) + data_ret = {'status': 0, 'error_message': str(msg)} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + config = { + 'BackupType': BackupType, + 'BucketName': BucketName + } svobj = RemoteBackupSchedule( RemoteBackupConfig=RemoteBackupConfigobj, Name=ScheduleName, timeintervel=Backfrequency, fileretention=FileRetention, config=json.dumps(config), @@ -1241,6 +1329,30 @@ class WebsiteManager: return HttpResponse(json_data) + def UpdateRemoteschedules(self, userID=None, data=None): + try: + + currentACL = ACLManager.loadedACL(userID) + admin = Administrator.objects.get(pk=userID) + ScheduleID = data['ScheduleID'] + Frequency = data['Frequency'] + FileRetention = data['FileRetention'] + + scheduleobj = RemoteBackupSchedule.objects.get(pk=ScheduleID) + scheduleobj.timeintervel = Frequency + scheduleobj.fileretention = FileRetention + scheduleobj.save() + + data_ret = {'status': 1, 'error_message': 'None',} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + except BaseException as msg: + data_ret = {'status': 0, 'error_message': str(msg)} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + def installwpcore(self, userID=None, data=None): try: