diff --git a/api/views.py b/api/views.py
index 3be35b466..ca819a439 100755
--- a/api/views.py
+++ b/api/views.py
@@ -13,7 +13,7 @@ from websiteFunctions.models import Websites
import os
from baseTemplate.models import version
from plogical.mailUtilities import mailUtilities
-from plogical.website import WebsiteManager
+from websiteFunctions.website import WebsiteManager
from s3Backups.s3Backups import S3Backups
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
from plogical.processUtilities import ProcessUtilities
diff --git a/cloudAPI/cloudManager.py b/cloudAPI/cloudManager.py
index 9cdf6e1d1..ee62f4859 100755
--- a/cloudAPI/cloudManager.py
+++ b/cloudAPI/cloudManager.py
@@ -1,9 +1,3 @@
-import json
-import os
-from random import randint
-
-from django.shortcuts import HttpResponse
-
import userManagment.views as um
from backup.backupManager import BackupManager
from databases.databaseManager import DatabaseManager
@@ -15,22 +9,17 @@ from loginSystem.models import Administrator
from mailServer.mailserverManager import MailServerManager
from manageSSL.views import issueSSL, obtainHostNameSSL, obtainMailServerSSL
from packages.packagesManager import PackagesManager
-from plogical.acl import ACLManager
-from plogical.httpProc import httpProc
from plogical.mysqlUtilities import mysqlUtilities
-from plogical.processUtilities import ProcessUtilities
from plogical.virtualHostUtilities import virtualHostUtilities
-from plogical.website import WebsiteManager
+from websiteFunctions.website import WebsiteManager
from s3Backups.s3Backups import S3Backups
from serverLogs.views import getLogsFromFile
from serverStatus.views import topProcessesStatus, killProcess, switchTOLSWSStatus
-from websiteFunctions.models import Websites
from plogical import hashPassword
from loginSystem.models import ACL
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
from managePHP.phpManager import PHPManager
from managePHP.views import submitExtensionRequest, getRequestStatusApache
-from containerization.containerManager import ContainerManager
from containerization.views import *
diff --git a/install/install.py b/install/install.py
index 6a4ab1e79..ccc04a042 100755
--- a/install/install.py
+++ b/install/install.py
@@ -952,7 +952,7 @@ class preFlightsChecks:
os.chdir(self.path)
- command = "wget http://cyberpanel.sh/CyberPanel.1.8.7.tar.gz"
+ command = "wget http://cyberpanel.sh/CyberPanel.1.8.8.tar.gz"
#command = "wget http://cyberpanel.sh/CyberPanelTemp.tar.gz"
preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]',
'CyberPanel Download',
@@ -961,7 +961,7 @@ class preFlightsChecks:
##
count = 0
- command = "tar zxf CyberPanel.1.8.7.tar.gz"
+ command = "tar zxf CyberPanel.1.8.8.tar.gz"
#command = "tar zxf CyberPanelTemp.tar.gz"
preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]',
'Extract CyberPanel',1, 1, os.EX_OSERR)
diff --git a/loginSystem/views.py b/loginSystem/views.py
index d89fe4748..7c5dcf998 100755
--- a/loginSystem/views.py
+++ b/loginSystem/views.py
@@ -218,7 +218,7 @@ def loadLoginPage(request):
firstName="Cyber",lastName="Panel", acl=acl, token=token)
admin.save()
- vers = version(currentVersion="1.8", build=7)
+ vers = version(currentVersion="1.8", build=8)
vers.save()
package = Package(admin=admin, packageName="Default", diskSpace=1000,
diff --git a/packages/models.py b/packages/models.py
index 145d09259..50a8931a7 100755
--- a/packages/models.py
+++ b/packages/models.py
@@ -15,3 +15,4 @@ class Package(models.Model):
dataBases = models.IntegerField(default=0)
ftpAccounts = models.IntegerField(default=0)
allowedDomains = models.IntegerField(default=0)
+ allowFullDomain = models.IntegerField(default=1)
diff --git a/packages/packagesManager.py b/packages/packagesManager.py
index f1efe1f18..2b7849d4e 100755
--- a/packages/packagesManager.py
+++ b/packages/packagesManager.py
@@ -74,6 +74,12 @@ class PackagesManager:
except:
api = '0'
+ try:
+ allowFullDomain = int(data['allowFullDomain'])
+ except:
+ allowFullDomain = 1
+
+
if packageSpace < 0 or packageBandwidth < 0 or packageDatabases < 0 or ftpAccounts < 0 or emails < 0 or allowedDomains < 0:
data_ret = {'saveStatus': 0, 'error_message': "All values should be positive or 0."}
json_data = json.dumps(data_ret)
@@ -86,7 +92,7 @@ class PackagesManager:
package = Package(admin=admin, packageName=packageName, diskSpace=packageSpace,
bandwidth=packageBandwidth, ftpAccounts=ftpAccounts, dataBases=packageDatabases,
- emailAccounts=emails, allowedDomains=allowedDomains)
+ emailAccounts=emails, allowedDomains=allowedDomains, allowFullDomain=allowFullDomain)
package.save()
@@ -156,9 +162,10 @@ class PackagesManager:
dataBases = modifyPack.dataBases
emails = modifyPack.emailAccounts
+
data_ret = {'emails': emails, 'modifyStatus': 1, 'error_message': "None",
"diskSpace": diskSpace, "bandwidth": bandwidth, "ftpAccounts": ftpAccounts,
- "dataBases": dataBases, "allowedDomains": modifyPack.allowedDomains}
+ "dataBases": dataBases, "allowedDomains": modifyPack.allowedDomains, 'allowFullDomain': modifyPack.allowFullDomain}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
@@ -194,6 +201,13 @@ class PackagesManager:
modifyPack.dataBases = data['dataBases']
modifyPack.emailAccounts = data['emails']
modifyPack.allowedDomains = data['allowedDomains']
+
+ try:
+ modifyPack.allowFullDomain = int(data['allowFullDomain'])
+ except:
+ modifyPack.allowFullDomain = 1
+
+
modifyPack.save()
data_ret = {'status': 1, 'saveStatus': 1, 'error_message': "None"}
diff --git a/packages/static/packages/packages.js b/packages/static/packages/packages.js
index 925f00e40..84bd8a9fb 100755
--- a/packages/static/packages/packages.js
+++ b/packages/static/packages/packages.js
@@ -3,13 +3,11 @@
*/
-
/**
* Created by usman on 7/25/17.
*/
-
/* Utilities */
function getCookie(name) {
@@ -31,72 +29,74 @@ function getCookie(name) {
/* Utilities ends here */
-
-
/* Java script code to create Pacakge */
$("#packageCreationFailed").hide();
$("#packageCreated").hide();
-
-app.controller('createPackage', function($scope,$http) {
+app.controller('createPackage', function ($scope, $http) {
//$scope.pname = /([A-Z]){3,10}/gi;
- $scope.insertPackInDB = function(){
-
- var packageName = $scope.packageName;
- var diskSpace = $scope.diskSpace;
- var bandwidth = $scope.bandwidth;
- var ftpAccounts = $scope.ftpAccounts;
- var dataBases = $scope.dataBases;
- var emails = $scope.emails;
+ $scope.insertPackInDB = function () {
- url = "/packages/submitPackage";
+ var packageName = $scope.packageName;
+ var diskSpace = $scope.diskSpace;
+ var bandwidth = $scope.bandwidth;
+ var ftpAccounts = $scope.ftpAccounts;
+ var dataBases = $scope.dataBases;
+ var emails = $scope.emails;
- var data = {
- packageName: packageName,
- diskSpace: diskSpace,
- bandwidth: bandwidth,
- ftpAccounts: ftpAccounts,
- dataBases: dataBases,
- emails:emails,
- allowedDomains:$scope.allowedDomains
- };
-
- var config = {
- headers : {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
-
- $http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas);
+ if($scope.allowFullDomain === undefined){
+ $scope.allowFullDomain = 0;
+ }
- function ListInitialDatas(response) {
- console.log(response.data)
+ url = "/packages/submitPackage";
- if (response.data.saveStatus == 0)
- {
- $scope.errorMessage = response.data.error_message;
- $("#packageCreationFailed").fadeIn();
- $("#packageCreated").hide();
+ var data = {
+ packageName: packageName,
+ diskSpace: diskSpace,
+ bandwidth: bandwidth,
+ ftpAccounts: ftpAccounts,
+ dataBases: dataBases,
+ emails: emails,
+ allowedDomains: $scope.allowedDomains,
+ allowFullDomain: $scope.allowFullDomain
+ };
- }
- else{
- $("#packageCreationFailed").hide();
- $("#packageCreated").fadeIn();
- $scope.createdPackage = $scope.packageName;
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
- }
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
- }
- function cantLoadInitialDatas(response) {
- console.log("not good");
- }
+ function ListInitialDatas(response) {
+ console.log(response.data)
+
+ if (response.data.saveStatus == 0) {
+ $scope.errorMessage = response.data.error_message;
+ $("#packageCreationFailed").fadeIn();
+ $("#packageCreated").hide();
+
+ } else {
+ $("#packageCreationFailed").hide();
+ $("#packageCreated").fadeIn();
+ $scope.createdPackage = $scope.packageName;
+
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ console.log("not good");
+ }
};
@@ -107,7 +107,6 @@ app.controller('createPackage', function($scope,$http) {
/* Java script code to to create Pacakge ends here */
-
/* Java script code to delete Pacakge */
@@ -117,62 +116,60 @@ $("#deleteSuccess").hide();
$("#deletePackageButton").hide();
-app.controller('deletePackage', function($scope,$http) {
+app.controller('deletePackage', function ($scope, $http) {
- $scope.deletePackage = function(){
+ $scope.deletePackage = function () {
$("#deletePackageButton").fadeIn();
};
- $scope.deletePackageFinal = function(){
+ $scope.deletePackageFinal = function () {
- var packageName = $scope.packageToBeDeleted;
+ var packageName = $scope.packageToBeDeleted;
+ url = "/packages/submitDelete";
- url = "/packages/submitDelete";
+ var data = {
+ packageName: packageName,
+ };
- var data = {
- packageName: packageName,
- };
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
- var config = {
- headers : {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
-
- $http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas);
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
- function ListInitialDatas(response) {
- console.log(response.data)
+ function ListInitialDatas(response) {
+ console.log(response.data)
- if (response.data.deleteStatus == 0)
- {
- $scope.errorMessage = response.data.error_message;
- $("#deleteFailure").fadeIn();
- $("#deleteSuccess").hide();
- $("#deletePackageButton").hide();
+ if (response.data.deleteStatus == 0) {
+ $scope.errorMessage = response.data.error_message;
+ $("#deleteFailure").fadeIn();
+ $("#deleteSuccess").hide();
+ $("#deletePackageButton").hide();
- }
- else{
- $("#deleteFailure").hide();
- $("#deleteSuccess").fadeIn();
- $("#deletePackageButton").hide();
- $scope.deletedPackage = packageName;
+ } else {
+ $("#deleteFailure").hide();
+ $("#deleteSuccess").fadeIn();
+ $("#deletePackageButton").hide();
+ $scope.deletedPackage = packageName;
- }
+ }
- }
- function cantLoadInitialDatas(response) {
- console.log("not good");
- }
+ }
+
+ function cantLoadInitialDatas(response) {
+ console.log("not good");
+ }
};
@@ -180,11 +177,9 @@ app.controller('deletePackage', function($scope,$http) {
});
-
/* Java script code to delete package ends here */
-
/* Java script code modify package */
$("#packageDetailsToBeModified").hide();
@@ -194,9 +189,9 @@ $("#modifyButton").hide();
$("#packageLoading").hide();
$("#successfullyModified").hide();
-app.controller('modifyPackages', function($scope,$http) {
+app.controller('modifyPackages', function ($scope, $http) {
- $scope.fetchDetails = function(){
+ $scope.fetchDetails = function () {
$("#packageLoading").show();
$("#successfullyModified").hide();
@@ -207,63 +202,65 @@ app.controller('modifyPackages', function($scope,$http) {
url = "/packages/submitModify";
- var data = {
- packageName: packageName,
- };
+ var data = {
+ packageName: packageName,
+ };
- var config = {
- headers : {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
- $http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas);
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
- function ListInitialDatas(response) {
+ function ListInitialDatas(response) {
- if (response.data.modifyStatus == 0)
- {
- $scope.errorMessage = response.data.error_message;
- $("#modifyFailure").fadeIn();
- $("#modifySuccess").hide();
- $("#modifyButton").hide();
- $("#packageLoading").hide();
+ if (response.data.modifyStatus === 0) {
+ $scope.errorMessage = response.data.error_message;
+ $("#modifyFailure").fadeIn();
+ $("#modifySuccess").hide();
+ $("#modifyButton").hide();
+ $("#packageLoading").hide();
- }
- else{
- $("#modifyButton").show();
- $scope.diskSpace = response.data.diskSpace;
- $scope.bandwidth = response.data.bandwidth;
- $scope.ftpAccounts = response.data.ftpAccounts;
- $scope.dataBases = response.data.dataBases;
- $scope.emails = response.data.emails;
- $scope.allowedDomains = response.data.allowedDomains;
-
- $scope.modifyButton = "Save Details"
-
- $("#packageDetailsToBeModified").fadeIn();
-
- $("#modifyFailure").hide();
- $("#modifySuccess").fadeIn();
- $("#packageLoading").hide();
-
-
-
-
- }
-
+ } else {
+ $("#modifyButton").show();
+ $scope.diskSpace = response.data.diskSpace;
+ $scope.bandwidth = response.data.bandwidth;
+ $scope.ftpAccounts = response.data.ftpAccounts;
+ $scope.dataBases = response.data.dataBases;
+ $scope.emails = response.data.emails;
+ $scope.allowedDomains = response.data.allowedDomains;
+ if (response.data.allowFullDomain === 1) {
+ $scope.allowFullDomain = true;
+ } else {
+ $scope.allowFullDomain = false;
}
- function cantLoadInitialDatas(response) {
- console.log("not good");
- }
+
+ $scope.modifyButton = "Save Details"
+
+ $("#packageDetailsToBeModified").fadeIn();
+
+ $("#modifyFailure").hide();
+ $("#modifySuccess").fadeIn();
+ $("#packageLoading").hide();
+
+
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ console.log("not good");
+ }
};
-
$scope.modifyPackageFunc = function () {
var packageName = $scope.packageToBeModified;
@@ -281,56 +278,53 @@ app.controller('modifyPackages', function($scope,$http) {
url = "/packages/saveChanges";
- var data = {
- packageName: packageName,
- diskSpace:diskSpace,
- bandwidth:bandwidth,
- ftpAccounts:ftpAccounts,
- dataBases:dataBases,
- emails:emails,
- allowedDomains:$scope.allowedDomains,
- };
+ var data = {
+ packageName: packageName,
+ diskSpace: diskSpace,
+ bandwidth: bandwidth,
+ ftpAccounts: ftpAccounts,
+ dataBases: dataBases,
+ emails: emails,
+ allowedDomains: $scope.allowedDomains,
+ allowFullDomain: $scope.allowFullDomain
+ };
- var config = {
- headers : {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
- $http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas);
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
- function ListInitialDatas(response) {
+ function ListInitialDatas(response) {
- if (response.data.saveStatus == 0)
- {
- $scope.errorMessage = response.data.error_message;
- $("#modifyFailure").fadeIn();
- $("#modifySuccess").hide();
- $("#modifyButton").hide();
- $("#packageLoading").hide();
+ if (response.data.saveStatus === 0) {
+ $scope.errorMessage = response.data.error_message;
+ $("#modifyFailure").fadeIn();
+ $("#modifySuccess").hide();
+ $("#modifyButton").hide();
+ $("#packageLoading").hide();
- }
- else{
- $("#modifyButton").hide();
+ } else {
+ $("#modifyButton").hide();
- $("#successfullyModified").fadeIn();
- $("#modifyFailure").hide();
- $("#packageLoading").hide();
- $scope.packageModified = packageName;
+ $("#successfullyModified").fadeIn();
+ $("#modifyFailure").hide();
+ $("#packageLoading").hide();
+ $scope.packageModified = packageName;
+ }
- }
-
-
- }
- function cantLoadInitialDatas(response) {
- console.log("not good");
- }
+ }
+ function cantLoadInitialDatas(response) {
+ console.log("not good");
+ }
};
@@ -338,5 +332,4 @@ app.controller('modifyPackages', function($scope,$http) {
});
-
/* Java script code to Modify Pacakge ends here */
diff --git a/packages/templates/packages/createPackage.html b/packages/templates/packages/createPackage.html
index 116c06245..a498f9b06 100755
--- a/packages/templates/packages/createPackage.html
+++ b/packages/templates/packages/createPackage.html
@@ -3,112 +3,127 @@
{% block title %}{% trans "Create Package - CyberPanel" %}{% endblock %}
{% block content %}
-{% load static %}
-{% get_current_language as LANGUAGE_CODE %}
-
-
-
-
-
-
{% trans "Create Package" %}
-
{% trans "Packages define resources for your websites, you need to add package before creating a website." %}
-
-
-
-
-
-
-
-
-
-
+ {% load static %}
+ {% get_current_language as LANGUAGE_CODE %}
+
+
+
+
{% trans "Create Package" %}
+
{% trans "Packages define resources for your websites, you need to add package before creating a website." %}
+
+
+
-
-
-
-
{% endblock %}
diff --git a/packages/templates/packages/modifyPackage.html b/packages/templates/packages/modifyPackage.html
index 4360ba79c..22a343d4a 100755
--- a/packages/templates/packages/modifyPackage.html
+++ b/packages/templates/packages/modifyPackage.html
@@ -83,6 +83,19 @@
+
+
diff --git a/plogical/acl.py b/plogical/acl.py
index 0d9449d90..c1e505c9c 100755
--- a/plogical/acl.py
+++ b/plogical/acl.py
@@ -108,6 +108,18 @@ class ACLManager:
return finalResponse
+ @staticmethod
+ def checkUserOwnerShip(currentACL, owner, user):
+ if currentACL['admin'] == 1:
+ return 1
+ elif owner == user:
+ return 1
+ elif owner.pk == user.owner:
+ return 1
+ else:
+ return 0
+
+
@staticmethod
def currentContextPermission(currentACL, context):
try:
diff --git a/plogical/adminPass.py b/plogical/adminPass.py
index d2f4fe369..6b52735b8 100755
--- a/plogical/adminPass.py
+++ b/plogical/adminPass.py
@@ -31,7 +31,7 @@ def main():
firstName="Cyber", lastName="Panel", acl=acl, token=token)
admin.save()
- vers = version(currentVersion="1.8", build=7)
+ vers = version(currentVersion="1.8", build=8)
vers.save()
package = Package(admin=admin, packageName="Default", diskSpace=1000,
diff --git a/plogical/cPanelImporter.py b/plogical/cPanelImporter.py
index ff400b9c9..885a1249b 100644
--- a/plogical/cPanelImporter.py
+++ b/plogical/cPanelImporter.py
@@ -51,6 +51,9 @@ class cPanelImporter:
self.mailFormat = 1
def PHPDecider(self):
+
+ if self.PHPVersion == 'inherit':
+ self.PHPVersion = 'PHP 7.2'
if self.PHPVersion.find('53') > -1:
self.PHPVersion = 'PHP 5.3'
elif self.PHPVersion.find('54') > -1:
diff --git a/plogical/mysqlUtilities.py b/plogical/mysqlUtilities.py
index 7273ee854..be1072d2e 100755
--- a/plogical/mysqlUtilities.py
+++ b/plogical/mysqlUtilities.py
@@ -145,7 +145,7 @@ class mysqlUtilities:
return str(msg)
@staticmethod
- def createDatabaseBackup(databaseName,tempStoragePath):
+ def createDatabaseBackup(databaseName, tempStoragePath):
try:
passFile = "/etc/cyberpanel/mysqlPassword"
f = open(passFile)
@@ -191,7 +191,7 @@ password=%s
return 0
@staticmethod
- def restoreDatabaseBackup(databaseName, tempStoragePath,dbPassword):
+ def restoreDatabaseBackup(databaseName, tempStoragePath, dbPassword, passwordCheck = None, additionalName = None):
try:
passFile = "/etc/cyberpanel/mysqlPassword"
@@ -217,25 +217,33 @@ password=%s
command = 'chown cyberpanel:cyberpanel %s' % (cnfPath)
subprocess.call(shlex.split(command))
- command = 'sudo mysql --defaults-extra-file=/home/cyberpanel/.my.cnf --host=localhost ' + databaseName
+ command = 'mysql --defaults-extra-file=/home/cyberpanel/.my.cnf --host=localhost ' + databaseName
cmd = shlex.split(command)
- with open(tempStoragePath + "/" + databaseName + '.sql', 'r') as f:
- res = subprocess.call(cmd, stdin=f)
+ if additionalName == None:
+ with open(tempStoragePath + "/" + databaseName + '.sql', 'r') as f:
+ res = subprocess.call(cmd, stdin=f)
+ if res != 0:
+ logging.CyberCPLogFileWriter.writeToFile("Could not restore MYSQL database: " + databaseName +"! [restoreDatabaseBackup]")
+ return 0
+ else:
+ with open(tempStoragePath + "/" + additionalName + '.sql', 'r') as f:
+ res = subprocess.call(cmd, stdin=f)
- if res == 1:
- logging.CyberCPLogFileWriter.writeToFile("Could not restore MYSQL database: " +databaseName +"! [restoreDatabaseBackup]")
- return 0
+ if res != 0:
+ logging.CyberCPLogFileWriter.writeToFile("Could not restore MYSQL database: " + additionalName + "! [restoreDatabaseBackup]")
+ return 0
- connection, cursor = mysqlUtilities.setupConnection()
+ if passwordCheck == None:
+ connection, cursor = mysqlUtilities.setupConnection()
- if connection == 0:
- return 0
+ if connection == 0:
+ return 0
- passwordCMD = "use mysql;SET PASSWORD FOR '" + databaseName + "'@'localhost' = '" + dbPassword + "';FLUSH PRIVILEGES;"
+ passwordCMD = "use mysql;SET PASSWORD FOR '" + databaseName + "'@'localhost' = '" + dbPassword + "';FLUSH PRIVILEGES;"
- cursor.execute(passwordCMD)
- connection.close()
+ cursor.execute(passwordCMD)
+ connection.close()
return 1
except BaseException, msg:
diff --git a/plogical/processUtilities.py b/plogical/processUtilities.py
index 3058abf7e..d076e8674 100755
--- a/plogical/processUtilities.py
+++ b/plogical/processUtilities.py
@@ -270,4 +270,13 @@ class ProcessUtilities(multi.Thread):
logging.writeToFile(str(msg) + " [popenExecutioner]")
+ @staticmethod
+ def BuildCommand(path, functionName, parameters):
+ execPath = "python %s %s " % (path, functionName)
+ for key, value in parameters.iteritems():
+ execPath = execPath + ' --%s %s' % (key, value)
+
+ return execPath
+
+
diff --git a/plogical/upgrade.py b/plogical/upgrade.py
index 1cc5b2fea..bd6c25d15 100755
--- a/plogical/upgrade.py
+++ b/plogical/upgrade.py
@@ -1443,7 +1443,8 @@ class Upgrade:
impFile = ['/etc/pure-ftpd/pure-ftpd.conf', '/etc/pure-ftpd/pureftpd-pgsql.conf',
'/etc/pure-ftpd/pureftpd-mysql.conf', '/etc/pure-ftpd/pureftpd-ldap.conf',
- '/etc/dovecot/dovecot.conf', '/etc/pdns/pdns.conf', '/etc/pure-ftpd/db/mysql.conf', '/etc/powerdns/pdns.conf']
+ '/etc/dovecot/dovecot.conf', '/etc/pdns/pdns.conf', '/etc/pure-ftpd/db/mysql.conf',
+ '/etc/powerdns/pdns.conf']
for items in impFile:
command = 'chmod 600 %s' % (items)
@@ -1477,7 +1478,6 @@ class Upgrade:
command = 'chmod 644 /etc/postfix/main.cf'
subprocess.call(command, shell=True)
-
Upgrade.stdOut("Permissions updated.")
except BaseException, msg:
@@ -1498,6 +1498,14 @@ class Upgrade:
'lsphp7?-sqlite3 lsphp7?-tidy'
Upgrade.executioner(command, 'Install PHP 73, 0')
+ CentOSPath = '/etc/redhat-release'
+
+ if not os.path.exists(CentOSPath):
+ command = 'cp /usr/local/lsws/lsphp71/bin/php /usr/bin/'
+ Upgrade.executioner(command, 'Set default PHP 7.0, 0')
+
+
+
@staticmethod
def someDirectories():
command = "mkdir -p /usr/local/lscpd/admin/"
@@ -1520,11 +1528,11 @@ class Upgrade:
if os.path.exists(CentOSPath):
path = '/etc/yum.repos.d/dovecot.repo'
content = """[dovecot-2.3-latest]
- name=Dovecot 2.3 CentOS $releasever - $basearch
- baseurl=http://repo.dovecot.org/ce-2.3-latest/centos/$releasever/RPMS/$basearch
- gpgkey=https://repo.dovecot.org/DOVECOT-REPO-GPG
- gpgcheck=1
- enabled=1"""
+name=Dovecot 2.3 CentOS $releasever - $basearch
+baseurl=http://repo.dovecot.org/ce-2.3-latest/centos/$releasever/RPMS/$basearch
+gpgkey=https://repo.dovecot.org/DOVECOT-REPO-GPG
+gpgcheck=1
+enabled=1"""
writeToFile = open(path, 'w')
writeToFile.write(content)
writeToFile.close()
@@ -1580,8 +1588,17 @@ class Upgrade:
pass
try:
- command = 'apt upgrade -y'
+ command = 'DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical sudo apt-get -q -y -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" --only-upgrade install dovecot-mysql -y'
+ subprocess.call(command, shell=True)
+
+ command = 'dpkg --configure -a'
Upgrade.executioner(command, 0)
+
+ command = 'apt --fix-broken install -y'
+ Upgrade.executioner(command, 0)
+
+ command = 'DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical sudo apt-get -q -y -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" --only-upgrade install dovecot-mysql -y'
+ subprocess.call(command, shell=True)
except:
pass
@@ -1591,12 +1608,12 @@ class Upgrade:
data = open(path, 'r').readlines()
- updatePasswords = 1
+ updatePasswords = 0
writeToFile = open(path, 'w')
for items in data:
if items.find('default_pass_scheme') > -1:
- updatePasswords = 0
+ updatePasswords = 1
continue
else:
writeToFile.writelines(items)
@@ -1715,4 +1732,4 @@ def main():
if __name__ == "__main__":
- main()
\ No newline at end of file
+ main()
diff --git a/plogical/vhost.py b/plogical/vhost.py
index 059af9f98..9c94d57f4 100755
--- a/plogical/vhost.py
+++ b/plogical/vhost.py
@@ -103,7 +103,12 @@ class vhost:
try:
os.makedirs(pathLogs)
- command = "chown %s:%s %s" % ('root', 'nobody', pathLogs)
+ if ProcessUtilities.decideDistro() == ProcessUtilities.centos:
+ groupName = 'nobody'
+ else:
+ groupName = 'nogroup'
+
+ command = "chown %s:%s %s" % ('root', groupName, pathLogs)
cmd = shlex.split(command)
subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT)
diff --git a/plogical/virtualHostUtilities.py b/plogical/virtualHostUtilities.py
index 4291e2549..ba1d595fb 100755
--- a/plogical/virtualHostUtilities.py
+++ b/plogical/virtualHostUtilities.py
@@ -1019,6 +1019,15 @@ class virtualHostUtilities:
master = Websites.objects.get(domain=masterDomain)
domainsInPackage = master.package.allowedDomains
+ if master.package.allowFullDomain == 0:
+ if virtualHostName.find(masterDomain) > -1:
+ pass
+ else:
+ logging.CyberCPLogFileWriter.statusWriter(tempStatusPath,
+ 'Fully qualified domain is not allowed in the package. [404]')
+ return 0, "Fully qualified domain is not allowed in the package."
+
+
if domainsInPackage == 0:
pass
elif domainsInPackage > master.childdomains_set.all().count():
diff --git a/requirments.txt b/requirments.txt
index e4e5e0e04..aff43c221 100755
--- a/requirments.txt
+++ b/requirments.txt
@@ -35,7 +35,6 @@ MarkupSafe==0.11
mock==2.0.0
parsedatetime==2.4
pbr==4.0.4
-perf==0.1
pexpect==4.4.0
prettytable==0.7.2
psutil==5.4.3
diff --git a/serverStatus/views.py b/serverStatus/views.py
index 0d9bb8fc8..90ddeea71 100755
--- a/serverStatus/views.py
+++ b/serverStatus/views.py
@@ -65,7 +65,6 @@ def litespeedStatus(request):
return render(request, "serverStatus/litespeedStatus.html", {"processList": processList,
"liteSpeedVersionStatus": "For some reaons not able to load version details, see CyberCP main log file.",
'OLS': OLS})
-
if (processList != 0):
dataForHtml = {"processList": processList, "lsversion": lsversion, "modules": modules,
"loadedModules": loadedModules, 'OLS': OLS}
diff --git a/static/websiteFunctions/websiteFunctions.js b/static/websiteFunctions/websiteFunctions.js
index 0cd60be54..aea790a01 100644
--- a/static/websiteFunctions/websiteFunctions.js
+++ b/static/websiteFunctions/websiteFunctions.js
@@ -447,9 +447,8 @@ app.controller('deleteWebsiteControl', function ($scope, $http) {
function ListInitialDatas(response) {
- console.log(response.data)
- if (response.data.websiteDeleteStatus == 0) {
+ if (response.data.websiteDeleteStatus === 0) {
$scope.errorMessage = response.data.error_message;
$("#websiteDeleteFailure").fadeIn();
$("#websiteDeleteSuccess").hide();
@@ -471,7 +470,6 @@ app.controller('deleteWebsiteControl', function ($scope, $http) {
}
function cantLoadInitialDatas(response) {
- console.log("not good");
}
@@ -4943,7 +4941,6 @@ app.controller('sshAccess', function ($scope, $http, $timeout) {
} else {
-
new PNotify({
title: 'Error!',
text: response.data.error_message,
@@ -4969,4 +4966,300 @@ app.controller('sshAccess', function ($scope, $http, $timeout) {
};
-});
\ No newline at end of file
+});
+
+
+/* Java script code to cloneWebsite */
+app.controller('cloneWebsite', function ($scope, $http, $timeout, $window) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.goBackDisable = true;
+
+ var statusFile;
+
+ $scope.startCloning = function () {
+
+ $scope.cyberpanelLoading = false;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = true;
+
+ $scope.currentStatus = "Cloning started..";
+
+ url = "/websites/startCloning";
+
+
+ var data = {
+ masterDomain: $("#domainName").text(),
+ domainName: $scope.domain
+
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $scope.currentStatus = response.data.error_message;
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ }
+
+ };
+ $scope.goBack = function () {
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ function getCreationStatus() {
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+
+ if (response.data.abort === 1) {
+
+ if (response.data.installStatus === 1) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ } else {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $scope.currentStatus = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ }
+
+ } else {
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout(getCreationStatus, 1000);
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+});
+/* Java script code to cloneWebsite ends here */
+
+
+/* Java script code to syncWebsite */
+app.controller('syncWebsite', function ($scope, $http, $timeout, $window) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.goBackDisable = true;
+
+ var statusFile;
+
+ $scope.startSyncing = function () {
+
+ $scope.cyberpanelLoading = false;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = true;
+
+ $scope.currentStatus = "Cloning started..";
+
+ url = "/websites/startSync";
+
+
+ var data = {
+ childDomain: $("#childDomain").text(),
+ eraseCheck: $scope.eraseCheck,
+ dbCheck: $scope.dbCheck,
+ copyChanged: $scope.copyChanged
+
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $scope.currentStatus = response.data.error_message;
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ }
+
+ };
+ $scope.goBack = function () {
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ function getCreationStatus() {
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+
+ if (response.data.abort === 1) {
+
+ if (response.data.installStatus === 1) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ } else {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $scope.currentStatus = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ }
+
+ } else {
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout(getCreationStatus, 1000);
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+});
+/* Java script code to syncWebsite ends here */
\ No newline at end of file
diff --git a/userManagment/views.py b/userManagment/views.py
index bbf0b9af8..c5ea7927e 100755
--- a/userManagment/views.py
+++ b/userManagment/views.py
@@ -365,12 +365,10 @@ def submitUserDeletion(request):
currentACL = ACLManager.loadedACL(userID)
- if accountUsername == 'admin':
- data_ret = {'status': 0, 'deleteStatus': 0, 'error_message': 'You can not delete the super user.'}
- json_data = json.dumps(data_ret)
- return HttpResponse(json_data)
+ currentUser = Administrator.objects.get(pk=userID)
+ userInQuestion = Administrator.objects.get(userName=accountUsername)
- if currentACL['admin'] == 1:
+ if ACLManager.checkUserOwnerShip(currentACL, currentUser, userInQuestion):
user = Administrator.objects.get(userName=accountUsername)
user.delete()
@@ -378,7 +376,7 @@ def submitUserDeletion(request):
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
- data_ret = {'status': 0, 'deleteStatus': 1, 'error_message': 'Not enough privileges.'}
+ data_ret = {'status': 0, 'deleteStatus': 0, 'error_message': 'Not enough privileges.'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
diff --git a/websiteFunctions/StagingSetup.py b/websiteFunctions/StagingSetup.py
new file mode 100644
index 000000000..678560d4d
--- /dev/null
+++ b/websiteFunctions/StagingSetup.py
@@ -0,0 +1,227 @@
+#!/usr/local/CyberCP/bin/python2
+import threading as multi
+from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
+from plogical.virtualHostUtilities import virtualHostUtilities
+from plogical.processUtilities import ProcessUtilities
+from .models import Websites, ChildDomains
+from plogical.applicationInstaller import ApplicationInstaller
+from plogical.mysqlUtilities import mysqlUtilities
+from random import randint
+import os
+
+class StagingSetup(multi.Thread):
+
+ def __init__(self, function, extraArgs):
+ multi.Thread.__init__(self)
+ self.function = function
+ self.extraArgs = extraArgs
+
+ def run(self):
+ try:
+ if self.function == 'startCloning':
+ self.startCloning()
+ elif self.function == 'startSyncing':
+ self.startSyncing()
+ except BaseException, msg:
+ logging.writeToFile( str(msg) + ' [StagingSetup.run]')
+
+ def startCloning(self):
+ try:
+ tempStatusPath = self.extraArgs['tempStatusPath']
+ masterDomain = self.extraArgs['masterDomain']
+ domain = self.extraArgs['domain']
+ admin = self.extraArgs['admin']
+
+ website = Websites.objects.get(domain=masterDomain)
+
+ ## Creating Child Domain
+
+ path = "/home/" + masterDomain + "/public_html/" + domain
+
+ logging.statusWriter(tempStatusPath, 'Creating domain for staging environment..,5')
+ phpSelection = 'PHP 7.1'
+ execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
+
+ execPath = execPath + " createDomain --masterDomain " + masterDomain + " --virtualHostName " + domain + \
+ " --phpVersion '" + phpSelection + "' --ssl 0 --dkimCheck 0 --openBasedir 0 --path " + path + ' --websiteOwner ' \
+ + admin.userName + ' --tempStatusPath %s' % (tempStatusPath + '1') + " --apache 0"
+
+ ProcessUtilities.executioner(execPath)
+
+ domainCreationStatusPath = tempStatusPath + '1'
+
+ data = open(domainCreationStatusPath, 'r').read()
+
+ if data.find('[200]') > -1:
+ pass
+ else:
+ logging.statusWriter(tempStatusPath, 'Failed to create child-domain for staging enviroment. [404]')
+ return 0
+
+ logging.statusWriter(tempStatusPath, 'Domain successfully created..,15')
+
+ ## Copying Data
+
+ masterPath = '/home/%s/public_html' % (masterDomain)
+
+ command = 'rsync -avzh --exclude "%s" --exclude "wp-content/plugins/litespeed-cache" %s/ %s' % (domain, masterPath, path)
+ ProcessUtilities.executioner(command, website.externalApp)
+
+ logging.statusWriter(tempStatusPath, 'Data copied..,50')
+
+ ## Creating Database
+
+ logging.statusWriter(tempStatusPath, 'Creating and copying database..,50')
+
+ dbNameRestore, dbUser, dbPassword = ApplicationInstaller(None, None).dbCreation(tempStatusPath, website)
+
+ # Create dump of existing database
+
+ configPath = '%s/wp-config.php' % (masterPath)
+
+ if not os.path.exists(configPath):
+ logging.statusWriter(tempStatusPath, 'WordPress is not detected. [404]')
+ return 0
+
+ data = open(configPath, 'r').readlines()
+
+ for items in data:
+ if items.find('DB_NAME') > -1:
+ dbName = items.split("'")[3]
+ if mysqlUtilities.createDatabaseBackup(dbName, '/home/cyberpanel'):
+ break
+ else:
+ raise BaseException('Failed to create database backup.')
+
+ databasePath = '%s/%s.sql' % ('/home/cyberpanel', dbName)
+
+ command = "sed -i 's/%s/%s/g' %s" % (masterDomain, domain, databasePath)
+ ProcessUtilities.executioner(command, 'cyberpanel')
+
+ if not mysqlUtilities.restoreDatabaseBackup(dbNameRestore, '/home/cyberpanel', None, 1, dbName):
+ try:
+ os.remove(databasePath)
+ except:
+ pass
+ raise BaseException('Failed to restore database backup.')
+
+ try:
+ os.remove(databasePath)
+ except:
+ pass
+
+ ## Update final config file
+
+ pathFinalConfig = '%s/wp-config.php' % (path)
+ data = open(pathFinalConfig, 'r').readlines()
+
+ tmp = "/tmp/" + str(randint(1000, 9999))
+ writeToFile = open(tmp, 'w')
+
+ for items in data:
+ if items.find('DB_NAME') > -1:
+ writeToFile.write("define( 'DB_NAME', '%s' );\n" % (dbNameRestore))
+ elif items.find('DB_USER') > -1:
+ writeToFile.write("define( 'DB_USER', '%s' );\n" % (dbUser))
+ elif items.find('DB_PASSWORD') > -1:
+ writeToFile.write("define( 'DB_PASSWORD', '%s' );\n" % (dbPassword))
+ else:
+ writeToFile.write(items)
+
+ writeToFile.close()
+
+ command = 'mv %s %s' % (tmp, pathFinalConfig)
+ ProcessUtilities.executioner(command, website.externalApp)
+
+ logging.statusWriter(tempStatusPath, 'Database synced..,100')
+
+ try:
+ os.path.remove(databasePath)
+ except:
+ pass
+
+ logging.statusWriter(tempStatusPath, 'Data copied..,[200]')
+
+ return 0
+ except BaseException, msg:
+ mesg = '%s. [404]' % (str(msg))
+ logging.statusWriter(tempStatusPath, mesg)
+
+ def startSyncing(self):
+ try:
+ tempStatusPath = self.extraArgs['tempStatusPath']
+ childDomain = self.extraArgs['childDomain']
+ eraseCheck = self.extraArgs['eraseCheck']
+ dbCheck = self.extraArgs['dbCheck']
+ copyChanged = self.extraArgs['copyChanged']
+
+ child = ChildDomains.objects.get(domain=childDomain)
+
+ configPath = '%s/wp-config.php' % (child.path)
+ if not os.path.exists(configPath):
+ logging.statusWriter(tempStatusPath, 'WordPress is not detected. [404]')
+ return 0
+
+ if dbCheck:
+ logging.statusWriter(tempStatusPath, 'Syncing databases..,10')
+
+ ## Create backup of child-domain database
+
+ configPath = '%s/wp-config.php' % (child.path)
+
+ data = open(configPath, 'r').readlines()
+
+ for items in data:
+ if items.find('DB_NAME') > -1:
+ dbName = items.split("'")[3]
+ if mysqlUtilities.createDatabaseBackup(dbName, '/home/cyberpanel'):
+ break
+ else:
+ raise BaseException('Failed to create database backup.')
+
+ databasePath = '%s/%s.sql' % ('/home/cyberpanel', dbName)
+ command = "sed -i 's/%s/%s/g' %s" % (child.domain, child.master.domain, databasePath)
+ ProcessUtilities.executioner(command, 'cyberpanel')
+
+ ## Restore to master domain
+
+ masterPath = '/home/%s/public_html' % (child.master.domain)
+
+ configPath = '%s/wp-config.php' % (masterPath)
+
+ data = open(configPath, 'r').readlines()
+
+ for items in data:
+ if items.find('DB_NAME') > -1:
+ dbNameRestore = items.split("'")[3]
+ if not mysqlUtilities.restoreDatabaseBackup(dbNameRestore, '/home/cyberpanel', None, 1, dbName):
+ try:
+ os.remove(databasePath)
+ except:
+ pass
+ raise BaseException('Failed to restore database backup.')
+
+ try:
+ os.remove(databasePath)
+ except:
+ pass
+
+ if eraseCheck:
+ sourcePath = child.path
+ destinationPath = '/home/%s/public_html' % (child.master.domain)
+
+ command = 'rsync -avzh --exclude "wp-config.php" %s/ %s' % (sourcePath, destinationPath)
+ ProcessUtilities.executioner(command, child.master.externalApp)
+ elif copyChanged:
+ sourcePath = child.path
+ destinationPath = '/home/%s/public_html' % (child.master.domain)
+
+ command = 'rsync -avzh --exclude "wp-config.php" %s/ %s' % (sourcePath, destinationPath)
+ ProcessUtilities.executioner(command, child.master.externalApp)
+
+ logging.statusWriter(tempStatusPath, 'Data copied..,[200]')
+
+ return 0
+ except BaseException, msg:
+ mesg = '%s. [404]' % (str(msg))
+ logging.statusWriter(tempStatusPath, mesg)
\ No newline at end of file
diff --git a/websiteFunctions/static/websiteFunctions/websiteFunctions.js b/websiteFunctions/static/websiteFunctions/websiteFunctions.js
index 0cd60be54..f9fc0908a 100755
--- a/websiteFunctions/static/websiteFunctions/websiteFunctions.js
+++ b/websiteFunctions/static/websiteFunctions/websiteFunctions.js
@@ -286,7 +286,6 @@ app.controller('listWebsites', function ($scope, $http) {
} else {
$("#listFail").fadeIn();
$scope.errorMessage = response.data.error_message;
- console.log(response.data);
}
}
@@ -447,9 +446,8 @@ app.controller('deleteWebsiteControl', function ($scope, $http) {
function ListInitialDatas(response) {
- console.log(response.data)
- if (response.data.websiteDeleteStatus == 0) {
+ if (response.data.websiteDeleteStatus === 0) {
$scope.errorMessage = response.data.error_message;
$("#websiteDeleteFailure").fadeIn();
$("#websiteDeleteSuccess").hide();
@@ -471,7 +469,6 @@ app.controller('deleteWebsiteControl', function ($scope, $http) {
}
function cantLoadInitialDatas(response) {
- console.log("not good");
}
@@ -4943,7 +4940,6 @@ app.controller('sshAccess', function ($scope, $http, $timeout) {
} else {
-
new PNotify({
title: 'Error!',
text: response.data.error_message,
@@ -4969,4 +4965,300 @@ app.controller('sshAccess', function ($scope, $http, $timeout) {
};
-});
\ No newline at end of file
+});
+
+
+/* Java script code to cloneWebsite */
+app.controller('cloneWebsite', function ($scope, $http, $timeout, $window) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.goBackDisable = true;
+
+ var statusFile;
+
+ $scope.startCloning = function () {
+
+ $scope.cyberpanelLoading = false;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = true;
+
+ $scope.currentStatus = "Cloning started..";
+
+ url = "/websites/startCloning";
+
+
+ var data = {
+ masterDomain: $("#domainName").text(),
+ domainName: $scope.domain
+
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $scope.currentStatus = response.data.error_message;
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ }
+
+ };
+ $scope.goBack = function () {
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ function getCreationStatus() {
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+
+ if (response.data.abort === 1) {
+
+ if (response.data.installStatus === 1) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ } else {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $scope.currentStatus = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ }
+
+ } else {
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout(getCreationStatus, 1000);
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+});
+/* Java script code to cloneWebsite ends here */
+
+
+/* Java script code to syncWebsite */
+app.controller('syncWebsite', function ($scope, $http, $timeout, $window) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.goBackDisable = true;
+
+ var statusFile;
+
+ $scope.startSyncing = function () {
+
+ $scope.cyberpanelLoading = false;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = true;
+
+ $scope.currentStatus = "Cloning started..";
+
+ url = "/websites/startSync";
+
+
+ var data = {
+ childDomain: $("#childDomain").text(),
+ eraseCheck: $scope.eraseCheck,
+ dbCheck: $scope.dbCheck,
+ copyChanged: $scope.copyChanged
+
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $scope.currentStatus = response.data.error_message;
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ }
+
+ };
+ $scope.goBack = function () {
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ function getCreationStatus() {
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+
+ if (response.data.abort === 1) {
+
+ if (response.data.installStatus === 1) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ } else {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $scope.currentStatus = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ }
+
+ } else {
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout(getCreationStatus, 1000);
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+});
+/* Java script code to syncWebsite ends here */
\ No newline at end of file
diff --git a/websiteFunctions/templates/websiteFunctions/createWebsite.html b/websiteFunctions/templates/websiteFunctions/createWebsite.html
index 7a8e1b66d..435b2453b 100755
--- a/websiteFunctions/templates/websiteFunctions/createWebsite.html
+++ b/websiteFunctions/templates/websiteFunctions/createWebsite.html
@@ -47,7 +47,6 @@
-
-
-
-