diff --git a/api/urls.py b/api/urls.py index 1c865fd72..52c9485ed 100644 --- a/api/urls.py +++ b/api/urls.py @@ -19,4 +19,7 @@ urlpatterns = [ url(r'^cancelRemoteTransfer', views.cancelRemoteTransfer, name='cancelRemoteTransfer'), + + url(r'^cyberPanelVersion', views.cyberPanelVersion, name='cyberPanelVersion'), + ] \ No newline at end of file diff --git a/api/views.py b/api/views.py index 4f64c00cf..2bb979083 100644 --- a/api/views.py +++ b/api/views.py @@ -15,11 +15,12 @@ from databases.models import Databases from baseTemplate.views import renderBase from random import randint import plogical.remoteBackup as rBackup -from websiteFunctions.models import Websites +from websiteFunctions.models import Websites,ChildDomains import os import signal from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging from shutil import rmtree +from baseTemplate.models import version # Create your views here. @@ -103,7 +104,7 @@ def createWebsite(request): return HttpResponse(json_data) if virtualHostUtilities.createDirectoryForVirtualHost(domain, adminEmail, phpSelection) != 1: - numberOfWebsites = Websites.objects.count() + numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {"existsStatus": 1, 'createWebSiteStatus': 0, 'error_message': "Can not create configurations, see CyberCP main log file."} @@ -111,7 +112,7 @@ def createWebsite(request): return HttpResponse(json_data) if virtualHostUtilities.createConfigInMainVirtualHostFile(domain) != 1: - numberOfWebsites = Websites.objects.count() + numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {"existsStatus": 1, 'createWebSiteStatus': 0, 'error_message': "Can not create configurations, see CyberCP main log file."} @@ -136,7 +137,7 @@ def createWebsite(request): return HttpResponse(json_data) except BaseException, msg: - numberOfWebsites = Websites.objects.count() + numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {'createWebSiteStatus': 0, 'error_message': str(msg), "existsStatus": 0} json_data = json.dumps(data_ret) @@ -356,6 +357,7 @@ def fetchSSHkey(request): def remoteTransfer(request): try: if request.method == "POST": + data = json.loads(request.body) username = data['username'] password = data['password'] @@ -368,15 +370,11 @@ def remoteTransfer(request): transferRequest = rBackup.remoteBackup.remoteTransfer(ipAddress, dir,accountsToTransfer) if transferRequest[0] == 1: - pass + return HttpResponse(json.dumps({"transferStatus": 1, "dir": dir})) else: data_ret = {'transferStatus': 0, 'error_message': transferRequest[1]} json_data = json.dumps(data_ret) return HttpResponse(json_data) - - return HttpResponse(json.dumps({"transferStatus": 1, "dir":dir})) - - else: data_ret = {'transferStatus': 0, 'error_message': "Invalid Credentials"} json_data = json.dumps(data_ret) @@ -504,3 +502,39 @@ def cancelRemoteTransfer(request): json_data = json.dumps(data) return HttpResponse(json_data) + +def cyberPanelVersion(request): + try: + if request.method == 'POST': + + data = json.loads(request.body) + + adminUser = data['username'] + adminPass = data['password'] + + + admin = Administrator.objects.get(userName=adminUser) + + if hashPassword.check_password(admin.password, adminPass): + + Version = version.objects.get(pk=1) + + data_ret = {"getVersion": 1, + 'error_message': "Could not authorize access to API", + 'currentVersion':Version.currentVersion, + 'build':Version.build} + + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + else: + data_ret = {"getVersion": 0, + 'error_message': "Could not authorize access to API"} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + except BaseException, msg: + data_ret = {"getVersion": 0, + 'error_message': "Could not authorize access to API"} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + diff --git a/backup/static/backup/backup.js b/backup/static/backup/backup.js index ae8c7cef4..cf81eb4bd 100644 --- a/backup/static/backup/backup.js +++ b/backup/static/backup/backup.js @@ -1216,6 +1216,8 @@ app.controller('remoteBackupControl', function($scope, $http, $timeout) { return; } + // disable fetch accounts button + $scope.fetchAccountsBtn = true; $scope.backupLoading = false; diff --git a/backup/views.py b/backup/views.py index c0d1ff2c3..6d14ed0f2 100644 --- a/backup/views.py +++ b/backup/views.py @@ -19,6 +19,7 @@ import subprocess import signal import plogical.remoteBackup as rBackup import requests +from baseTemplate.models import version def loadBackupHome(request): try: @@ -1053,6 +1054,44 @@ def submitRemoteBackups(request): ipAddress = data['ipAddress'] password = data['password'] + ## ask for remote version + + 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: + + Version = version.objects.get(pk=1) + + if data['currentVersion'] == Version.currentVersion and data['build'] == Version.build: + pass + else: + json_data = data['data'] + 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,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) + + + ## setup ssh key + sshkey = rBackup.remoteBackup.getKey(ipAddress, password) if sshkey[0] == 1: @@ -1091,29 +1130,31 @@ def submitRemoteBackups(request): writeToFile.writelines("\n") writeToFile.close() - #ownIP = requests.get('https://api.ipify.org').text + try: + finalData = json.dumps({'username': "admin","password": password}) - finalData = json.dumps({'username': "admin","password": password}) + url = "https://" + ipAddress + ":8090/api/fetchAccountsFromRemoteServer" - url = "https://" + ipAddress + ":8090/api/fetchAccountsFromRemoteServer" + r = requests.post(url, data=finalData, verify=False) - r = requests.post(url, data=finalData, verify=False) - - data = json.loads(r.text) + 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} + 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,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) - 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) - - else: return HttpResponse("This URL only accepts POST requests") @@ -1132,33 +1173,41 @@ def starRemoteTransfer(request): password = data['password'] accountsToTransfer = data['accountsToTransfer'] + try: + ownIP = requests.get('https://api.ipify.org').text - ownIP = requests.get('https://api.ipify.org').text + finalData = json.dumps({'username': "admin", "password": password,"ipAddress": ownIP,"accountsToTransfer":accountsToTransfer}) - finalData = json.dumps({'username': "admin", "password": password,"ipAddress": ownIP,"accountsToTransfer":accountsToTransfer}) + url = "https://" + ipAddress + ":8090/api/remoteTransfer" - url = "https://" + ipAddress + ":8090/api/remoteTransfer" + r = requests.post(url, data=finalData, verify=False) - r = requests.post(url, data=finalData, verify=False) - - data = json.loads(r.text) + data = json.loads(r.text) - if data['transferStatus'] == 1: + if data['transferStatus'] == 1: - ## create local directory that will host backups + ## create local directory that will host backups - localStoragePath = "/home/backup/transfer-" + str(data['dir']) + localStoragePath = "/home/backup/transfer-" + str(data['dir']) - if not os.path.exists(localStoragePath): - os.makedirs(localStoragePath) + if not os.path.exists(localStoragePath): + os.makedirs(localStoragePath) - 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']}) + 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,msg: + final_json = json.dumps({'remoteTransferStatus': 0, + 'error_message': "Can not initiate remote transfer. Error message: " + + str(msg)}) return HttpResponse(final_json) + + except BaseException,msg: final_json = json.dumps({'remoteTransferStatus': 0, 'error_message': str(msg)}) return HttpResponse(final_json) diff --git a/firewall/models.py b/firewall/models.py index c2e5cb579..9ce57c2c9 100644 --- a/firewall/models.py +++ b/firewall/models.py @@ -7,3 +7,4 @@ class FirewallRules(models.Model): name = models.CharField(unique=True, max_length=32) # Field name made lowercase. proto = models.CharField(max_length=10) port = models.CharField(max_length=25) + ipAddress = models.CharField(max_length=30,default="0.0.0.0/0") diff --git a/firewall/static/firewall/firewall.js b/firewall/static/firewall/firewall.js index e0e7a71b6..fd35d3d32 100644 --- a/firewall/static/firewall/firewall.js +++ b/firewall/static/firewall/firewall.js @@ -54,6 +54,7 @@ app.controller('firewallController', function($scope,$http) { ruleName:ruleName, ruleProtocol:ruleProtocol, rulePort:rulePort, + ruleIP:$scope.ruleIP, }; var config = { @@ -165,7 +166,7 @@ app.controller('firewallController', function($scope,$http) { - $scope.deleteRule = function(id,proto,port){ + $scope.deleteRule = function(id,proto,port,ruleIP){ @@ -178,6 +179,7 @@ app.controller('firewallController', function($scope,$http) { id:id, proto:proto, port:port, + ruleIP:ruleIP, }; var config = { diff --git a/firewall/templates/firewall/firewall.html b/firewall/templates/firewall/firewall.html index 971ef4cee..87965465f 100644 --- a/firewall/templates/firewall/firewall.html +++ b/firewall/templates/firewall/firewall.html @@ -80,11 +80,11 @@