File manager - Edit - /usr/local/CyberCP/cyberpanel/IncBackups/views.py
Back
import json import os import stat import time from pathlib import Path from random import randint from django.shortcuts import HttpResponse, redirect from backup.backupManager import BackupManager from loginSystem.models import Administrator from loginSystem.views import loadLoginPage from plogical.Backupsv2 import CPBackupsV2 from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging from plogical.acl import ACLManager from plogical.httpProc import httpProc from plogical.processUtilities import ProcessUtilities as pu from plogical.virtualHostUtilities import virtualHostUtilities as vhu from websiteFunctions.models import Websites from .IncBackupProvider import IncBackupProvider from .IncBackupPath import IncBackupPath from .IncBackupsControl import IncJobs from .models import IncJob, BackupJob, JobSites def def_renderer(request, templateName, args, context=None): proc = httpProc(request, templateName, args, context) return proc.render() def _get_destinations(local: bool = False): destinations = [] if local: destinations.append('local') path = Path(IncBackupPath.SFTP.value) if path.exists(): for item in path.iterdir(): destinations.append('sftp:%s' % item.name) path = Path(IncBackupPath.AWS.value) if path.exists(): for item in path.iterdir(): destinations.append('s3:s3.amazonaws.com/%s' % item.name) return destinations def _get_user_acl(request): user_id = request.session['userID'] current_acl = ACLManager.loadedACL(user_id) return user_id, current_acl def create_backup(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'createBackup') == 0: return ACLManager.loadError() websites = ACLManager.findAllSites(current_acl, user_id) destinations = _get_destinations(local=True) return def_renderer(request, 'IncBackups/createBackup.html', {'websiteList': websites, 'destinations': destinations}, 'createBackup') except BaseException as msg: logging.writeToFile(str(msg)) return redirect(loadLoginPage) def backup_destinations(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'addDeleteDestinations') == 0: return ACLManager.loadError() return def_renderer(request, 'IncBackups/incrementalDestinations.html', {}, 'addDeleteDestinations') except BaseException as msg: logging.writeToFile(str(msg)) return redirect(loadLoginPage) def add_destination(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'addDeleteDestinations') == 0: return ACLManager.loadErrorJson('destStatus', 0) data = json.loads(request.body) if data['type'].lower() == IncBackupProvider.SFTP.name.lower(): path = Path(IncBackupPath.SFTP.value) path.mkdir(exist_ok=True) ip_address = data['IPAddress'] password = data['password'] address_file = path / ip_address port = data.get('backupSSHPort', '22') if address_file.exists(): final_dic = {'status': 0, 'error_message': 'This destination already exists.'} final_json = json.dumps(final_dic) return HttpResponse(final_json) python_path = Path('/usr/local/CyberCP/bin/python') backup_utils = Path(vhu.cyberPanel) / "plogical/backupUtilities.py" exec_args = "submitDestinationCreation --ipAddress %s --password %s --port %s --user %s" % \ (ip_address, password, port, 'root') exec_cmd = "%s %s %s" % (python_path, backup_utils, exec_args) if Path(pu.debugPath).exists(): logging.writeToFile(exec_cmd) output = pu.outputExecutioner(exec_cmd) if Path(pu.debugPath).exists(): logging.writeToFile(output) if output.find('1,') > -1: content = '%s\n%s' % (ip_address, port) with open(address_file, 'w') as outfile: outfile.write(content) command = 'cat /root/.ssh/config' current_config = pu.outputExecutioner(command) tmp_file = '/home/cyberpanel/sshconfig' with open(tmp_file, 'w') as outfile: if current_config.find('cat') == -1: outfile.write(current_config) content = "Host %s\n" \ " IdentityFile ~/.ssh/cyberpanel\n" \ " Port %s\n" % (ip_address, port) if current_config.find(ip_address) == -1: outfile.write(content) command = 'mv %s /root/.ssh/config' % tmp_file pu.executioner(command) command = 'chown root:root /root/.ssh/config' pu.executioner(command) final_dic = {'status': 1, 'error_message': 'None'} else: final_dic = {'status': 0, 'error_message': output} final_json = json.dumps(final_dic) return HttpResponse(final_json) if data['type'].lower() == IncBackupProvider.AWS.name.lower(): path = Path(IncBackupPath.AWS.value) path.mkdir(exist_ok=True) access_key = data['AWS_ACCESS_KEY_ID'] secret_key = data['AWS_SECRET_ACCESS_KEY'] aws_file = path / access_key with open(aws_file, 'w') as outfile: outfile.write(secret_key) aws_file.chmod(stat.S_IRUSR | stat.S_IWUSR) final_dic = {'status': 1} final_json = json.dumps(final_dic) return HttpResponse(final_json) except BaseException as msg: final_dic = {'status': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def populate_current_records(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'addDeleteDestinations') == 0: return ACLManager.loadErrorJson('fetchStatus', 0) data = json.loads(request.body) json_data = [] if data['type'].lower() == IncBackupProvider.SFTP.name.lower(): path = Path(IncBackupPath.SFTP.value) if path.exists(): for item in path.iterdir(): with open(item, 'r') as infile: _file = infile.readlines() json_data.append({ 'ip': _file[0].strip('\n'), 'port': _file[1], }) else: final_json = json.dumps({'status': 1, 'error_message': "None", "data": ''}) return HttpResponse(final_json) if data['type'].lower() == IncBackupProvider.AWS.name.lower(): path = Path(IncBackupPath.AWS.value) if path.exists(): for item in path.iterdir(): json_data.append({'AWS_ACCESS_KEY_ID': item.name}) else: final_json = json.dumps({'status': 1, 'error_message': "None", "data": ''}) return HttpResponse(final_json) final_json = json.dumps({'status': 1, 'error_message': "None", "data": json_data}) return HttpResponse(final_json) except BaseException as msg: final_dic = {'status': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def remove_destination(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'addDeleteDestinations') == 0: return ACLManager.loadErrorJson('destStatus', 0) data = json.loads(request.body) if 'IPAddress' in data: file_name = data['IPAddress'] if data['type'].lower() == IncBackupProvider.SFTP.name.lower(): dest_file = Path(IncBackupPath.SFTP.value) / file_name dest_file.unlink() if data['type'].lower() == IncBackupProvider.AWS.name.lower(): dest_file = Path(IncBackupPath.AWS.value) / file_name dest_file.unlink() final_dic = {'status': 1, 'error_message': 'None'} final_json = json.dumps(final_dic) return HttpResponse(final_json) except BaseException as msg: final_dic = {'destStatus': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def fetch_current_backups(request): try: user_id, current_acl = _get_user_acl(request) admin = Administrator.objects.get(pk=user_id) data = json.loads(request.body) backup_domain = data['websiteToBeBacked'] if ACLManager.checkOwnership(backup_domain, admin, current_acl) == 1: pass else: return ACLManager.loadErrorJson('fetchStatus', 0) if 'backupDestinations' in data: backup_destinations = data['backupDestinations'] extra_args = {'website': backup_domain, 'backupDestinations': backup_destinations} if 'password' in data: extra_args['password'] = data['password'] else: final_json = json.dumps({'status': 0, 'error_message': "Please supply the password."}) return HttpResponse(final_json) start_job = IncJobs('Dummy', extra_args) return start_job.fetchCurrentBackups() else: website = Websites.objects.get(domain=backup_domain) backups = website.incjob_set.all() json_data = [] for backup in reversed(backups): snapshots = [] jobs = backup.jobsnapshots_set.all() for job in jobs: snapshots.append({'type': job.type, 'snapshotid': job.snapshotid, 'destination': job.destination}) json_data.append({'id': backup.id, 'date': str(backup.date), 'snapshots': snapshots }) final_json = json.dumps({'status': 1, 'error_message': "None", "data": json_data}) return HttpResponse(final_json) except BaseException as msg: final_dic = {'status': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def submit_backup_creation(request): try: user_id, current_acl = _get_user_acl(request) admin = Administrator.objects.get(pk=user_id) data = json.loads(request.body) backup_domain = data['websiteToBeBacked'] backup_destinations = data['backupDestinations'] if ACLManager.checkOwnership(backup_domain, admin, current_acl) == 1: pass else: return ACLManager.loadErrorJson('metaStatus', 0) temp_path = Path("/home/cyberpanel/") / str(randint(1000, 9999)) extra_args = {} extra_args['website'] = backup_domain extra_args['tempPath'] = str(temp_path) extra_args['backupDestinations'] = backup_destinations extra_args['websiteData'] = data['websiteData'] if 'websiteData' in data else False extra_args['websiteEmails'] = data['websiteEmails'] if 'websiteEmails' in data else False extra_args['websiteSSLs'] = data['websiteSSLs'] if 'websiteSSLs' in data else False extra_args['websiteDatabases'] = data['websiteDatabases'] if 'websiteDatabases' in data else False start_job = IncJobs('createBackup', extra_args) start_job.start() time.sleep(2) final_json = json.dumps({'status': 1, 'error_message': "None", 'tempPath': str(temp_path)}) return HttpResponse(final_json) except BaseException as msg: logging.writeToFile(str(msg)) final_dic = {'status': 0, 'metaStatus': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def get_backup_status(request): try: data = json.loads(request.body) status = data['tempPath'] backup_domain = data['websiteToBeBacked'] user_id, current_acl = _get_user_acl(request) admin = Administrator.objects.get(pk=user_id) if ACLManager.checkOwnership(backup_domain, admin, current_acl) == 1: pass else: return ACLManager.loadErrorJson('fetchStatus', 0) if ACLManager.CheckStatusFilleLoc(status): pass else: data_ret = {'abort': 1, 'installStatus': 0, 'installationProgress': "100", 'currentStatus': 'Invalid status file.'} json_data = json.dumps(data_ret) return HttpResponse(json_data) ## file name read ends if os.path.exists(status): command = "cat " + status result = pu.outputExecutioner(command, 'cyberpanel') if result.find("Completed") > -1: ### Removing Files os.remove(status) final_json = json.dumps( {'backupStatus': 1, 'error_message': "None", "status": result, "abort": 1}) return HttpResponse(final_json) elif result.find("[5009]") > -1: ## removing status file, so that backup can re-run try: os.remove(status) except: pass final_json = json.dumps( {'backupStatus': 1, 'error_message': "None", "status": result, "abort": 1}) return HttpResponse(final_json) else: final_json = json.dumps( {'backupStatus': 1, 'error_message': "None", "status": result, "abort": 0}) return HttpResponse(final_json) else: final_json = json.dumps({'backupStatus': 1, 'error_message': "None", "status": 1, "abort": 0}) return HttpResponse(final_json) except BaseException as msg: final_dic = {'backupStatus': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) logging.writeToFile(str(msg) + " [backupStatus]") return HttpResponse(final_json) def delete_backup(request): try: user_id, current_acl = _get_user_acl(request) admin = Administrator.objects.get(pk=user_id) data = json.loads(request.body) backup_domain = data['websiteToBeBacked'] if ACLManager.checkOwnership(backup_domain, admin, current_acl) == 1: pass else: return ACLManager.loadErrorJson('fetchStatus', 0) backup_id = data['backupID'] inc_job = IncJob.objects.get(id=backup_id) job = IncJobs(None, None) job.DeleteSnapShot(inc_job) inc_job.delete() final_dic = {'status': 1, 'error_message': 'None'} final_json = json.dumps(final_dic) return HttpResponse(final_json) except BaseException as msg: final_dic = {'destStatus': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def fetch_restore_points(request): try: user_id, current_acl = _get_user_acl(request) admin = Administrator.objects.get(pk=user_id) data = json.loads(request.body) backup_domain = data['websiteToBeBacked'] if ACLManager.checkOwnership(backup_domain, admin, current_acl) == 1: pass else: return ACLManager.loadErrorJson('fetchStatus', 0) data = json.loads(request.body) job_id = data['id'] inc_job = IncJob.objects.get(id=job_id) backups = inc_job.jobsnapshots_set.all() json_data = [] for items in backups: json_data.append({'id': items.id, 'snapshotid': items.snapshotid, 'type': items.type, 'destination': items.destination, }) final_json = json.dumps({'status': 1, 'error_message': "None", "data": json_data}) return HttpResponse(final_json) except BaseException as msg: final_dic = {'status': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def restore_point(request): try: user_id, current_acl = _get_user_acl(request) admin = Administrator.objects.get(pk=user_id) data = json.loads(request.body) backup_domain = data['websiteToBeBacked'] job_id = data['jobid'] if ACLManager.checkOwnership(backup_domain, admin, current_acl) == 1: pass else: return ACLManager.loadErrorJson('metaStatus', 0) temp_path = Path("/home/cyberpanel/") / str(randint(1000, 9999)) if data['reconstruct'] == 'remote': extraArgs = {} extraArgs['website'] = backup_domain extraArgs['jobid'] = job_id extraArgs['tempPath'] = str(temp_path) extraArgs['reconstruct'] = data['reconstruct'] extraArgs['backupDestinations'] = data['backupDestinations'] extraArgs['password'] = data['password'] extraArgs['path'] = data['path'] else: extraArgs = {} extraArgs['website'] = backup_domain extraArgs['jobid'] = job_id extraArgs['tempPath'] = str(temp_path) extraArgs['reconstruct'] = data['reconstruct'] start_job = IncJobs('restorePoint', extraArgs) start_job.start() time.sleep(2) final_json = json.dumps({'status': 1, 'error_message': "None", 'tempPath': str(temp_path)}) return HttpResponse(final_json) except BaseException as msg: logging.writeToFile(str(msg)) final_dic = {'status': 0, 'metaStatus': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def schedule_backups(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'scheduleBackups') == 0: return ACLManager.loadError() websites = ACLManager.findAllSites(current_acl, user_id) destinations = _get_destinations(local=True) return def_renderer(request, 'IncBackups/backupSchedule.html', {'websiteList': websites, 'destinations': destinations}, 'scheduleBackups') except BaseException as msg: logging.writeToFile(str(msg)) return redirect(loadLoginPage) def submit_backup_schedule(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'scheduleBackups') == 0: return ACLManager.loadErrorJson('scheduleStatus', 0) data = json.loads(request.body) backup_dest = data['backupDestinations'] backup_freq = data['backupFreq'] backup_retention = data['backupRetention'] backup_sites = data['websitesToBeBacked'] backup_data = 1 if 'websiteData' in data else 0 backup_emails = 1 if 'websiteEmails' in data else 0 backup_databases = 1 if 'websiteDatabases' in data else 0 backup_job = BackupJob(websiteData=backup_data, websiteDataEmails=backup_emails, websiteDatabases=backup_databases, destination=backup_dest, frequency=backup_freq, retention=backup_retention) backup_job.save() for site in backup_sites: backup_site_job = JobSites(job=backup_job, website=site) backup_site_job.save() final_json = json.dumps({'status': 1, 'error_message': "None"}) return HttpResponse(final_json) except BaseException as msg: final_json = json.dumps({'status': 0, 'error_message': str(msg)}) return HttpResponse(final_json) def get_current_backup_schedules(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'scheduleBackups') == 0: return ACLManager.loadErrorJson('fetchStatus', 0) records = BackupJob.objects.all() json_data = [] for items in records: json_data.append({'id': items.id, 'destination': items.destination, 'frequency': items.frequency, 'retention': items.retention, 'numberOfSites': items.jobsites_set.all().count() }) final_json = json.dumps({'status': 1, 'error_message': "None", "data": json_data}) return HttpResponse(final_json) except BaseException as msg: final_dic = {'status': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def fetch_sites(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'scheduleBackups') == 0: return ACLManager.loadErrorJson('fetchStatus', 0) data = json.loads(request.body) job = BackupJob.objects.get(pk=data['id']) json_data = [] for jobsite in job.jobsites_set.all(): json_data.append({'id': jobsite.id, 'website': jobsite.website, }) final_json = json.dumps({'status': 1, 'error_message': "None", "data": json_data, 'websiteData': job.websiteData, 'websiteDatabases': job.websiteDatabases, 'websiteEmails': job.websiteDataEmails}) return HttpResponse(final_json) except BaseException as msg: final_dic = {'status': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def schedule_delete(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'scheduleBackups') == 0: return ACLManager.loadErrorJson('scheduleStatus', 0) data = json.loads(request.body) job_id = data['id'] backup_job = BackupJob.objects.get(id=job_id) backup_job.delete() final_json = json.dumps({'status': 1, 'error_message': "None"}) return HttpResponse(final_json) except BaseException as msg: final_json = json.dumps({'status': 0, 'error_message': str(msg)}) return HttpResponse(final_json) def restore_remote_backups(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'createBackup') == 0: return ACLManager.loadError() websites = ACLManager.findAllSites(current_acl, user_id) destinations = _get_destinations() return def_renderer(request, 'IncBackups/restoreRemoteBackups.html', {'websiteList': websites, 'destinations': destinations}, 'createBackup') except BaseException as msg: logging.writeToFile(str(msg)) return redirect(loadLoginPage) def save_changes(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'scheduleBackups') == 0: return ACLManager.loadErrorJson('scheduleStatus', 0) data = json.loads(request.body) job_id = data['id'] backup_data = data['websiteData'] if 'websiteData' in data else 0 backup_emails = data['websiteEmails'] if 'websiteEmails' in data else 0 backup_databases = data['websiteDatabases'] if 'websiteDatabases' in data else 0 job = BackupJob.objects.get(pk=job_id) job.websiteData = int(backup_data) job.websiteDatabases = int(backup_databases) job.websiteDataEmails = int(backup_emails) job.save() final_json = json.dumps({'status': 1, 'error_message': "None"}) return HttpResponse(final_json) except BaseException as msg: final_json = json.dumps({'status': 0, 'error_message': str(msg)}) return HttpResponse(final_json) def remove_site(request): try: _, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'scheduleBackups') == 0: return ACLManager.loadErrorJson('scheduleStatus', 0) data = json.loads(request.body) job_id = data['id'] website = data['website'] job = BackupJob.objects.get(pk=job_id) site = JobSites.objects.get(job=job, website=website) site.delete() final_json = json.dumps({'status': 1, 'error_message': "None"}) return HttpResponse(final_json) except BaseException as msg: final_json = json.dumps({'status': 0, 'error_message': str(msg)}) return HttpResponse(final_json) def add_website(request): try: _, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'scheduleBackups') == 0: return ACLManager.loadErrorJson('scheduleStatus', 0) data = json.loads(request.body) job_id = data['id'] website = data['website'] job = BackupJob.objects.get(pk=job_id) try: JobSites.objects.get(job=job, website=website) except BaseException: site = JobSites(job=job, website=website) site.save() final_json = json.dumps({'status': 1, 'error_message': "None"}) return HttpResponse(final_json) except BaseException as msg: final_json = json.dumps({'status': 0, 'error_message': str(msg)}) return HttpResponse(final_json) #### Backups v2 def ConfigureV2Backup(request): try: user_id, current_acl = _get_user_acl(request) if ACLManager.currentContextPermission(current_acl, 'createBackup') == 0: return ACLManager.loadError() if ACLManager.CheckForPremFeature('all'): BackupStat = 1 else: BackupStat = 0 websites = ACLManager.findAllSites(current_acl, user_id) # # destinations = _get_destinations(local=True) proc = httpProc(request, 'IncBackups/ConfigureV2Backup.html', {'websiteList': websites, 'BackupStat': BackupStat}) return proc.render() except BaseException as msg: logging.writeToFile(str(msg)) return redirect(loadLoginPage) def ConfigureV2BackupSetup(request): try: userID = request.session['userID'] req_data={} req_data['name'] = 'GDrive' req_data['token'] = request.GET.get('t') req_data['refresh_token'] = request.GET.get('r') req_data['token_uri'] = request.GET.get('to') req_data['scopes'] = request.GET.get('s') req_data['accountname'] = request.GET.get('n') req_data['client_id'] = request.GET.get('client_id') req_data['client_secret'] = request.GET.get('client_secret') website = request.GET.get('d') # logging.writeToFile('domainname is ====%s'%(request.GET.get)) currentACL = ACLManager.loadedACL(userID) admin = Administrator.objects.get(pk=userID) if ACLManager.checkOwnership(website, admin, currentACL) == 1: pass else: return ACLManager.loadError() cpbuv2 = CPBackupsV2( {'domain': website, 'BasePath': '/home/backup', 'BackupDatabase': 1, 'BackupData': 1, 'BackupEmails': 1, 'BackendName': 'testremote'}) status, message = cpbuv2.SetupRcloneBackend(CPBackupsV2.GDrive, req_data) from plogical.processUtilities import ProcessUtilities if os.path.exists(ProcessUtilities.debugPath): logging.writeToFile(f'Response from SetupRcloneBackend is {str(status)} and message {str(message)}') if status == 0: data_ret = {'status': 0, 'error_message': message} json_data = json.dumps(data_ret) return HttpResponse(json_data) return ConfigureV2Backup(request) except BaseException as msg: logging.writeToFile("Error configure"+str(msg)) data_ret = {'status': 0, 'error_message': str(msg) + request.get_raw_uri() } json_data = json.dumps(data_ret) return HttpResponse(json_data) def CreateV2Backup(request): try: userID = request.session['userID'] bm = BackupManager() return bm.CreateV2backupSite(request, userID) except KeyError: return redirect(loadLoginPage) def DeleteRepoV2(request): try: userID = request.session['userID'] bm = BackupManager() return bm.DeleteRepoV2(request, userID) except KeyError: return redirect(loadLoginPage) def CreateV2BackupButton(request): try: userID = request.session['userID'] data = json.loads(request.body) Selectedwebsite = data['Selectedwebsite'] Selectedrepo = data['Selectedrepo'] currentACL = ACLManager.loadedACL(userID) admin = Administrator.objects.get(pk=userID) if ACLManager.checkOwnership(Selectedwebsite, admin, currentACL) == 1: pass else: return ACLManager.loadError() extra_args = {} extra_args['function'] = 'InitiateBackup' extra_args['website'] = Selectedwebsite extra_args['domain'] = Selectedwebsite extra_args['BasePath'] = '/home/backup' extra_args['BackendName'] = Selectedrepo extra_args['BackupData'] = data['websiteData'] if 'websiteData' in data else False extra_args['BackupEmails'] = data['websiteEmails'] if 'websiteEmails' in data else False extra_args['BackupDatabase'] = data['websiteDatabases'] if 'websiteDatabases' in data else False background = CPBackupsV2(extra_args) background.start() # background = CPBackupsV2({'domain': Selectedwebsite, 'BasePath': '/home/backup', 'BackupDatabase': 1, 'BackupData': 1, # 'BackupEmails': 1, 'BackendName': Selectedrepo, 'function': 'InitiateBackup', }) # background.start() time.sleep(2) data_ret = {'status': 1, 'installStatus': 1, 'error_message': 'None',} json_data = json.dumps(data_ret) return HttpResponse(json_data) except BaseException as msg: data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)} json_data = json.dumps(data_ret) return HttpResponse(json_data) def CreateV2BackupStatus(request): try: userID = request.session['userID'] bm = BackupManager() return bm.CreateV2BackupStatus(userID, json.loads(request.body)) except KeyError: return redirect(loadLoginPage) def RestoreV2backupSite(request): try: userID = request.session['userID'] bm = BackupManager() return bm.RestoreV2backupSite(request, userID) except KeyError: return redirect(loadLoginPage) def RestorePathV2(request): try: userID = request.session['userID'] data = json.loads(request.body) SnapShotId = data['snapshotid'] Path = data['path'] Selectedwebsite = data['selwebsite'] Selectedrepo = data['selectedrepo'] currentACL = ACLManager.loadedACL(userID) admin = Administrator.objects.get(pk=userID) if ACLManager.checkOwnership(str(Selectedwebsite), admin, currentACL) == 1: pass else: return ACLManager.loadError() extra_args = {} extra_args['function'] = 'InitiateRestore' extra_args['website'] = Selectedwebsite extra_args['domain'] = Selectedwebsite extra_args['BasePath'] = '/home/backup' extra_args['BackendName'] = Selectedrepo extra_args['path'] = Path extra_args['snapshotid'] = SnapShotId # extra_args['BackupData'] = data['websiteData'] if 'websiteData' in data else False # extra_args['BackupEmails'] = data['websiteEmails'] if 'websiteEmails' in data else False # extra_args['BackupDatabase'] = data['websiteDatabases'] if 'websiteDatabases' in data else False background = CPBackupsV2(extra_args) background.start() # vm = CPBackupsV2({'domain': Selectedwebsite, 'BackendName': Selectedrepo, "function": "", 'BasePath': '/home/backup'}) # status = vm.InitiateRestore(SnapShotId, Path) data_ret = {'status': 1, 'installStatus': 1, 'error_message': 'None',} json_data = json.dumps(data_ret) return HttpResponse(json_data) except BaseException as msg: data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)} json_data = json.dumps(data_ret) return HttpResponse(json_data) def DeleteSnapshotV2Final(request): try: userID = request.session['userID'] data = json.loads(request.body) SnapShotId = data['snapshotid'] Selectedwebsite = data['selwebsite'] Selectedrepo = data['selectedrepo'] currentACL = ACLManager.loadedACL(userID) admin = Administrator.objects.get(pk=userID) if ACLManager.checkOwnership(str(Selectedwebsite), admin, currentACL) == 1: pass else: return ACLManager.loadError() extra_args = {} extra_args['function'] = 'InitiateRestore' extra_args['website'] = Selectedwebsite extra_args['domain'] = Selectedwebsite extra_args['BasePath'] = '/home/backup' extra_args['BackendName'] = Selectedrepo extra_args['snapshotid'] = SnapShotId # extra_args['BackupData'] = data['websiteData'] if 'websiteData' in data else False # extra_args['BackupEmails'] = data['websiteEmails'] if 'websiteEmails' in data else False # extra_args['BackupDatabase'] = data['websiteDatabases'] if 'websiteDatabases' in data else False background = CPBackupsV2(extra_args) background.DeleteSnapshots(SnapShotId) # vm = CPBackupsV2({'domain': Selectedwebsite, 'BackendName': Selectedrepo, "function": "", 'BasePath': '/home/backup'}) # status = vm.InitiateRestore(SnapShotId, Path) data_ret = {'status': 1, 'installStatus': 1, 'error_message': 'None',} json_data = json.dumps(data_ret) return HttpResponse(json_data) except BaseException as msg: data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)} json_data = json.dumps(data_ret) return HttpResponse(json_data) def selectwebsiteRetorev2(request): import re try: userID = request.session['userID'] data = json.loads(request.body) Selectedwebsite = data['Selectedwebsite'] currentACL = ACLManager.loadedACL(userID) admin = Administrator.objects.get(pk=userID) if ACLManager.checkOwnership(str(Selectedwebsite), admin, currentACL) == 1: pass else: return ACLManager.loadError() obj = Websites.objects.get(domain = str(Selectedwebsite)) #/home/cyberpanel.net/.config/rclone/rclone.conf path = '/home/%s/.config/rclone/rclone.conf' %(obj.domain) command = 'cat %s'%(path) result = pu.outputExecutioner(command) if result.find('type') > -1: pattern = r'\[(.*?)\]' matches = re.findall(pattern, result) final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": matches}) return HttpResponse(final_json) else: final_json = json.dumps({'status': 0, 'fetchStatus': 0, 'error_message': 'Could not Find repo'}) return HttpResponse(final_json) # final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": 1}) # return HttpResponse(final_json) except BaseException as msg: final_dic = {'status': 0, 'fetchStatus': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def ConfigureSftpV2Backup(request): try: userID = request.session['userID'] data = json.loads(request.body) Selectedwebsite = data['Selectedwebsite'] sfptpasswd = data['sfptpasswd'] hostName = data['hostName'] UserName = data['UserName'] Repo_Name = data['Repo_Name'] #sshPort = data['sshPort'] currentACL = ACLManager.loadedACL(userID) admin = Administrator.objects.get(pk=userID) if ACLManager.checkOwnership(str(Selectedwebsite), admin, currentACL) == 1: pass else: return ACLManager.loadError() req_data = {} req_data['name'] = 'SFTP' req_data['host'] = hostName req_data['user'] = UserName req_data['password'] = sfptpasswd req_data['Repo_Name'] = Repo_Name try: req_data['sshPort'] = data['sshPort'] except: req_data['sshPort'] = '22' cpbuv2 = CPBackupsV2( {'domain': Selectedwebsite, 'BasePath': '/home/backup', 'BackupDatabase': 1, 'BackupData': 1, 'BackupEmails': 1, 'BackendName': 'SFTP', 'function': None}) status, message = cpbuv2.SetupRcloneBackend(CPBackupsV2.SFTP, req_data) from plogical.processUtilities import ProcessUtilities if os.path.exists(ProcessUtilities.debugPath): logging.writeToFile(f'Response from SetupRcloneBackend is {str(status)} and message {str(message)}') if status == 0: data_ret = {'status': 0, 'error_message': message} json_data = json.dumps(data_ret) return HttpResponse(json_data) # return ConfigureV2Backup(request) final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": None}) return HttpResponse(final_json) except BaseException as msg: final_dic = {'status': 0, 'fetchStatus': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def selectwebsiteCreatev2(request): import re try: userID = request.session['userID'] data = json.loads(request.body) Selectedwebsite = data['Selectedwebsite'] currentACL = ACLManager.loadedACL(userID) admin = Administrator.objects.get(pk=userID) if ACLManager.checkOwnership(str(Selectedwebsite), admin, currentACL) == 1: pass else: return ACLManager.loadError() obj = Websites.objects.get(domain = str(Selectedwebsite)) #/home/cyberpanel.net/.config/rclone/rclone.conf path = '/home/%s/.config/rclone/rclone.conf' %(obj.domain) command = 'cat %s'%(path) CurrentContent = pu.outputExecutioner(command) status, currentSchedules = CPBackupsV2.FetchCurrentSchedules(str(Selectedwebsite)) if CurrentContent.find('No such file or directory') > -1: LocalRclonePath = f'/home/{obj.domain}/.config/rclone' command = f'mkdir -p {LocalRclonePath}' pu.executioner(command, obj.externalApp) # content = ''' # [local] # type = local # ''' # command = f"echo '{content}' > {path}" # pu.executioner(command, obj.externalApp, True) command = 'cat %s' % (path) result = pu.outputExecutioner(command) if result.find('type') > -1: pattern = r'\[(.*?)\]' matches = re.findall(pattern, result) final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": matches, 'currentSchedules': currentSchedules}) return HttpResponse(final_json) else: final_json = json.dumps({'status': 0, 'fetchStatus': 0, 'error_message': 'Could not Find repo'}) return HttpResponse(final_json) else: command = 'cat %s' % (path) result = pu.outputExecutioner(command) if result.find('type') > -1: pattern = r'\[(.*?)\]' matches = re.findall(pattern, result) final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": matches, 'currentSchedules': currentSchedules}) return HttpResponse(final_json) else: final_json = json.dumps({'status': 0, 'fetchStatus': 0, 'error_message': 'Could not Find repo', 'currentSchedules': currentSchedules}) return HttpResponse(final_json) # logging.writeToFile(str(CurrentContent)) # final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": None}) # return HttpResponse(final_json) # except BaseException as msg: final_dic = {'status': 0, 'fetchStatus': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def selectreporestorev2(request): try: userID = request.session['userID'] data = json.loads(request.body) Selectedrepo = data['Selectedrepo'] Selectedwebsite= data['Selectedwebsite'] currentACL = ACLManager.loadedACL(userID) admin = Administrator.objects.get(pk=userID) if ACLManager.checkOwnership(str(Selectedwebsite), admin, currentACL) == 1: pass else: return ACLManager.loadError() # f'rustic -r testremote snapshots --password "" --json 2>/dev/null' # final_json = json.dumps({'status': 0, 'fetchStatus': 1, 'error_message': Selectedrepo }) # return HttpResponse(final_json) vm = CPBackupsV2({'domain': Selectedwebsite, 'BackendName': Selectedrepo, "function":""}) status, data = vm.FetchSnapShots() if status == 1: final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": data}) return HttpResponse(final_json) else: # final_json = json.dumps({'status': 0, 'fetchStatus': 1, 'error_message': ac,}) final_json = json.dumps({'status': 0, 'fetchStatus': 1, 'error_message': 'Cannot Find!',}) return HttpResponse(final_json) except BaseException as msg: final_dic = {'status': 0, 'fetchStatus': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def schedulev2Backups(request): try: userID = request.session['userID'] bm = BackupManager() return bm.schedulev2Backups(request, userID) except KeyError: return redirect(loadLoginPage) def DeleteScheduleV2(request): try: userID = request.session['userID'] data = json.loads(request.body) Selectedwebsite = data['Selectedwebsite'] repo = data['repo'] frequency = data['frequency'] websiteData = data['websiteData'] websiteDatabases = data['websiteDatabases'] websiteEmails = data['websiteEmails'] currentACL = ACLManager.loadedACL(userID) admin = Administrator.objects.get(pk=userID) if ACLManager.checkOwnership(str(Selectedwebsite), admin, currentACL) == 1: pass else: return ACLManager.loadError() status, message = CPBackupsV2.DeleteSchedule(Selectedwebsite, repo, frequency, websiteData, websiteDatabases, websiteEmails) final_dic = {'status': 1, 'error_message': message} final_json = json.dumps(final_dic) return HttpResponse(final_json) # final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": None}) # return HttpResponse(final_json) except BaseException as msg: final_dic = {'status': 0, 'fetchStatus': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def CreateScheduleV2(request): try: userID = request.session['userID'] data = json.loads(request.body) Selectedwebsite = data['Selectedwebsite'] repo = data['repo'] frequency = data['frequency'] retention = data['retention'] websiteData = data['websiteData'] if 'websiteData' in data else False websiteDatabases = data['websiteDatabases'] if 'websiteDatabases' in data else False websiteEmails = data['websiteEmails'] if 'websiteEmails' in data else False # # extra_args['BackupData'] = data['websiteData'] if 'websiteData' in data else False # extra_args['BackupEmails'] = data['websiteEmails'] if 'websiteEmails' in data else False # extra_args['BackupDatabase'] = data['websiteDatabases'] if 'websiteDatabases' in data else False currentACL = ACLManager.loadedACL(userID) admin = Administrator.objects.get(pk=userID) if ACLManager.checkOwnership(str(Selectedwebsite), admin, currentACL) == 1: pass else: return ACLManager.loadError() status, message = CPBackupsV2.CreateScheduleV2(Selectedwebsite, repo, frequency, websiteData, websiteDatabases, websiteEmails, retention) final_dic = {'status': 1, 'error_message': message} final_json = json.dumps(final_dic) return HttpResponse(final_json) # final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": None}) # return HttpResponse(final_json) except BaseException as msg: final_dic = {'status': 0, 'fetchStatus': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json) def DeleteV2BackupButton(request): try: userID = request.session['userID'] data = json.loads(request.body) Selectedwebsite = data['Selectedwebsite'] repo = data['Selectedrepo'] currentACL = ACLManager.loadedACL(userID) admin = Administrator.objects.get(pk=userID) if ACLManager.checkOwnership(str(Selectedwebsite), admin, currentACL) == 1: pass else: return ACLManager.loadError() obj = Websites.objects.get(domain=Selectedwebsite) usr= obj.externalApp status, message = CPBackupsV2.DeleteRepoScheduleV2(Selectedwebsite, repo, usr) if status == 1: final_dic = {'status': 1, 'error_message': message} final_json = json.dumps(final_dic) return HttpResponse(final_json) else: final_dic = {'status': 0, 'error_message': message} final_json = json.dumps(final_dic) return HttpResponse(final_json) # final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": None}) # return HttpResponse(final_json) except BaseException as msg: final_dic = {'status': 0, 'fetchStatus': 0, 'error_message': str(msg)} final_json = json.dumps(final_dic) return HttpResponse(final_json)
| ver. 1.4 |
Github
|
.
| PHP 8.2.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings