diff --git a/backup/backupManager.py b/backup/backupManager.py index 6d0a93d50..438c41729 100755 --- a/backup/backupManager.py +++ b/backup/backupManager.py @@ -4,6 +4,8 @@ import os.path import sys import django +from plogical.httpProc import httpProc + sys.path.append('/usr/local/CyberCP') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings") django.setup() @@ -39,7 +41,8 @@ class BackupManager: def loadBackupHome(self, request=None, userID=None, data=None): try: currentACL = ACLManager.loadedACL(userID) - return render(request, 'backup/index.html', currentACL) + proc = httpProc(request, 'backup/index.html', currentACL) + return proc.render() except BaseException as msg: return HttpResponse(str(msg)) @@ -51,7 +54,8 @@ class BackupManager: return ACLManager.loadError() websitesName = ACLManager.findAllSites(currentACL, userID) - return render(request, 'backup/backup.html', {'websiteList': websitesName}) + proc = httpProc(request, 'backup/backup.html', {'websiteList': websitesName}) + return proc.render() except BaseException as msg: return HttpResponse(str(msg)) @@ -73,7 +77,8 @@ class BackupManager: websitesName = ACLManager.findAllSites(currentACL, userID) - return render(request, 'backup/googleDrive.html', {'accounts': gDriveAcctsList, 'websites': websitesName}) + proc = httpProc(request, 'backup/googleDrive.html', {'accounts': gDriveAcctsList, 'websites': websitesName}) + return proc.render() except BaseException as msg: return HttpResponse(str(msg)) @@ -365,7 +370,8 @@ class BackupManager: path = os.path.join("/home", "backup") if not os.path.exists(path): - return render(request, 'backup/restore.html') + proc = httpProc(request, 'backup/restore.html') + return proc.render() else: all_files = [] ext = ".tar.gz" @@ -378,7 +384,8 @@ class BackupManager: if filename.endswith(ext): all_files.append(filename) - return render(request, 'backup/restore.html', {'backups': all_files}) + proc = httpProc(request, 'backup/restore.html', {'backups': all_files}) + return proc.render() except BaseException as msg: return HttpResponse(str(msg)) @@ -701,7 +708,8 @@ class BackupManager: if ACLManager.currentContextPermission(currentACL, 'addDeleteDestinations') == 0: return ACLManager.loadError() - return render(request, 'backup/backupDestinations.html', {}) + proc = httpProc(request, 'backup/backupDestinations.html', {}) + return proc.render() except BaseException as msg: return HttpResponse(str(msg)) @@ -883,7 +891,8 @@ class BackupManager: websitesName = ACLManager.findAllSites(currentACL, userID) - return render(request, 'backup/backupSchedule.html', {'destinations': dests, 'websites': websitesName}) + proc = httpProc(request, 'backup/backupSchedule.html', {'destinations': dests, 'websites': websitesName}) + return proc.render() except BaseException as msg: return HttpResponse(str(msg)) @@ -1015,7 +1024,8 @@ class BackupManager: if ACLManager.currentContextPermission(currentACL, 'remoteBackups') == 0: return ACLManager.loadError() - return render(request, 'backup/remoteBackups.html') + proc = httpProc(request, 'backup/remoteBackups.html') + return proc.render() except BaseException as msg: return HttpResponse(str(msg)) @@ -1386,7 +1396,8 @@ class BackupManager: for logFile in logFiles: all_files.append(logFile.logFile) - return render(request, 'backup/backupLogs.html', {'backups': all_files}) + proc = httpProc(request, 'backup/backupLogs.html', {'backups': all_files}) + return proc.render() except BaseException as msg: return HttpResponse(str(msg)) diff --git a/dockerManager/container.py b/dockerManager/container.py index 9b9e6c7fe..8cc1ceb73 100755 --- a/dockerManager/container.py +++ b/dockerManager/container.py @@ -27,7 +27,7 @@ import requests from plogical.processUtilities import ProcessUtilities from serverStatus.serverStatusUtil import ServerStatusUtil import threading as multi - +from plogical.httpProc import httpProc # Use default socket to connect class ContainerManager(multi.Thread): @@ -50,7 +50,8 @@ class ContainerManager(multi.Thread): else: return ACLManager.loadError() - return render(self.request, self.templateName, self.data) + proc = httpProc(self.request, self.templateName, self.data) + return proc.render() def run(self): try: @@ -111,9 +112,10 @@ class ContainerManager(multi.Thread): except docker.errors.ImageNotFound: val = request.session['userID'] admin = Administrator.objects.get(pk=val) - return render(request, 'dockerManager/images.html', {"type": admin.type, + proc = httpProc(request, 'dockerManager/images.html', {"type": admin.type, 'image': image, 'tag': tag}) + return proc.render() envList = {}; if 'Env' in inspectImage['Config']: diff --git a/emailPremium/views.py b/emailPremium/views.py index bbe8b1ccc..ac230318e 100755 --- a/emailPremium/views.py +++ b/emailPremium/views.py @@ -5,8 +5,6 @@ from django.shortcuts import render,redirect from django.http import HttpResponse from mailServer.models import Domains, EUsers # Create your views here. -from loginSystem.models import Administrator -from plogical.httpProc import httpProc from websiteFunctions.models import Websites from loginSystem.views import loadLoginPage import plogical.CyberCPLogFileWriter as logging @@ -20,7 +18,7 @@ from plogical.virtualHostUtilities import virtualHostUtilities from random import randint from plogical.acl import ACLManager from plogical.processUtilities import ProcessUtilities - +from plogical.httpProc import httpProc # Create your views here. ## Email Policy Server @@ -157,7 +155,8 @@ def listDomains(request): break if installCheck == 0: - return render(request, 'emailPremium/listDomains.html', {"installCheck": installCheck}) + proc = httpProc(request, 'emailPremium/listDomains.html', {"installCheck": installCheck}) + return proc.render() ### @@ -962,7 +961,8 @@ def fetchSpamAssassinSettings(request): return HttpResponse(final_json) - return render(request,'managePHP/editPHPConfig.html') + proc = httpProc(request,'managePHP/editPHPConfig.html') + return proc.render() except KeyError: return redirect(loadLoginPage) diff --git a/plogical/backupManager.py b/plogical/backupManager.py deleted file mode 100644 index 3e2c6fd30..000000000 --- a/plogical/backupManager.py +++ /dev/null @@ -1,1312 +0,0 @@ -#!/usr/local/CyberCP/bin/python -import os -import os.path -import sys -import django -sys.path.append('/usr/local/CyberCP') -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings") -django.setup() -import json -from plogical.acl import ACLManager -from plogical import CyberCPLogFileWriter as logging -from websiteFunctions.models import Websites, Backups, dest, backupSchedules -from plogical.virtualHostUtilities import virtualHostUtilities -import subprocess -import shlex -from django.shortcuts import HttpResponse, render -from loginSystem.models import Administrator -from plogical.mailUtilities import mailUtilities -from random import randint -import time -import plogical.backupUtilities as backupUtil -import requests - -class BackupManager: - def __init__(self, domain = None, childDomain = None): - self.domain = domain - self.childDomain = childDomain - - def loadBackupHome(self, request = None, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - return render(request, 'backup/index.html', currentACL) - except BaseException as msg: - return HttpResponse(str(msg)) - - def backupSite(self, request = None, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'createBackup') == 0: - return ACLManager.loadError() - - websitesName = ACLManager.findAllSites(currentACL, userID) - return render(request, 'backup/backup.html', {'websiteList': websitesName}) - except BaseException as msg: - return HttpResponse(str(msg)) - - def restoreSite(self, request = None, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'restoreBackup') == 0: - return ACLManager.loadError() - - path = os.path.join("/home", "backup") - - if not os.path.exists(path): - return render(request, 'backup/restore.html') - else: - all_files = [] - ext = ".tar.gz" - - command = 'sudo chown -R cyberpanel:cyberpanel ' + path - ACLManager.executeCall(command) - - files = os.listdir(path) - for filename in files: - if filename.endswith(ext): - all_files.append(filename) - - return render(request, 'backup/restore.html', {'backups': all_files}) - - except BaseException as msg: - return HttpResponse(str(msg)) - - def getCurrentBackups(self, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - backupDomain = data['websiteToBeBacked'] - - if ACLManager.checkOwnership(backupDomain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('fetchStatus', 0) - - website = Websites.objects.get(domain=backupDomain) - - backups = website.backups_set.all() - - json_data = "[" - checker = 0 - - for items in backups: - if items.status == 0: - status = "Pending" - else: - status = "Completed" - dic = {'id': items.id, - 'file': items.fileName, - 'date': items.date, - 'size': items.size, - 'status': status - } - - if checker == 0: - json_data = json_data + json.dumps(dic) - checker = 1 - else: - json_data = json_data + ',' + json.dumps(dic) - - json_data = json_data + ']' - final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": json_data}) - 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 submitBackupCreation(self, userID = None, data = None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - backupDomain = data['websiteToBeBacked'] - website = Websites.objects.get(domain=backupDomain) - - if ACLManager.checkOwnership(backupDomain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('metaStatus', 0) - - ## defining paths - - ## /home/example.com/backup - backupPath = os.path.join("/home", backupDomain, "backup/") - domainUser = website.externalApp - backupName = 'backup-' + domainUser + "-" + time.strftime("%I-%M-%S-%a-%b-%Y") - - ## /home/example.com/backup/backup-example-06-50-03-Thu-Feb-2018 - tempStoragePath = os.path.join(backupPath, backupName) - - execPath = "sudo nice -n 10 python " + virtualHostUtilities.cyberPanel + "/plogical/backupUtilities.py" - execPath = execPath + " submitBackupCreation --tempStoragePath " + tempStoragePath + " --backupName " \ - + backupName + " --backupPath " + backupPath + ' --backupDomain ' + backupDomain - - subprocess.Popen(shlex.split(execPath)) - - time.sleep(2) - - final_json = json.dumps({'status': 1, 'metaStatus': 1, 'error_message': "None", 'tempStorage': tempStoragePath}) - return HttpResponse(final_json) - - except BaseException as msg: - logging.CyberCPLogFileWriter.writeToFile(str(msg)) - final_dic = {'status': 0, 'metaStatus': 0, 'error_message': str(msg)} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - - def backupStatus(self, userID = None, data = None): - try: - - backupDomain = data['websiteToBeBacked'] - status = os.path.join("/home", backupDomain, "backup/status") - - ## read file name - - try: - backupFileNamePath = os.path.join("/home", backupDomain, "backup/backupFileName") - command = "sudo cat " + backupFileNamePath - fileName = subprocess.check_output(shlex.split(command)).decode("utf-8") - except: - fileName = "Fetching.." - - ## file name read ends - - if os.path.exists(status): - command = "sudo cat " + status - status = subprocess.check_output(shlex.split(command)).decode("utf-8") - - if status.find("Completed") > -1: - - command = 'sudo rm -f ' + status - subprocess.call(shlex.split(command)) - - backupOb = Backups.objects.get(fileName=fileName) - backupOb.status = 1 - - ## adding backup data to database. - try: - backupOb.size = str(int(float( - os.path.getsize("/home/" + backupDomain + "/backup/" + fileName + ".tar.gz")) / ( - 1024.0 * 1024.0))) + "MB" - backupOb.save() - except: - backupOb.size = str( - int(os.path.getsize("/home/" + backupDomain + "/backup/" + fileName + ".tar.gz"))) - backupOb.save() - - final_json = json.dumps( - {'backupStatus': 1, 'error_message': "None", "status": status, "abort": 1, - 'fileName': fileName, }) - return HttpResponse(final_json) - - elif status.find("[5009]") > -1: - ## removing status file, so that backup can re-run - try: - command = 'sudo rm -f ' + status - cmd = shlex.split(command) - subprocess.call(cmd) - - backupObs = Backups.objects.filter(fileName=fileName) - for items in backupObs: - items.delete() - - except BaseException as msg: - logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [backupStatus]") - - final_json = json.dumps( - {'backupStatus': 1, 'fileName': fileName, 'error_message': "None", "status": status, - "abort": 1}) - return HttpResponse(final_json) - else: - final_json = json.dumps( - {'backupStatus': 1, 'error_message': "None", 'fileName': fileName, "status": status, - "abort": 0}) - return HttpResponse(final_json) - else: - final_json = json.dumps({'backupStatus': 0, 'error_message': "None", "status": 0, "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.CyberCPLogFileWriter.writeToFile(str(msg) + " [backupStatus]") - return HttpResponse(final_json) - - def cancelBackupCreation(self, userID = None, data = None): - try: - - backupCancellationDomain = data['backupCancellationDomain'] - fileName = data['fileName'] - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/backupUtilities.py" - - execPath = execPath + " cancelBackupCreation --backupCancellationDomain " + backupCancellationDomain + " --fileName " + fileName - - subprocess.call(shlex.split(execPath)) - - try: - backupOb = Backups.objects.get(fileName=fileName) - backupOb.delete() - except BaseException as msg: - logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [cancelBackupCreation]") - - final_json = json.dumps({'abortStatus': 1, 'error_message': "None", "status": 0}) - return HttpResponse(final_json) - - except BaseException as msg: - final_dic = {'abortStatus': 0, 'error_message': str(msg)} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - - def deleteBackup(self, userID = None, data = None): - try: - backupID = data['backupID'] - backup = Backups.objects.get(id=backupID) - - domainName = backup.website.domain - - path = "/home/" + domainName + "/backup/" + backup.fileName + ".tar.gz" - command = 'sudo rm -f ' + path - ACLManager.executeCall(command) - - backup.delete() - - final_json = json.dumps({'status': 1, 'deleteStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - except BaseException as msg: - final_dic = {'status': 0, 'deleteStatus': 0, 'error_message': str(msg)} - final_json = json.dumps(final_dic) - - return HttpResponse(final_json) - - def submitRestore(self, data = None): - try: - backupFile = data['backupFile'] - originalFile = "/home/backup/" + backupFile - - if not os.path.exists(originalFile): - dir = data['dir'] - else: - dir = "CyberPanelRestore" - - execPath = "sudo nice -n 10 python " + virtualHostUtilities.cyberPanel + "/plogical/backupUtilities.py" - execPath = execPath + " submitRestore --backupFile " + backupFile + " --dir " + dir - subprocess.Popen(shlex.split(execPath)) - time.sleep(4) - - final_dic = {'restoreStatus': 1, 'error_message': "None"} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - except BaseException as msg: - final_dic = {'restoreStatus': 0, 'error_message': str(msg)} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - - def restoreStatus(self, data = None): - try: - backupFile = data['backupFile'].strip(".tar.gz") - - path = os.path.join("/home", "backup", data['backupFile']) - - if os.path.exists(path): - path = os.path.join("/home", "backup", backupFile) - elif os.path.exists(data['backupFile']): - path = data['backupFile'].strip(".tar.gz") - else: - dir = data['dir'] - path = "/home/backup/transfer-" + str(dir) + "/" + backupFile - - if os.path.exists(path): - try: - execPath = "sudo cat " + path + "/status" - status = subprocess.check_output(shlex.split(execPath)).decode("utf-8") - - if status.find("Done") > -1: - - command = "sudo rm -rf " + path - subprocess.call(shlex.split(command)) - - final_json = json.dumps( - {'restoreStatus': 1, 'error_message': "None", "status": status, 'abort': 1, - 'running': 'Completed'}) - return HttpResponse(final_json) - elif status.find("[5009]") > -1: - ## removing temporarily generated files while restoring - command = "sudo rm -rf " + path - subprocess.call(shlex.split(command)) - final_json = json.dumps({'restoreStatus': 1, 'error_message': "None", - "status": status, 'abort': 1, 'alreadyRunning': 0, - 'running': 'Error'}) - return HttpResponse(final_json) - else: - final_json = json.dumps( - {'restoreStatus': 1, 'error_message': "None", "status": status, 'abort': 0, - 'running': 'Running..'}) - return HttpResponse(final_json) - - except BaseException as msg: - logging.CyberCPLogFileWriter.writeToFile(str(msg)) - status = "Just Started" - final_json = json.dumps( - {'restoreStatus': 1, 'error_message': "None", "status": status, 'abort': 0, - 'running': 'Running..'}) - return HttpResponse(final_json) - else: - final_json = json.dumps( - {'restoreStatus': 1, 'error_message': "None", "status": "OK To Run", 'running': 'Halted', - 'abort': 1}) - return HttpResponse(final_json) - - except BaseException as msg: - final_dic = {'restoreStatus': 0, 'error_message': str(msg)} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - - def backupDestinations(self, request = None, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'addDeleteDestinations') == 0: - return ACLManager.loadError() - - return render(request, 'backup/backupDestinations.html', {}) - - except BaseException as msg: - return HttpResponse(str(msg)) - - def submitDestinationCreation(self, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'addDeleteDestinations') == 0: - return ACLManager.loadErrorJson('destStatus', 0) - - destinations = backupUtil.backupUtilities.destinationsPath - - ipAddress = data['IPAddress'] - password = data['password'] - - if dest.objects.all().count() == 2: - final_dic = {'destStatus': 0, - 'error_message': "Currently only one remote destination is allowed."} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - try: - d = dest.objects.get(destLoc=ipAddress) - final_dic = {'destStatus': 0, 'error_message': "This destination already exists."} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - except: - - try: - port = data['backupSSHPort'] - except: - port = "22" - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/backupUtilities.py" - execPath = execPath + " submitDestinationCreation --ipAddress " + ipAddress + " --password " \ - + password + " --port " + port - - output = subprocess.check_output(shlex.split(execPath)).decode("utf-8") - - if output.find('1,') > -1: - try: - writeToFile = open(destinations, "w") - writeToFile.writelines(ipAddress + "\n") - writeToFile.writelines(data['backupSSHPort'] + "\n") - writeToFile.close() - newDest = dest(destLoc=ipAddress) - newDest.save() - except: - writeToFile = open(destinations, "w") - writeToFile.writelines(ipAddress + "\n") - writeToFile.writelines("22" + "\n") - writeToFile.close() - newDest = dest(destLoc=ipAddress) - newDest.save() - - final_dic = {'destStatus': 1, 'error_message': "None"} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - else: - final_dic = {'destStatus': 0, 'error_message': output} - 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 getCurrentBackupDestinations(self, userID = None, data = None): - try: - - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'addDeleteDestinations') == 0: - return ACLManager.loadErrorJson('fetchStatus', 0) - - records = dest.objects.all() - - json_data = "[" - checker = 0 - - for items in records: - if items.destLoc == "Home": - continue - dic = {'id': items.id, - 'ip': items.destLoc, - } - - if checker == 0: - json_data = json_data + json.dumps(dic) - checker = 1 - else: - json_data = json_data + ',' + json.dumps(dic) - - json_data = json_data + ']' - final_json = json.dumps({'fetchStatus': 1, 'error_message': "None", "data": json_data}) - return HttpResponse(final_json) - - except BaseException as msg: - final_dic = {'fetchStatus': 0, 'error_message': str(msg)} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - - def getConnectionStatus(self, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'addDeleteDestinations') == 0: - return ACLManager.loadErrorJson('connStatus', 0) - - ipAddress = data['IPAddress'] - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/backupUtilities.py" - execPath = execPath + " getConnectionStatus --ipAddress " + ipAddress - - output = subprocess.check_output(shlex.split(execPath)).decode("utf-8") - - if output.find('1,') > -1: - final_dic = {'connStatus': 1, 'error_message': "None"} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - else: - final_dic = {'connStatus': 0, 'error_message': output} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - - except BaseException as msg: - final_dic = {'connStatus': 1, 'error_message': str(msg)} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - - def deleteDestination(self, userID = None, data = None): - try: - - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'addDeleteDestinations') == 0: - return ACLManager.loadErrorJson('delStatus', 0) - - ipAddress = data['IPAddress'] - - delDest = dest.objects.get(destLoc=ipAddress) - delDest.delete() - - path = "/usr/local/CyberCP/backup/" - destinations = path + "destinations" - - data = open(destinations, 'r').readlines() - - writeToFile = open(destinations, 'r') - - for items in data: - if items.find(ipAddress) > -1: - continue - else: - writeToFile.writelines(items) - - writeToFile.close() - - ## Deleting Cron Tab Entries for this destination - - path = "/etc/crontab" - - data = open(path, 'r').readlines() - - writeToFile = open(path, 'w') - - for items in data: - if items.find("backupSchedule.py") > -1: - continue - else: - writeToFile.writelines(items) - - writeToFile.close() - - final_dic = {'delStatus': 1, 'error_message': "None"} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - - except BaseException as msg: - final_dic = {'delStatus': 1, 'error_message': str(msg)} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - - def scheduleBackup(self, request, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'scheDuleBackups') == 0: - return ACLManager.loadError() - - if dest.objects.all().count() <= 1: - try: - homeDest = dest(destLoc="Home") - homeDest.save() - except: - pass - backups = dest.objects.all() - - destinations = [] - - for items in backups: - destinations.append(items.destLoc) - - return render(request, 'backup/backupSchedule.html', {'destinations': destinations}) - - except BaseException as msg: - return HttpResponse(str(msg)) - - def getCurrentBackupSchedules(self, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'scheDuleBackups') == 0: - return ACLManager.loadErrorJson('fetchStatus', 0) - - records = backupSchedules.objects.all() - - json_data = "[" - checker = 0 - - for items in records: - dic = {'id': items.id, - 'destLoc': items.dest.destLoc, - 'frequency': items.frequency, - } - - if checker == 0: - json_data = json_data + json.dumps(dic) - checker = 1 - else: - json_data = json_data + ',' + json.dumps(dic) - - json_data = json_data + ']' - final_json = json.dumps({'fetchStatus': 1, 'error_message': "None", "data": json_data}) - return HttpResponse(final_json) - - except BaseException as msg: - final_dic = {'fetchStatus': 0, 'error_message': str(msg)} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - - def submitBackupSchedule(self, userID = None, data = None): - try: - backupDest = data['backupDest'] - backupFreq = data['backupFreq'] - - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'scheDuleBackups') == 0: - return ACLManager.loadErrorJson('scheduleStatus', 0) - - path = "/etc/crontab" - - ## check if already exists - try: - schedule = backupSchedules.objects.get(frequency=backupFreq) - if schedule.dest.destLoc == backupDest: - final_json = json.dumps( - {'scheduleStatus': 0, 'error_message': "This schedule already exists"}) - return HttpResponse(final_json) - else: - if backupDest == "Home" and backupFreq == "Daily": - cronJob = "0 3 * * 0-6 root python /usr/local/CyberCP/plogical/backupScheduleLocal.py" - - virtualHostUtilities.permissionControl(path) - - writeToFile = open(path, 'a') - writeToFile.writelines(cronJob + "\n") - writeToFile.close() - - virtualHostUtilities.leaveControl(path) - - command = "sudo systemctl restart crond" - - subprocess.call(shlex.split(command)) - - destination = dest.objects.get(destLoc=backupDest) - newSchedule = backupSchedules(dest=destination, frequency=backupFreq) - newSchedule.save() - - final_json = json.dumps({'scheduleStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - - elif backupDest == "Home" and backupFreq == "Weekly": - cronJob = "0 3 * * 3 root python /usr/local/CyberCP/plogical/backupScheduleLocal.py " - - virtualHostUtilities.permissionControl(path) - - writeToFile = open(path, 'a') - writeToFile.writelines(cronJob + "\n") - writeToFile.close() - - virtualHostUtilities.leaveControl(path) - - command = "sudo systemctl restart crond" - - subprocess.call(shlex.split(command)) - - destination = dest.objects.get(destLoc=backupDest) - newSchedule = backupSchedules(dest=destination, frequency=backupFreq) - newSchedule.save() - - final_json = json.dumps({'scheduleStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - - elif backupDest != "Home" and backupFreq == "Daily": - cronJob = "0 3 * * 0-6 root python /usr/local/CyberCP/plogical/backupSchedule.py" - - virtualHostUtilities.permissionControl(path) - - writeToFile = open(path, 'a') - writeToFile.writelines(cronJob + "\n") - writeToFile.close() - - virtualHostUtilities.leaveControl(path) - - command = "sudo systemctl restart crond" - - subprocess.call(shlex.split(command)) - - destination = dest.objects.get(destLoc=backupDest) - newSchedule = backupSchedules(dest=destination, frequency=backupFreq) - newSchedule.save() - - final_json = json.dumps({'scheduleStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - - elif backupDest != "Home" and backupFreq == "Weekly": - cronJob = "0 3 * * 3 root python /usr/local/CyberCP/plogical/backupSchedule.py " - - virtualHostUtilities.permissionControl(path) - - writeToFile = open(path, 'a') - writeToFile.writelines(cronJob + "\n") - writeToFile.close() - - virtualHostUtilities.leaveControl(path) - - command = "sudo systemctl restart crond" - - subprocess.call(shlex.split(command)) - - destination = dest.objects.get(destLoc=backupDest) - newSchedule = backupSchedules(dest=destination, frequency=backupFreq) - newSchedule.save() - - final_json = json.dumps({'scheduleStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - except: - if backupDest == "Home" and backupFreq == "Daily": - cronJob = "0 3 * * 0-6 root python /usr/local/CyberCP/plogical/backupScheduleLocal.py" - - virtualHostUtilities.permissionControl(path) - - writeToFile = open(path, 'a') - writeToFile.writelines(cronJob + "\n") - writeToFile.close() - - virtualHostUtilities.leaveControl(path) - - command = "sudo systemctl restart crond" - - subprocess.call(shlex.split(command)) - - destination = dest.objects.get(destLoc=backupDest) - newSchedule = backupSchedules(dest=destination, frequency=backupFreq) - newSchedule.save() - - final_json = json.dumps({'scheduleStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - - elif backupDest == "Home" and backupFreq == "Weekly": - cronJob = "0 3 * * 3 root python /usr/local/CyberCP/plogical/backupScheduleLocal.py " - - virtualHostUtilities.permissionControl(path) - - writeToFile = open(path, 'a') - writeToFile.writelines(cronJob + "\n") - writeToFile.close() - - virtualHostUtilities.leaveControl(path) - - command = "sudo systemctl restart crond" - - subprocess.call(shlex.split(command)) - - destination = dest.objects.get(destLoc=backupDest) - newSchedule = backupSchedules(dest=destination, frequency=backupFreq) - newSchedule.save() - - final_json = json.dumps({'scheduleStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - - elif backupDest != "Home" and backupFreq == "Daily": - cronJob = "0 3 * * 0-6 root python /usr/local/CyberCP/plogical/backupSchedule.py" - - virtualHostUtilities.permissionControl(path) - - writeToFile = open(path, 'a') - writeToFile.writelines(cronJob + "\n") - writeToFile.close() - - virtualHostUtilities.leaveControl(path) - - command = "sudo systemctl restart crond" - - subprocess.call(shlex.split(command)) - - destination = dest.objects.get(destLoc=backupDest) - newSchedule = backupSchedules(dest=destination, frequency=backupFreq) - newSchedule.save() - - final_json = json.dumps({'scheduleStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - - elif backupDest != "Home" and backupFreq == "Weekly": - cronJob = "0 3 * * 3 root python /usr/local/CyberCP/plogical/backupSchedule.py " - - virtualHostUtilities.permissionControl(path) - - writeToFile = open(path, 'a') - writeToFile.writelines(cronJob + "\n") - writeToFile.close() - - virtualHostUtilities.leaveControl(path) - - command = "sudo systemctl restart crond" - - subprocess.call(shlex.split(command)) - - destination = dest.objects.get(destLoc=backupDest) - newSchedule = backupSchedules(dest=destination, frequency=backupFreq) - newSchedule.save() - - final_json = json.dumps({'scheduleStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - - except BaseException as msg: - final_json = json.dumps({'scheduleStatus': 0, 'error_message': str(msg)}) - return HttpResponse(final_json) - - def scheduleDelete(self, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'scheDuleBackups') == 0: - return ACLManager.loadErrorJson('scheduleStatus', 0) - - backupDest = data['destLoc'] - backupFreq = data['frequency'] - - path = "/etc/crontab" - - if backupDest == "Home" and backupFreq == "Daily": - - virtualHostUtilities.permissionControl(path) - - data = open(path, "r").readlines() - writeToFile = open(path, 'w') - - for items in data: - if items.find("0-6") > -1 and items.find("backupScheduleLocal.py") > -1: - continue - else: - writeToFile.writelines(items) - - writeToFile.close() - - virtualHostUtilities.leaveControl(path) - - command = "sudo systemctl restart crond" - - subprocess.call(shlex.split(command)) - - destination = dest.objects.get(destLoc=backupDest) - newSchedule = backupSchedules.objects.get(dest=destination, frequency=backupFreq) - newSchedule.delete() - - final_json = json.dumps({'delStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - - elif backupDest == "Home" and backupFreq == "Weekly": - - virtualHostUtilities.permissionControl(path) - - data = open(path, "r").readlines() - writeToFile = open(path, 'w') - - for items in data: - if items.find("* 3") > -1 and items.find("backupScheduleLocal.py") > -1: - continue - else: - writeToFile.writelines(items) - - writeToFile.close() - - virtualHostUtilities.leaveControl(path) - - command = "sudo systemctl restart crond" - - subprocess.call(shlex.split(command)) - - destination = dest.objects.get(destLoc=backupDest) - newSchedule = backupSchedules.objects.get(dest=destination, frequency=backupFreq) - newSchedule.delete() - - final_json = json.dumps({'delStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - - elif backupDest != "Home" and backupFreq == "Daily": - - virtualHostUtilities.permissionControl(path) - - data = open(path, "r").readlines() - writeToFile = open(path, 'w') - - for items in data: - if items.find("0-6") > -1 and items.find("backupSchedule.py") > -1: - continue - else: - writeToFile.writelines(items) - - writeToFile.close() - - virtualHostUtilities.leaveControl(path) - - command = "sudo systemctl restart crond" - - subprocess.call(shlex.split(command)) - - destination = dest.objects.get(destLoc=backupDest) - newSchedule = backupSchedules.objects.get(dest=destination, frequency=backupFreq) - newSchedule.delete() - - final_json = json.dumps({'delStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - - elif backupDest != "Home" and backupFreq == "Weekly": - - virtualHostUtilities.permissionControl(path) - - data = open(path, "r").readlines() - writeToFile = open(path, 'w') - - for items in data: - if items.find("* 3") > -1 and items.find("backupSchedule.py") > -1: - continue - else: - writeToFile.writelines(items) - - writeToFile.close() - - virtualHostUtilities.leaveControl(path) - - command = "sudo systemctl restart crond" - - subprocess.call(shlex.split(command)) - - destination = dest.objects.get(destLoc=backupDest) - newSchedule = backupSchedules.objects.get(dest=destination, frequency=backupFreq) - newSchedule.delete() - - final_json = json.dumps({'delStatus': 1, 'error_message': "None"}) - return HttpResponse(final_json) - - except BaseException as msg: - final_json = json.dumps({'delStatus': 0, 'error_message': str(msg)}) - return HttpResponse(final_json) - - def remoteBackups(self, request, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'remoteBackups') == 0: - return ACLManager.loadError() - - return render(request, 'backup/remoteBackups.html') - - except BaseException as msg: - return HttpResponse(str(msg)) - - def submitRemoteBackups(self, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'remoteBackups') == 0: - return ACLManager.loadErrorJson() - - ipAddress = data['ipAddress'] - password = data['password'] - - ## Ask for Remote version of CyberPanel - - try: - finalData = json.dumps({'username': "admin", "password": password}) - - url = "https://" + ipAddress + ":8090/api/cyberPanelVersion" - - r = requests.post(url, data=finalData, verify=False) - - data = json.loads(r.text) - - if data['getVersion'] == 1: - - if float(data['currentVersion']) >= 1.6 and data['build'] >= 0: - pass - else: - data_ret = {'status': 0, - 'error_message': "Your version does not match with version of remote server.", - "dir": "Null"} - data_ret = json.dumps(data_ret) - return HttpResponse(data_ret) - else: - data_ret = {'status': 0, - 'error_message': "Not able to fetch version of remote server. Error Message: " + - data[ - 'error_message'], "dir": "Null"} - data_ret = json.dumps(data_ret) - return HttpResponse(data_ret) - - - except BaseException as msg: - data_ret = {'status': 0, - 'error_message': "Not able to fetch version of remote server. Error Message: " + str( - msg), - "dir": "Null"} - data_ret = json.dumps(data_ret) - return HttpResponse(data_ret) - - ## Fetch public key of remote server! - - finalData = json.dumps({'username': "admin", "password": password}) - - url = "https://" + ipAddress + ":8090/api/fetchSSHkey" - r = requests.post(url, data=finalData, verify=False) - data = json.loads(r.text) - - if data['pubKeyStatus'] == 1: - pubKey = data["pubKey"].strip("\n") - else: - final_json = json.dumps({'status': 0, - 'error_message': "I am sorry, I could not fetch key from remote server. Error Message: " + - data['error_message'] - }) - return HttpResponse(final_json) - - ## write key - - ## Writing key to a temporary location, to be read later by backup process. - - mailUtilities.checkHome() - - pathToKey = "/home/cyberpanel/" + str(randint(1000, 9999)) - - vhost = open(pathToKey, "w") - vhost.write(pubKey) - vhost.close() - - ## - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/remoteTransferUtilities.py" - execPath = execPath + " writeAuthKey --pathToKey " + pathToKey - output = subprocess.check_output(shlex.split(execPath)).decode("utf-8") - - if output.find("1,None") > -1: - pass - else: - final_json = json.dumps({'status': 0, 'error_message': output}) - return HttpResponse(final_json) - - ## - - try: - finalData = json.dumps({'username': "admin", "password": password}) - - url = "https://" + ipAddress + ":8090/api/fetchAccountsFromRemoteServer" - - r = requests.post(url, data=finalData, verify=False) - - data = json.loads(r.text) - - if data['fetchStatus'] == 1: - json_data = data['data'] - data_ret = {'status': 1, 'error_message': "None", - "dir": "Null", 'data': json_data} - data_ret = json.dumps(data_ret) - return HttpResponse(data_ret) - else: - data_ret = {'status': 0, - 'error_message': "Not able to fetch accounts from remote server. Error Message: " + - data['error_message'], "dir": "Null"} - data_ret = json.dumps(data_ret) - return HttpResponse(data_ret) - except BaseException as msg: - data_ret = {'status': 0, - 'error_message': "Not able to fetch accounts from remote server. Error Message: " + str( - msg), "dir": "Null"} - data_ret = json.dumps(data_ret) - return HttpResponse(data_ret) - - except BaseException as msg: - final_json = json.dumps({'status': 0, 'error_message': str(msg)}) - return HttpResponse(final_json) - - def starRemoteTransfer(self, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'remoteBackups') == 0: - return ACLManager.loadErrorJson('remoteTransferStatus', 0) - - ipAddress = data['ipAddress'] - password = data['password'] - accountsToTransfer = data['accountsToTransfer'] - - try: - - ipFile = os.path.join("/etc", "cyberpanel", "machineIP") - f = open(ipFile) - ownIP = f.read() - - finalData = json.dumps({'username': "admin", "password": password, "ipAddress": ownIP, - "accountsToTransfer": accountsToTransfer}) - - url = "https://" + ipAddress + ":8090/api/remoteTransfer" - - r = requests.post(url, data=finalData, verify=False) - - data = json.loads(r.text) - - if data['transferStatus'] == 1: - - ## Create local backup dir - - localBackupDir = os.path.join("/home", "backup") - - if not os.path.exists(localBackupDir): - command = "sudo mkdir " + localBackupDir - subprocess.call(shlex.split(command)) - - ## create local directory that will host backups - - localStoragePath = "/home/backup/transfer-" + str(data['dir']) - - ## making local storage directory for backups - - command = "sudo mkdir " + localStoragePath - subprocess.call(shlex.split(command)) - - final_json = json.dumps( - {'remoteTransferStatus': 1, 'error_message': "None", "dir": data['dir']}) - return HttpResponse(final_json) - else: - final_json = json.dumps({'remoteTransferStatus': 0, - 'error_message': "Can not initiate remote transfer. Error message: " + - data['error_message']}) - return HttpResponse(final_json) - - except BaseException as msg: - final_json = json.dumps({'remoteTransferStatus': 0, - 'error_message': "Can not initiate remote transfer. Error message: " + - str(msg)}) - return HttpResponse(final_json) - - except BaseException as msg: - final_json = json.dumps({'remoteTransferStatus': 0, 'error_message': str(msg)}) - return HttpResponse(final_json) - - def getRemoteTransferStatus(self, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'remoteBackups') == 0: - return ACLManager.loadErrorJson('remoteTransferStatus', 0) - - ipAddress = data['ipAddress'] - password = data['password'] - dir = data['dir'] - username = "admin" - - finalData = json.dumps({'dir': dir, "username": username, "password": password}) - r = requests.post("https://" + ipAddress + ":8090/api/FetchRemoteTransferStatus", data=finalData, - verify=False) - - data = json.loads(r.text) - - if data['fetchStatus'] == 1: - if data['status'].find("Backups are successfully generated and received on") > -1: - - data = {'remoteTransferStatus': 1, 'error_message': "None", "status": data['status'], - 'backupsSent': 1} - json_data = json.dumps(data) - return HttpResponse(json_data) - elif data['status'].find("[5010]") > -1: - data = {'remoteTransferStatus': 0, 'error_message': data['status'], - 'backupsSent': 0} - json_data = json.dumps(data) - return HttpResponse(json_data) - else: - data = {'remoteTransferStatus': 1, 'error_message': "None", "status": data['status'], - 'backupsSent': 0} - json_data = json.dumps(data) - return HttpResponse(json_data) - else: - data = {'remoteTransferStatus': 0, 'error_message': data['error_message'], - 'backupsSent': 0} - json_data = json.dumps(data) - return HttpResponse(json_data) - except BaseException as msg: - data = {'remoteTransferStatus': 0, 'error_message': str(msg), 'backupsSent': 0} - json_data = json.dumps(data) - return HttpResponse(json_data) - - def remoteBackupRestore(self, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - if ACLManager.currentContextPermission(currentACL, 'remoteBackups') == 0: - return ACLManager.loadErrorJson('remoteTransferStatus', 0) - - backupDir = data['backupDir'] - - backupDirComplete = "/home/backup/transfer-" + str(backupDir) - # adminEmail = admin.email - - ## - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/remoteTransferUtilities.py" - - execPath = execPath + " remoteBackupRestore --backupDirComplete " + backupDirComplete + " --backupDir " + str( - backupDir) - - subprocess.Popen(shlex.split(execPath)) - - time.sleep(3) - - data = {'remoteRestoreStatus': 1, 'error_message': 'None'} - json_data = json.dumps(data) - return HttpResponse(json_data) - - except BaseException as msg: - data = {'remoteRestoreStatus': 0, 'error_message': str(msg)} - json_data = json.dumps(data) - return HttpResponse(json_data) - - def localRestoreStatus(self, userID = None, data = None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'remoteBackups') == 0: - return ACLManager.loadErrorJson('remoteTransferStatus', 0) - - backupDir = data['backupDir'] - - # admin = Administrator.objects.get(userName=username) - backupLogPath = "/home/backup/transfer-" + backupDir + "/" + "backup_log" - - removalPath = "/home/backup/transfer-" + str(backupDir) - - time.sleep(3) - - if os.path.isfile(backupLogPath): - command = "sudo cat " + backupLogPath - status = subprocess.check_output(shlex.split(command)).decode("utf-8") - - if status.find("completed[success]") > -1: - command = "sudo rm -rf " + removalPath - # subprocess.call(shlex.split(command)) - data_ret = {'remoteTransferStatus': 1, 'error_message': "None", "status": status, "complete": 1} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - elif status.find("[5010]") > -1: - command = "sudo rm -rf " + removalPath - # subprocess.call(shlex.split(command)) - data = {'remoteTransferStatus': 0, 'error_message': status, - "status": "None", "complete": 0} - json_data = json.dumps(data) - return HttpResponse(json_data) - else: - data_ret = {'remoteTransferStatus': 1, 'error_message': "None", "status": status, "complete": 0} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - else: - data_ret = {'remoteTransferStatus': 0, 'error_message': "No such log found", "status": "None", - "complete": 0} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - except BaseException as msg: - data = {'remoteTransferStatus': 0, 'error_message': str(msg), "status": "None", "complete": 0} - json_data = json.dumps(data) - return HttpResponse(json_data) - - def cancelRemoteBackup(self, userID = None, data = None): - try: - - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'remoteBackups') == 0: - return ACLManager.loadErrorJson('cancelStatus', 0) - - ipAddress = data['ipAddress'] - password = data['password'] - dir = data['dir'] - username = "admin" - - finalData = json.dumps({'dir': dir, "username": username, "password": password}) - r = requests.post("https://" + ipAddress + ":8090/api/cancelRemoteTransfer", data=finalData, - verify=False) - - data = json.loads(r.text) - - if data['cancelStatus'] == 1: - pass - else: - logging.CyberCPLogFileWriter.writeToFile( - "Some error cancelling at remote server, see the log file for remote server.") - - path = "/home/backup/transfer-" + str(dir) - pathpid = path + "/pid" - - command = "sudo cat " + pathpid - pid = subprocess.check_output(shlex.split(command)).decode("utf-8") - - command = "sudo kill -KILL " + pid - subprocess.call(shlex.split(command)) - - command = "sudo rm -rf " + path - subprocess.call(shlex.split(command)) - - data = {'cancelStatus': 1, 'error_message': "None"} - json_data = json.dumps(data) - return HttpResponse(json_data) - - except BaseException as msg: - data = {'cancelStatus': 0, 'error_message': str(msg)} - json_data = json.dumps(data) - return HttpResponse(json_data) diff --git a/plogical/website.py b/plogical/website.py deleted file mode 100755 index ae1216d7b..000000000 --- a/plogical/website.py +++ /dev/null @@ -1,2333 +0,0 @@ -#!/usr/local/CyberCP/bin/python -import os -import os.path -import sys -import django - -sys.path.append('/usr/local/CyberCP') -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings") -django.setup() -import json -from plogical.acl import ACLManager -from plogical import CyberCPLogFileWriter as logging -from websiteFunctions.models import Websites, ChildDomains -from plogical.virtualHostUtilities import virtualHostUtilities -import subprocess -import shlex -from plogical.installUtilities import installUtilities -from django.shortcuts import HttpResponse, render -from loginSystem.models import Administrator, ACL -from packages.models import Package -from plogical.mailUtilities import mailUtilities -from random import randint -import time -import re -from plogical.childDomain import ChildDomainManager -from math import ceil -from plogical.alias import AliasManager -from plogical.applicationInstaller import ApplicationInstaller -from databases.models import Databases -from plogical import randomPassword as randomPassword -import hashlib -from plogical.mysqlUtilities import mysqlUtilities -from plogical import hashPassword -from emailMarketing.emACL import emACL -from plogical.processUtilities import ProcessUtilities -from managePHP.phpManager import PHPManager -from ApachController.ApacheVhosts import ApacheVhost -from plogical.vhostConfs import vhostConfs -from plogical.cronUtil import CronUtil -from re import match,I,M - - -class WebsiteManager: - apache = 1 - ols = 2 - lsws = 3 - - def __init__(self, domain=None, childDomain=None): - self.domain = domain - self.childDomain = childDomain - - def createWebsite(self, request=None, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - if ACLManager.currentContextPermission(currentACL, 'createWebsite') == 0: - return ACLManager.loadError() - - adminNames = ACLManager.loadAllUsers(userID) - packagesName = ACLManager.loadPackages(userID, currentACL) - phps = PHPManager.findPHPVersions() - - Data = {'packageList': packagesName, "owernList": adminNames, 'phps': phps} - return render(request, 'websiteFunctions/createWebsite.html', Data) - - except BaseException as msg: - return HttpResponse(str(msg)) - - def modifyWebsite(self, request=None, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'modifyWebsite') == 0: - return ACLManager.loadError() - - websitesName = ACLManager.findAllSites(currentACL, userID) - phps = PHPManager.findPHPVersions() - - return render(request, 'websiteFunctions/modifyWebsite.html', {'websiteList': websitesName, 'phps': phps}) - except BaseException as msg: - return HttpResponse(str(msg)) - - def deleteWebsite(self, request=None, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - if ACLManager.currentContextPermission(currentACL, 'deleteWebsite') == 0: - return ACLManager.loadError() - - websitesName = ACLManager.findAllSites(currentACL, userID) - - return render(request, 'websiteFunctions/deleteWebsite.html', {'websiteList': websitesName}) - except BaseException as msg: - return HttpResponse(str(msg)) - - def siteState(self, request=None, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - - if ACLManager.currentContextPermission(currentACL, 'suspendWebsite') == 0: - return ACLManager.loadError() - - websitesName = ACLManager.findAllSites(currentACL, userID) - - return render(request, 'websiteFunctions/suspendWebsite.html', {'websiteList': websitesName}) - except BaseException as msg: - return HttpResponse(str(msg)) - - def listWebsites(self, request=None, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - pagination = self.websitePagination(currentACL, userID) - - return render(request, 'websiteFunctions/listWebsites.html', {"pagination": pagination}) - except BaseException as msg: - return HttpResponse(str(msg)) - - def listCron(self, request=None, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - websitesName = ACLManager.findAllSites(currentACL, userID) - return render(request, 'websiteFunctions/listCron.html', {'websiteList': websitesName}) - except BaseException as msg: - return HttpResponse(str(msg)) - - def domainAlias(self, request=None, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadError() - - aliasManager = AliasManager(self.domain) - noAlias, finalAlisList = aliasManager.fetchAlisForDomains() - - path = "/home/" + self.domain + "/public_html" - - return render(request, 'websiteFunctions/domainAlias.html', { - 'masterDomain': self.domain, - 'aliases': finalAlisList, - 'path': path, - 'noAlias': noAlias - }) - except BaseException as msg: - return HttpResponse(str(msg)) - - def submitWebsiteCreation(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - if ACLManager.currentContextPermission(currentACL, 'createWebsite') == 0: - return ACLManager.loadErrorJson('createWebSiteStatus', 0) - - domain = data['domainName'] - adminEmail = data['adminEmail'] - phpSelection = data['phpSelection'] - packageName = data['package'] - websiteOwner = data['websiteOwner'] - - if not match(r'^[a-zA-Z0-9-]*[a-zA-Z0-9-]{0,61}[a-zA-Z0-9-](?:\.[a-zA-Z0-9-]{2,})+$', domain, - M | I): - data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': "Invalid domain."} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - if not match(r'\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b', adminEmail, - M | I): - data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': "Invalid email."} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - - try: - HA = data['HA'] - externalApp = 'nobody' - except: - externalApp = "".join(re.findall("[a-zA-Z]+", domain))[:7] - - try: - counter = 0 - while 1: - tWeb = Websites.objects.get(externalApp=externalApp) - externalApp = '%s%s' % (tWeb.externalApp, str(counter)) - counter = counter + 1 - except: - pass - - tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999)) - - try: - apacheBackend = str(data['apacheBackend']) - except: - apacheBackend = "0" - - ## Create Configurations - - execPath = "sudo /usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " createVirtualHost --virtualHostName " + domain + \ - " --administratorEmail " + adminEmail + " --phpVersion '" + phpSelection + \ - "' --virtualHostUser " + externalApp + " --ssl " + str(data['ssl']) + " --dkimCheck " \ - + str(data['dkimCheck']) + " --openBasedir " + str(data['openBasedir']) + \ - ' --websiteOwner ' + websiteOwner + ' --package ' + packageName + ' --tempStatusPath ' + tempStatusPath + " --apache " + apacheBackend - - ProcessUtilities.popenExecutioner(execPath) - time.sleep(2) - - data_ret = {'status': 1, 'createWebSiteStatus': 1, 'error_message': "None", - 'tempStatusPath': tempStatusPath} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - - except BaseException as msg: - data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': str(msg)} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def submitDomainCreation(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - masterDomain = data['masterDomain'] - domain = data['domainName'] - phpSelection = data['phpSelection'] - path = data['path'] - tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999)) - - if not match(r'^[a-zA-Z0-9-]*[a-zA-Z0-9-]{0,61}[a-zA-Z0-9-](?:\.[a-zA-Z0-9-]{2,})+$', domain, - M | I): - data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': "Invalid domain."} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - if ACLManager.checkOwnership(masterDomain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('createWebSiteStatus', 0) - - if currentACL['admin'] != 1: - data['openBasedir'] = 1 - - if len(path) > 0: - path = path.lstrip("/") - path = "/home/" + masterDomain + "/public_html/" + path - else: - path = "/home/" + masterDomain + "/public_html/" + domain - - try: - apacheBackend = str(data['apacheBackend']) - except: - apacheBackend = "0" - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - - execPath = execPath + " createDomain --masterDomain " + masterDomain + " --virtualHostName " + domain + \ - " --phpVersion '" + phpSelection + "' --ssl " + str(data['ssl']) + " --dkimCheck " + str( - data['dkimCheck']) \ - + " --openBasedir " + str(data['openBasedir']) + ' --path ' + path + ' --websiteOwner ' \ - + admin.userName + ' --tempStatusPath ' + tempStatusPath + " --apache " + apacheBackend - - ProcessUtilities.popenExecutioner(execPath) - time.sleep(2) - - data_ret = {'status': 1, 'createWebSiteStatus': 1, 'error_message': "None", - 'tempStatusPath': tempStatusPath} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - except BaseException as msg: - data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': str(msg)} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def fetchDomains(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - masterDomain = data['masterDomain'] - - if ACLManager.checkOwnership(masterDomain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('fetchStatus', 0) - - cdManager = ChildDomainManager(masterDomain) - json_data = cdManager.findChildDomainsJson() - - final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": json_data}) - 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 searchWebsites(self, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - try: - json_data = self.searchWebsitesJson(currentACL, userID, data['patternAdded']) - except BaseException as msg: - tempData = {} - tempData['page'] = 1 - return self.getFurtherAccounts(userID, tempData) - - pagination = self.websitePagination(currentACL, userID) - final_dic = {'status': 1, 'listWebSiteStatus': 1, 'error_message': "None", "data": json_data, - 'pagination': pagination} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - except BaseException as msg: - dic = {'status': 1, 'listWebSiteStatus': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - def getFurtherAccounts(self, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - pageNumber = int(data['page']) - json_data = self.findWebsitesJson(currentACL, userID, pageNumber) - pagination = self.websitePagination(currentACL, userID) - final_dic = {'status': 1, 'listWebSiteStatus': 1, 'error_message': "None", "data": json_data, - 'pagination': pagination} - final_json = json.dumps(final_dic) - return HttpResponse(final_json) - except BaseException as msg: - dic = {'status': 1, 'listWebSiteStatus': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - def submitWebsiteDeletion(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - if ACLManager.currentContextPermission(currentACL, 'deleteWebsite') == 0: - return ACLManager.loadErrorJson('websiteDeleteStatus', 0) - - websiteName = data['websiteName'] - - admin = Administrator.objects.get(pk=userID) - if ACLManager.checkOwnership(websiteName, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('websiteDeleteStatus', 0) - - ## Deleting master domain - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " deleteVirtualHostConfigurations --virtualHostName " + websiteName - ProcessUtilities.popenExecutioner(execPath) - - data_ret = {'status': 1, 'websiteDeleteStatus': 1, 'error_message': "None"} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - except BaseException as msg: - data_ret = {'status': 0, 'websiteDeleteStatus': 0, 'error_message': str(msg)} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def submitDomainDeletion(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - websiteName = data['websiteName'] - - if ACLManager.checkOwnership(websiteName, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('websiteDeleteStatus', 0) - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " deleteDomain --virtualHostName " + websiteName - ProcessUtilities.outputExecutioner(execPath) - - data_ret = {'status': 1, 'websiteDeleteStatus': 1, 'error_message': "None"} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - except BaseException as msg: - data_ret = {'status': 0, 'websiteDeleteStatus': 0, 'error_message': str(msg)} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def submitWebsiteStatus(self, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - if ACLManager.currentContextPermission(currentACL, 'suspendWebsite') == 0: - return ACLManager.loadErrorJson('websiteStatus', 0) - - websiteName = data['websiteName'] - state = data['state'] - - website = Websites.objects.get(domain=websiteName) - - if state == "Suspend": - confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + websiteName - command = "sudo mv " + confPath + " " + confPath + "-suspended" - ProcessUtilities.popenExecutioner(command) - installUtilities.reStartLiteSpeedSocket() - website.state = 0 - else: - confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + websiteName - - command = "sudo mv " + confPath + "-suspended" + " " + confPath - ProcessUtilities.executioner(command) - - command = "chown -R " + "lsadm" + ":" + "lsadm" + " " + confPath - ProcessUtilities.popenExecutioner(command) - - installUtilities.reStartLiteSpeedSocket() - website.state = 1 - - website.save() - - data_ret = {'websiteStatus': 1, 'error_message': "None"} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - except BaseException as msg: - - data_ret = {'websiteStatus': 0, 'error_message': str(msg)} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def submitWebsiteModify(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - if ACLManager.currentContextPermission(currentACL, 'modifyWebsite') == 0: - return ACLManager.loadErrorJson('modifyStatus', 0) - - admin = Administrator.objects.get(pk=userID) - if ACLManager.checkOwnership(data['websiteToBeModified'], admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('websiteDeleteStatus', 0) - - packs = ACLManager.loadPackages(userID, currentACL) - admins = ACLManager.loadAllUsers(userID) - - ## Get packs name - - json_data = "[" - checker = 0 - - for items in packs: - dic = {"pack": items} - - if checker == 0: - json_data = json_data + json.dumps(dic) - checker = 1 - else: - json_data = json_data + ',' + json.dumps(dic) - - json_data = json_data + ']' - - ### Get admin names - - admin_data = "[" - checker = 0 - - for items in admins: - dic = {"adminNames": items} - - if checker == 0: - admin_data = admin_data + json.dumps(dic) - checker = 1 - else: - admin_data = admin_data + ',' + json.dumps(dic) - - admin_data = admin_data + ']' - - websiteToBeModified = data['websiteToBeModified'] - - modifyWeb = Websites.objects.get(domain=websiteToBeModified) - - email = modifyWeb.adminEmail - currentPack = modifyWeb.package.packageName - owner = modifyWeb.admin.userName - - data_ret = {'status': 1, 'modifyStatus': 1, 'error_message': "None", "adminEmail": email, - "packages": json_data, "current_pack": currentPack, "adminNames": admin_data, - 'currentAdmin': owner} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - except BaseException as msg: - dic = {'status': 0, 'modifyStatus': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - def fetchWebsiteDataJSON(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - if ACLManager.currentContextPermission(currentACL, 'createWebsite') == 0: - return ACLManager.loadErrorJson('createWebSiteStatus', 0) - - packs = ACLManager.loadPackages(userID, currentACL) - admins = ACLManager.loadAllUsers(userID) - - ## Get packs name - - json_data = "[" - checker = 0 - - for items in packs: - dic = {"pack": items} - - if checker == 0: - json_data = json_data + json.dumps(dic) - checker = 1 - else: - json_data = json_data + ',' + json.dumps(dic) - - json_data = json_data + ']' - - ### Get admin names - - admin_data = "[" - checker = 0 - - for items in admins: - dic = {"adminNames": items} - - if checker == 0: - admin_data = admin_data + json.dumps(dic) - checker = 1 - else: - admin_data = admin_data + ',' + json.dumps(dic) - - admin_data = admin_data + ']' - - data_ret = {'status': 1, 'error_message': "None", - "packages": json_data, "adminNames": admin_data} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - except BaseException as msg: - dic = {'status': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - def saveWebsiteChanges(self, userID=None, data=None): - try: - domain = data['domain'] - package = data['packForWeb'] - email = data['email'] - phpVersion = data['phpVersion'] - newUser = data['admin'] - - currentACL = ACLManager.loadedACL(userID) - if ACLManager.currentContextPermission(currentACL, 'modifyWebsite') == 0: - return ACLManager.loadErrorJson('saveStatus', 0) - - admin = Administrator.objects.get(pk=userID) - if ACLManager.checkOwnership(domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('websiteDeleteStatus', 0) - - confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + domain - completePathToConfigFile = confPath + "/vhost.conf" - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " changePHP --phpVersion '" + phpVersion + "' --path " + completePathToConfigFile - ProcessUtilities.popenExecutioner(execPath) - - #### - - newOwner = Administrator.objects.get(userName=newUser) - - modifyWeb = Websites.objects.get(domain=domain) - webpack = Package.objects.get(packageName=package) - - modifyWeb.package = webpack - modifyWeb.adminEmail = email - modifyWeb.phpSelection = phpVersion - modifyWeb.admin = newOwner - - modifyWeb.save() - - data_ret = {'status': 1, 'saveStatus': 1, 'error_message': "None"} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - except BaseException as msg: - data_ret = {'status': 0, 'saveStatus': 0, 'error_message': str(msg)} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def loadDomainHome(self, request=None, userID=None, data=None): - - if Websites.objects.filter(domain=self.domain).exists(): - - currentACL = ACLManager.loadedACL(userID) - website = Websites.objects.get(domain=self.domain) - admin = Administrator.objects.get(pk=userID) - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadError() - - Data = {} - - marketingStatus = emACL.checkIfEMEnabled(admin.userName) - - Data['marketingStatus'] = marketingStatus - Data['ftpTotal'] = website.package.ftpAccounts - Data['ftpUsed'] = website.users_set.all().count() - - Data['databasesUsed'] = website.databases_set.all().count() - Data['databasesTotal'] = website.package.dataBases - - Data['domain'] = self.domain - - diskUsageDetails = virtualHostUtilities.getDiskUsage("/home/" + self.domain, website.package.diskSpace) - - ## bw usage calculation - - try: - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " findDomainBW --virtualHostName " + self.domain + " --bandwidth " + str( - website.package.bandwidth) - - output = ProcessUtilities.outputExecutioner(execPath) - bwData = output.split(",") - except BaseException as msg: - logging.CyberCPLogFileWriter.writeToFile(str(msg)) - bwData = [0, 0] - - ## bw usage calculations - - Data['bwInMBTotal'] = website.package.bandwidth - Data['bwInMB'] = bwData[0] - Data['bwUsage'] = bwData[1] - - if diskUsageDetails != None: - if diskUsageDetails[1] > 100: - diskUsageDetails[1] = 100 - - Data['diskUsage'] = diskUsageDetails[1] - Data['diskInMB'] = diskUsageDetails[0] - Data['diskInMBTotal'] = website.package.diskSpace - else: - Data['diskUsage'] = 0 - Data['diskInMB'] = 0 - Data['diskInMBTotal'] = website.package.diskSpace - - Data['phps'] = PHPManager.findPHPVersions() - - servicePath = '/home/cyberpanel/postfix' - if os.path.exists(servicePath): - Data['email'] = 1 - else: - Data['email'] = 0 - - servicePath = '/home/cyberpanel/pureftpd' - if os.path.exists(servicePath): - Data['ftp'] = 1 - else: - Data['ftp'] = 0 - - return render(request, 'websiteFunctions/website.html', Data) - - else: - return render(request, 'websiteFunctions/website.html', - {"error": 1, "domain": "This domain does not exists."}) - - def launchChild(self, request=None, userID=None, data=None): - - if ChildDomains.objects.filter(domain=self.childDomain).exists(): - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadError() - - website = Websites.objects.get(domain=self.domain) - - Data = {} - - Data['ftpTotal'] = website.package.ftpAccounts - Data['ftpUsed'] = website.users_set.all().count() - - Data['databasesUsed'] = website.databases_set.all().count() - Data['databasesTotal'] = website.package.dataBases - - Data['domain'] = self.domain - Data['childDomain'] = self.childDomain - - diskUsageDetails = virtualHostUtilities.getDiskUsage("/home/" + self.domain, website.package.diskSpace) - - ## bw usage calculation - - try: - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " findDomainBW --virtualHostName " + self.domain + " --bandwidth " + str( - website.package.bandwidth) - - output = ProcessUtilities.outputExecutioner(execPath) - bwData = output.split(",") - except BaseException as msg: - logging.CyberCPLogFileWriter.writeToFile(str(msg)) - bwData = [0, 0] - - ## bw usage calculations - - Data['bwInMBTotal'] = website.package.bandwidth - Data['bwInMB'] = bwData[0] - Data['bwUsage'] = bwData[1] - - if diskUsageDetails != None: - if diskUsageDetails[1] > 100: - diskUsageDetails[1] = 100 - - Data['diskUsage'] = diskUsageDetails[1] - Data['diskInMB'] = diskUsageDetails[0] - Data['diskInMBTotal'] = website.package.diskSpace - else: - Data['diskUsage'] = 0 - Data['diskInMB'] = 0 - Data['diskInMBTotal'] = website.package.diskSpace - - Data['phps'] = PHPManager.findPHPVersions() - - servicePath = '/home/cyberpanel/postfix' - if os.path.exists(servicePath): - Data['email'] = 1 - else: - Data['email'] = 0 - - servicePath = '/home/cyberpanel/pureftpd' - if os.path.exists(servicePath): - Data['ftp'] = 1 - else: - Data['ftp'] = 0 - - return render(request, 'websiteFunctions/launchChild.html', Data) - else: - return render(request, 'websiteFunctions/launchChild.html', - {"error": 1, "domain": "This child domain does not exists"}) - - def getDataFromLogFile(self, userID=None, data=None): - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - logType = data['logType'] - self.domain = data['virtualHost'] - page = data['page'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('logstatus', 0) - - if logType == 1: - fileName = "/home/" + self.domain + "/logs/" + self.domain + ".access_log" - else: - fileName = "/home/" + self.domain + "/logs/" + self.domain + ".error_log" - - ## get Logs - website = Websites.objects.get(domain=self.domain) - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " getAccessLogs --path " + fileName + " --page " + str(page) - output = ProcessUtilities.outputExecutioner(execPath, website.externalApp) - - if output.find("1,None") > -1: - final_json = json.dumps( - {'status': 0, 'logstatus': 0, 'error_message': "Not able to fetch logs, see CyberPanel main log file!"}) - return HttpResponse(final_json) - - ## get log ends here. - - data = output.split("\n") - - json_data = "[" - checker = 0 - - for items in reversed(data): - if len(items) > 10: - logData = items.split(" ") - domain = logData[0].strip('"') - ipAddress = logData[1] - time = (logData[4]).strip("[").strip("]") - resource = logData[7].strip('"') - size = logData[10].replace('"', '') - - dic = {'domain': domain, - 'ipAddress': ipAddress, - 'time': time, - 'resource': resource, - 'size': size, - } - - if checker == 0: - json_data = json_data + json.dumps(dic) - checker = 1 - else: - json_data = json_data + ',' + json.dumps(dic) - - json_data = json_data + ']' - final_json = json.dumps({'status': 1, 'logstatus': 1, 'error_message': "None", "data": json_data}) - return HttpResponse(final_json) - - def fetchErrorLogs(self, userID=None, data=None): - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['virtualHost'] - page = data['page'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('logstatus', 0) - - fileName = "/home/" + self.domain + "/logs/" + self.domain + ".error_log" - - ## get Logs - website = Websites.objects.get(domain=self.domain) - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " getErrorLogs --path " + fileName + " --page " + str(page) - - output = ProcessUtilities.outputExecutioner(execPath, website.externalApp) - - if output.find("1,None") > -1: - final_json = json.dumps( - {'status': 0, 'logstatus': 0, 'error_message': "Not able to fetch logs, see CyberPanel main log file!"}) - return HttpResponse(final_json) - - ## get log ends here. - - final_json = json.dumps({'status': 1, 'logstatus': 1, 'error_message': "None", "data": output}) - return HttpResponse(final_json) - - def getDataFromConfigFile(self, userID=None, data=None): - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - self.domain = data['virtualHost'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('configstatus', 0) - - filePath = installUtilities.Server_root_path + "/conf/vhosts/" + self.domain + "/vhost.conf" - - command = 'sudo cat ' + filePath - configData = ProcessUtilities.outputExecutioner(command, 'lsadm') - - if len(configData) == 0: - status = {'status': 0, "configstatus": 0, "error_message": "Configuration file is currently empty!"} - - final_json = json.dumps(status) - return HttpResponse(final_json) - - status = {'status': 1, "configstatus": 1, "configData": configData} - final_json = json.dumps(status) - return HttpResponse(final_json) - - def saveConfigsToFile(self, userID=None, data=None): - - currentACL = ACLManager.loadedACL(userID) - - if currentACL['admin'] != 1: - return ACLManager.loadErrorJson('configstatus', 0) - - configData = data['configData'] - self.domain = data['virtualHost'] - - mailUtilities.checkHome() - - tempPath = "/home/cyberpanel/" + str(randint(1000, 9999)) - - vhost = open(tempPath, "w") - - vhost.write(configData) - - vhost.close() - - ## writing data temporary to file - - filePath = installUtilities.Server_root_path + "/conf/vhosts/" + self.domain + "/vhost.conf" - - ## save configuration data - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " saveVHostConfigs --path " + filePath + " --tempPath " + tempPath - - output = ProcessUtilities.outputExecutioner(execPath) - - if output.find("1,None") > -1: - status = {"configstatus": 1} - - final_json = json.dumps(status) - return HttpResponse(final_json) - else: - data_ret = {'configstatus': 0, 'error_message': output} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - ## save configuration data ends - - def getRewriteRules(self, userID=None, data=None): - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - self.domain = data['virtualHost'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('rewriteStatus', 0) - - try: - childDom = ChildDomains.objects.get(domain=self.domain) - filePath = childDom.path + '/.htaccess' - except: - filePath = "/home/" + self.domain + "/public_html/.htaccess" - - try: - rewriteRules = open(filePath, "r").read() - - if len(rewriteRules) == 0: - status = {"rewriteStatus": 1, "error_message": "Rules file is currently empty"} - final_json = json.dumps(status) - return HttpResponse(final_json) - - status = {"rewriteStatus": 1, "rewriteRules": rewriteRules} - - final_json = json.dumps(status) - return HttpResponse(final_json) - - except IOError: - status = {"rewriteStatus": 1, "error_message": "none", "rewriteRules": ""} - final_json = json.dumps(status) - return HttpResponse(final_json) - - def saveRewriteRules(self, userID=None, data=None): - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - self.domain = data['virtualHost'] - rewriteRules = data['rewriteRules'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('rewriteStatus', 0) - - ## writing data temporary to file - - mailUtilities.checkHome() - tempPath = "/tmp/" + str(randint(1000, 9999)) - vhost = open(tempPath, "w") - vhost.write(rewriteRules) - vhost.close() - - ## writing data temporary to file - - try: - childDomain = ChildDomains.objects.get(domain=self.domain) - filePath = childDomain.path + '/.htaccess' - externalApp = childDomain.master.externalApp - except: - filePath = "/home/" + self.domain + "/public_html/.htaccess" - website = Websites.objects.get(domain=self.domain) - externalApp = website.externalApp - - ## save configuration data - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " saveRewriteRules --virtualHostName " + self.domain + " --path " + filePath + " --tempPath " + tempPath - - output = ProcessUtilities.outputExecutioner(execPath, externalApp) - - if output.find("1,None") > -1: - installUtilities.reStartLiteSpeedSocket() - status = {"rewriteStatus": 1, 'error_message': output} - final_json = json.dumps(status) - return HttpResponse(final_json) - else: - data_ret = {'rewriteStatus': 0, 'error_message': output} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def saveSSL(self, userID=None, data=None): - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - self.domain = data['virtualHost'] - key = data['key'] - cert = data['cert'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('sslStatus', 0) - - mailUtilities.checkHome() - - ## writing data temporary to file - - tempKeyPath = "/home/cyberpanel/" + str(randint(1000, 9999)) - vhost = open(tempKeyPath, "w") - vhost.write(key) - vhost.close() - - tempCertPath = "/home/cyberpanel/" + str(randint(1000, 9999)) - vhost = open(tempCertPath, "w") - vhost.write(cert) - vhost.close() - - ## writing data temporary to file - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " saveSSL --virtualHostName " + self.domain + " --tempKeyPath " + tempKeyPath + " --tempCertPath " + tempCertPath - output = ProcessUtilities.outputExecutioner(execPath) - - if output.find("1,None") > -1: - data_ret = {'sslStatus': 1, 'error_message': "None"} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - else: - logging.CyberCPLogFileWriter.writeToFile( - output) - data_ret = {'sslStatus': 0, 'error_message': output} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def changePHP(self, userID=None, data=None): - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - self.domain = data['childDomain'] - phpVersion = data['phpSelection'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('changePHP', 0) - - confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + self.domain - completePathToConfigFile = confPath + "/vhost.conf" - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " changePHP --phpVersion '" + phpVersion + "' --path " + completePathToConfigFile - ProcessUtilities.popenExecutioner(execPath) - - data_ret = {'status': 1, 'changePHP': 1, 'error_message': "None"} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def getWebsiteCron(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - self.domain = data['domain'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('getWebsiteCron', 0) - - website = Websites.objects.get(domain=self.domain) - - if Websites.objects.filter(domain=self.domain).exists(): - pass - else: - dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - CronUtil.CronPrem(1) - - crons = [] - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py" - execPath = execPath + " getWebsiteCron --externalApp " + website.externalApp - - f = ProcessUtilities.outputExecutioner(execPath, website.externalApp) - - CronUtil.CronPrem(0) - - if f.find("0,CyberPanel,") > -1: - data_ret = {'getWebsiteCron': 0, "user": website.externalApp, "crons": {}} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - counter = 0 - for line in f.split("\n"): - if line: - split = line.split(" ", 5) - if len(split) == 6: - counter += 1 - crons.append({"line": counter, - "minute": split[0], - "hour": split[1], - "monthday": split[2], - "month": split[3], - "weekday": split[4], - "command": split[5]}) - - data_ret = {'getWebsiteCron': 1, "user": website.externalApp, "crons": crons} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - except BaseException as msg: - logging.CyberCPLogFileWriter.writeToFile(str(msg)) - dic = {'getWebsiteCron': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - def getCronbyLine(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['domain'] - line = data['line'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('getWebsiteCron', 0) - - if Websites.objects.filter(domain=self.domain).exists(): - pass - else: - dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - line -= 1 - website = Websites.objects.get(domain=self.domain) - - try: - CronUtil.CronPrem(1) - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py" - execPath = execPath + " getWebsiteCron --externalApp " + website.externalApp - - f = ProcessUtilities.outputExecutioner(execPath, website.externalApp) - CronUtil.CronPrem(0) - except subprocess.CalledProcessError as error: - dic = {'getWebsiteCron': 0, 'error_message': 'Unable to access Cron file'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - f = f.split("\n") - cron = f[line] - - cron = cron.split(" ", 5) - if len(cron) != 6: - dic = {'getWebsiteCron': 0, 'error_message': 'Cron line incorrect'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - data_ret = {"getWebsiteCron": 1, - "user": website.externalApp, - "cron": { - "minute": cron[0], - "hour": cron[1], - "monthday": cron[2], - "month": cron[3], - "weekday": cron[4], - "command": cron[5], - }, - "line": line} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - except BaseException as msg: - print(msg) - dic = {'getWebsiteCron': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - def saveCronChanges(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['domain'] - line = data['line'] - - minute = data['minute'] - hour = data['hour'] - monthday = data['monthday'] - month = data['month'] - weekday = data['weekday'] - command = data['cronCommand'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('getWebsiteCron', 0) - - website = Websites.objects.get(domain=self.domain) - - finalCron = "%s %s %s %s %s %s" % (minute, hour, monthday, month, weekday, command) - - CronUtil.CronPrem(1) - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py" - execPath = execPath + " saveCronChanges --externalApp " + website.externalApp + " --line " + str( - line) + " --finalCron '" + finalCron + "'" - output = ProcessUtilities.outputExecutioner(execPath, website.externalApp) - CronUtil.CronPrem(0) - - if output.find("1,") > -1: - data_ret = {"getWebsiteCron": 1, - "user": website.externalApp, - "cron": finalCron, - "line": line} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - else: - dic = {'getWebsiteCron': 0, 'error_message': output} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - except BaseException as msg: - dic = {'getWebsiteCron': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - def remCronbyLine(self, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['domain'] - line = data['line'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('addNewCron', 0) - - website = Websites.objects.get(domain=self.domain) - - CronUtil.CronPrem(1) - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py" - execPath = execPath + " remCronbyLine --externalApp " + website.externalApp + " --line " + str( - line) - output = ProcessUtilities.outputExecutioner(execPath, website.externalApp) - - CronUtil.CronPrem(0) - - if output.find("1,") > -1: - data_ret = {"remCronbyLine": 1, - "user": website.externalApp, - "removeLine": output.split(',')[1], - "line": line} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - else: - dic = {'remCronbyLine': 0, 'error_message': output} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - - except BaseException as msg: - dic = {'remCronbyLine': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - def addNewCron(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['domain'] - minute = data['minute'] - hour = data['hour'] - monthday = data['monthday'] - month = data['month'] - weekday = data['weekday'] - command = data['cronCommand'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('addNewCron', 0) - - website = Websites.objects.get(domain=self.domain) - - CronPath = '/var/spool/cron/%s' % (website.externalApp) - - commandT = 'touch %s' % (CronPath) - ProcessUtilities.executioner(commandT, 'root') - commandT = 'chown %s:%s %s' % (website.externalApp, website.externalApp, CronPath) - ProcessUtilities.executioner(commandT, 'root') - - CronUtil.CronPrem(1) - - finalCron = "%s %s %s %s %s %s" % (minute, hour, monthday, month, weekday, command) - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py" - execPath = execPath + " addNewCron --externalApp " + website.externalApp + " --finalCron '" + finalCron + "'" - output = ProcessUtilities.outputExecutioner(execPath, website.externalApp) - - CronUtil.CronPrem(0) - - if output.find("1,") > -1: - - data_ret = {"addNewCron": 1, - "user": website.externalApp, - "cron": finalCron} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - else: - dic = {'addNewCron': 0, 'error_message': output} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - - except BaseException as msg: - dic = {'addNewCron': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - def submitAliasCreation(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['masterDomain'] - aliasDomain = data['aliasDomain'] - ssl = data['ssl'] - - if not match(r'^[a-zA-Z0-9-]*[a-zA-Z0-9-]{0,61}[a-zA-Z0-9-](?:\.[a-zA-Z0-9-]{2,})+$', aliasDomain, - M | I): - data_ret = {'status': 0, 'createAliasStatus': 0, 'error_message': "Invalid domain."} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('createAliasStatus', 0) - - sslpath = "/home/" + self.domain + "/public_html" - - ## Create Configurations - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - - execPath = execPath + " createAlias --masterDomain " + self.domain + " --aliasDomain " + aliasDomain + " --ssl " + str( - ssl) + " --sslPath " + sslpath + " --administratorEmail " + admin.email + ' --websiteOwner ' + admin.userName - - output = ProcessUtilities.outputExecutioner(execPath) - - if output.find("1,None") > -1: - pass - else: - data_ret = {'createAliasStatus': 0, 'error_message': output, "existsStatus": 0} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - ## Create Configurations ends here - - data_ret = {'createAliasStatus': 1, 'error_message': "None", "existsStatus": 0} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - - - except BaseException as msg: - data_ret = {'createAliasStatus': 0, 'error_message': str(msg), "existsStatus": 0} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def issueAliasSSL(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['masterDomain'] - aliasDomain = data['aliasDomain'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('sslStatus', 0) - - sslpath = "/home/" + self.domain + "/public_html" - - ## Create Configurations - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " issueAliasSSL --masterDomain " + self.domain + " --aliasDomain " + aliasDomain + " --sslPath " + sslpath + " --administratorEmail " + admin.email - - output = ProcessUtilities.outputExecutioner(execPath) - - if output.find("1,None") > -1: - data_ret = {'sslStatus': 1, 'error_message': "None", "existsStatus": 0} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - else: - data_ret = {'sslStatus': 0, 'error_message': output, "existsStatus": 0} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - except BaseException as msg: - data_ret = {'sslStatus': 0, 'error_message': str(msg), "existsStatus": 0} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def delateAlias(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['masterDomain'] - aliasDomain = data['aliasDomain'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('deleteAlias', 0) - - ## Create Configurations - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " deleteAlias --masterDomain " + self.domain + " --aliasDomain " + aliasDomain - output = ProcessUtilities.outputExecutioner(execPath) - - if output.find("1,None") > -1: - data_ret = {'deleteAlias': 1, 'error_message': "None", "existsStatus": 0} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - else: - data_ret = {'deleteAlias': 0, 'error_message': output, "existsStatus": 0} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - - except BaseException as msg: - data_ret = {'deleteAlias': 0, 'error_message': str(msg), "existsStatus": 0} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def changeOpenBasedir(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - - self.domain = data['domainName'] - openBasedirValue = data['openBasedirValue'] - - if currentACL['admin'] == 1: - pass - else: - return ACLManager.loadErrorJson('changeOpenBasedir', 0) - - execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " changeOpenBasedir --virtualHostName '" + self.domain + "' --openBasedirValue " + openBasedirValue - output = ProcessUtilities.popenExecutioner(execPath) - - data_ret = {'status': 1, 'changeOpenBasedir': 1, 'error_message': "None"} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - except BaseException as msg: - data_ret = {'status': 0, 'changeOpenBasedir': 0, 'error_message': str(msg)} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def wordpressInstall(self, request=None, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadError() - - return render(request, 'websiteFunctions/installWordPress.html', {'domainName': self.domain}) - - except BaseException as msg: - return HttpResponse(str(msg)) - - def installWordpress(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['domain'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('installStatus', 0) - - mailUtilities.checkHome() - - extraArgs = {} - extraArgs['admin'] = admin - extraArgs['domainName'] = data['domain'] - extraArgs['home'] = data['home'] - extraArgs['blogTitle'] = data['blogTitle'] - extraArgs['adminUser'] = data['adminUser'] - extraArgs['adminPassword'] = data['passwordByPass'] - extraArgs['adminEmail'] = data['adminEmail'] - extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) - - if data['home'] == '0': - extraArgs['path'] = data['path'] - - background = ApplicationInstaller('wordpress', extraArgs) - background.start() - - time.sleep(2) - - data_ret = {'status': 1, 'installStatus': 1, 'error_message': 'None', - 'tempStatusPath': extraArgs['tempStatusPath']} - 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 installWordpressStatus(self, userID=None, data=None): - try: - statusFile = data['statusFile'] - - statusData = ProcessUtilities.outputExecutioner("sudo cat " + statusFile).splitlines() - - lastLine = statusData[-1] - - if lastLine.find('[200]') > -1: - command = 'sudo rm -f ' + statusFile - subprocess.call(shlex.split(command)) - data_ret = {'abort': 1, 'installStatus': 1, 'installationProgress': "100", - 'currentStatus': 'Successfully Installed.'} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - elif lastLine.find('[404]') > -1: - data_ret = {'abort': 1, 'installStatus': 0, 'installationProgress': "0", - 'error_message': lastLine} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - else: - progress = lastLine.split(',') - currentStatus = progress[0] - try: - installationProgress = progress[1] - except: - installationProgress = 0 - data_ret = {'abort': 0, 'installStatus': 0, 'installationProgress': installationProgress, - 'currentStatus': currentStatus} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - except BaseException as msg: - data_ret = {'abort': 1, 'installStatus': 0, 'installationProgress': "0", 'error_message': str(msg)} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def joomlaInstall(self, request=None, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadError() - - return render(request, 'websiteFunctions/installJoomla.html', {'domainName': self.domain}) - except BaseException as msg: - return HttpResponse(str(msg)) - - def installJoomla(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['domain'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('installStatus', 0) - - domainName = data['domain'] - home = data['home'] - - sitename = data['sitename'] - username = data['username'] - password = data['passwordByPass'] - prefix = data['prefix'] - - mailUtilities.checkHome() - - tempStatusPath = "/tmp/" + str(randint(1000, 9999)) - - statusFile = open(tempStatusPath, 'w') - statusFile.writelines('Setting up paths,0') - statusFile.close() - os.chmod(tempStatusPath, 0o777) - - finalPath = "" - - admin = Administrator.objects.get(pk=userID) - - ## DB Creation - - statusFile = open(tempStatusPath, 'w') - statusFile.writelines('Creating database..,10') - statusFile.close() - - dbName = randomPassword.generate_pass() - dbUser = dbName - dbPassword = randomPassword.generate_pass() - - if Databases.objects.filter(dbName=dbName).exists() or Databases.objects.filter( - dbUser=dbUser).exists(): - data_ret = {'status': 0, 'installStatus': 0, - 'error_message': "0,This database or user is already taken."} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - result = mysqlUtilities.createDatabase(dbName, dbUser, dbPassword) - - if result == 1: - pass - else: - data_ret = {'status': 0, 'installStatus': 0, - 'error_message': "0,Not able to create database."} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - ## - - try: - website = ChildDomains.objects.get(domain=domainName) - externalApp = website.master.externalApp - - if website.master.package.dataBases > website.master.databases_set.all().count(): - pass - else: - data_ret = {'status': 0, 'installStatus': 0, - 'error_message': "0,Maximum database limit reached for this website."} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - if home == '0': - path = data['path'] - finalPath = website.path.rstrip('/') + "/" + path + "/" - else: - finalPath = website.path + "/" - - db = Databases(website=website.master, dbName=dbName, dbUser=dbUser) - db.save() - - except: - website = Websites.objects.get(domain=domainName) - externalApp = website.externalApp - - if website.package.dataBases > website.databases_set.all().count(): - pass - else: - data_ret = {'status': 0, 'installStatus': 0, - 'error_message': "0,Maximum database limit reached for this website."} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - if home == '0': - path = data['path'] - finalPath = "/home/" + domainName + "/public_html/" + path + "/" - else: - finalPath = "/home/" + domainName + "/public_html/" - - db = Databases(website=website, dbName=dbName, dbUser=dbUser) - db.save() - - if finalPath.find("..") > -1: - data_ret = {'status': 0, 'installStatus': 0, - 'error_message': "Specified path must be inside virtual host home!"} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - ## Installation - salt = randomPassword.generate_pass(32) - # return salt - password_hash = hashlib.md5((password + salt).encode('utf-8')).hexdigest() - password = password_hash + ":" + salt - - statusFile = open(tempStatusPath, 'w') - statusFile.writelines('Downloading Joomla Core..,20') - statusFile.close() - - execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - - execPath = execPath + " installJoomla --virtualHostName " + domainName + \ - " --virtualHostUser " + externalApp + " --path " + finalPath + " --dbName " + dbName + \ - " --dbUser " + dbUser + " --dbPassword " + dbPassword + " --username " + username + \ - " --password " + password + " --prefix " + prefix + " --sitename '" + sitename + "'" \ - + " --tempStatusPath " + tempStatusPath - - # return execPath - - ProcessUtilities.popenExecutioner(execPath, externalApp) - - data_ret = {'status': 1, "installStatus": 1, 'tempStatusPath': tempStatusPath} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - ## Installation ends - - 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 setupGit(self, request=None, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - website = Websites.objects.get(domain=self.domain) - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson() - - path = '/home/cyberpanel/' + self.domain + '.git' - - if os.path.exists(path): - ipFile = "/etc/cyberpanel/machineIP" - f = open(ipFile) - ipData = f.read() - ipAddress = ipData.split('\n', 1)[0] - - port = ProcessUtilities.fetchCurrentPort() - - webhookURL = 'https://' + ipAddress + ':%s/websites/' % (port) + self.domain + '/gitNotify' - - return render(request, 'websiteFunctions/setupGit.html', - {'domainName': self.domain, 'installed': 1, 'webhookURL': webhookURL}) - else: - - command = "ssh-keygen -f /home/%s/.ssh/%s -t rsa -N ''" % (self.domain, website.externalApp) - ProcessUtilities.executioner(command, website.externalApp) - - ### - - configContent = """Host github.com -IdentityFile /home/%s/.ssh/%s -""" % (self.domain, website.externalApp) - - path = "/home/cyberpanel/config" - writeToFile = open(path, 'w') - writeToFile.writelines(configContent) - writeToFile.close() - - command = 'mv %s /home/%s/.ssh/config' % (path, self.domain) - ProcessUtilities.executioner(command) - - command = 'sudo chown %s:%s /home/%s/.ssh/config' % (website.externalApp, website.externalApp, self.domain) - ProcessUtilities.executioner(command) - - command = 'cat /home/%s/.ssh/%s.pub' % (self.domain, website.externalApp) - deploymentKey = ProcessUtilities.outputExecutioner(command, website.externalApp) - - return render(request, 'websiteFunctions/setupGit.html', - {'domainName': self.domain, 'deploymentKey': deploymentKey, 'installed': 0}) - except BaseException as msg: - return HttpResponse(str(msg)) - - def setupGitRepo(self, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['domain'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('installStatus', 0) - - mailUtilities.checkHome() - - extraArgs = {} - extraArgs['admin'] = admin - extraArgs['domainName'] = data['domain'] - extraArgs['username'] = data['username'] - extraArgs['reponame'] = data['reponame'] - extraArgs['branch'] = data['branch'] - extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) - extraArgs['defaultProvider'] = data['defaultProvider'] - - background = ApplicationInstaller('git', extraArgs) - background.start() - - time.sleep(2) - - data_ret = {'installStatus': 1, 'error_message': 'None', - 'tempStatusPath': extraArgs['tempStatusPath']} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - - except BaseException as msg: - data_ret = {'installStatus': 0, 'error_message': str(msg)} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def gitNotify(self, userID=None, data=None): - try: - - extraArgs = {} - extraArgs['domain'] = self.domain - - background = ApplicationInstaller('pull', extraArgs) - background.start() - - data_ret = {'pulled': 1, 'error_message': 'None'} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - except BaseException as msg: - data_ret = {'pulled': 0, 'error_message': str(msg)} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def detachRepo(self, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['domain'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson() - - mailUtilities.checkHome() - - extraArgs = {} - extraArgs['domainName'] = data['domain'] - extraArgs['admin'] = admin - - background = ApplicationInstaller('detach', extraArgs) - background.start() - - time.sleep(2) - - 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 changeBranch(self, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['domain'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson() - - mailUtilities.checkHome() - - extraArgs = {} - extraArgs['domainName'] = data['domain'] - extraArgs['githubBranch'] = data['githubBranch'] - extraArgs['admin'] = admin - - background = ApplicationInstaller('changeBranch', extraArgs) - background.start() - - time.sleep(2) - - 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 installPrestaShop(self, request=None, userID=None, data=None): - try: - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadError() - - return render(request, 'websiteFunctions/installPrestaShop.html', {'domainName': self.domain}) - except BaseException as msg: - return HttpResponse(str(msg)) - - def prestaShopInstall(self, userID=None, data=None): - try: - - currentACL = ACLManager.loadedACL(userID) - admin = Administrator.objects.get(pk=userID) - - self.domain = data['domain'] - - if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1: - pass - else: - return ACLManager.loadErrorJson('installStatus', 0) - - mailUtilities.checkHome() - - extraArgs = {} - extraArgs['admin'] = admin - extraArgs['domainName'] = data['domain'] - extraArgs['home'] = data['home'] - extraArgs['shopName'] = data['shopName'] - extraArgs['firstName'] = data['firstName'] - extraArgs['lastName'] = data['lastName'] - extraArgs['databasePrefix'] = data['databasePrefix'] - extraArgs['email'] = data['email'] - extraArgs['password'] = data['passwordByPass'] - extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) - - if data['home'] == '0': - extraArgs['path'] = data['path'] - - background = ApplicationInstaller('prestashop', extraArgs) - background.start() - - time.sleep(2) - - data_ret = {'status': 1, 'installStatus': 1, 'error_message': 'None', - 'tempStatusPath': extraArgs['tempStatusPath']} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - ## Installation ends - - 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 createWebsiteAPI(self, data=None): - try: - - adminUser = data['adminUser'] - adminPass = data['adminPass'] - adminEmail = data['ownerEmail'] - websiteOwner = data['websiteOwner'] - ownerPassword = data['ownerPassword'] - data['ssl'] = 0 - data['dkimCheck'] = 0 - data['openBasedir'] = 1 - data['adminEmail'] = data['ownerEmail'] - data['phpSelection'] = "PHP 7.0" - data['package'] = data['packageName'] - - admin = Administrator.objects.get(userName=adminUser) - - if hashPassword.check_password(admin.password, adminPass): - - if adminEmail is None: - data['adminEmail'] = "usman@cyberpersons.com" - - try: - acl = ACL.objects.get(name='user') - websiteOwn = Administrator(userName=websiteOwner, - password=hashPassword.hash_password(ownerPassword), - email=adminEmail, type=3, owner=admin.pk, - initWebsitesLimit=1, acl=acl, api=1) - websiteOwn.save() - except BaseException: - pass - - else: - data_ret = {"existsStatus": 0, 'createWebSiteStatus': 0, - 'error_message': "Could not authorize access to API"} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - return self.submitWebsiteCreation(admin.pk, data) - - except BaseException as msg: - data_ret = {'createWebSiteStatus': 0, 'error_message': str(msg), "existsStatus": 0} - json_data = json.dumps(data_ret) - return HttpResponse(json_data) - - def searchWebsitesJson(self, currentlACL, userID, searchTerm): - - websites = ACLManager.searchWebsiteObjects(currentlACL, userID, searchTerm) - - json_data = "[" - checker = 0 - - try: - ipFile = "/etc/cyberpanel/machineIP" - f = open(ipFile) - ipData = f.read() - ipAddress = ipData.split('\n', 1)[0] - except BaseException as msg: - logging.CyberCPLogFileWriter.writeToFile("Failed to read machine IP, error:" + str(msg)) - ipAddress = "192.168.100.1" - - for items in websites: - if items.state == 0: - state = "Suspended" - else: - state = "Active" - dic = {'domain': items.domain, 'adminEmail': items.adminEmail, 'ipAddress': ipAddress, - 'admin': items.admin.userName, 'package': items.package.packageName, 'state': state} - - if checker == 0: - json_data = json_data + json.dumps(dic) - checker = 1 - else: - json_data = json_data + ',' + json.dumps(dic) - - json_data = json_data + ']' - - return json_data - - def findWebsitesJson(self, currentACL, userID, pageNumber): - finalPageNumber = ((pageNumber * 10)) - 10 - endPageNumber = finalPageNumber + 10 - websites = ACLManager.findWebsiteObjects(currentACL, userID)[finalPageNumber:endPageNumber] - - json_data = "[" - checker = 0 - - try: - ipFile = "/etc/cyberpanel/machineIP" - f = open(ipFile) - ipData = f.read() - ipAddress = ipData.split('\n', 1)[0] - except BaseException as msg: - logging.CyberCPLogFileWriter.writeToFile("Failed to read machine IP, error:" + str(msg)) - ipAddress = "192.168.100.1" - - for items in websites: - if items.state == 0: - state = "Suspended" - else: - state = "Active" - dic = {'domain': items.domain, 'adminEmail': items.adminEmail, 'ipAddress': ipAddress, - 'admin': items.admin.userName, 'package': items.package.packageName, 'state': state} - - if checker == 0: - json_data = json_data + json.dumps(dic) - checker = 1 - else: - json_data = json_data + ',' + json.dumps(dic) - - json_data = json_data + ']' - - return json_data - - def websitePagination(self, currentACL, userID): - websites = ACLManager.findAllSites(currentACL, userID) - - pages = float(len(websites)) / float(10) - pagination = [] - - if pages <= 1.0: - pages = 1 - pagination.append('