diff --git a/CyberCP/secMiddleware.py b/CyberCP/secMiddleware.py
index 5a4488b64..12fcf7aa0 100644
--- a/CyberCP/secMiddleware.py
+++ b/CyberCP/secMiddleware.py
@@ -17,7 +17,7 @@ class secMiddleware:
pass
else:
continue
- if key == 'emailMessage' or key == 'configData' or key == 'rewriteRules' or key == 'modSecRules' or key == 'recordContentTXT' or key == 'SecAuditLogRelevantStatus':
+ if key == 'emailMessage' or key == 'configData' or key == 'rewriteRules' or key == 'modSecRules' or key == 'recordContentTXT' or key == 'SecAuditLogRelevantStatus' or key == 'fileContent':
continue
if value.find(';') > -1 or value.find('&&') > -1 or value.find('|') > -1 or value.find('...') > -1:
logging.writeToFile(request.body)
diff --git a/CyberCP/settings.py b/CyberCP/settings.py
index 8cac18eab..20bb7c61e 100644
--- a/CyberCP/settings.py
+++ b/CyberCP/settings.py
@@ -187,3 +187,6 @@ LANGUAGES = (
('pl', _('Polish')),
('vi', _('Vietnamese')),
)
+
+MEDIA_URL = '/home/cyberpanel/media/'
+MEDIA_ROOT = MEDIA_URL
\ No newline at end of file
diff --git a/dockerManager/templates/dockerManager/viewContainer.html b/dockerManager/templates/dockerManager/viewContainer.html
index ef314418d..44b71e263 100644
--- a/dockerManager/templates/dockerManager/viewContainer.html
+++ b/dockerManager/templates/dockerManager/viewContainer.html
@@ -281,9 +281,9 @@
-
+
-
+
-
-
+
+
@@ -304,7 +304,7 @@
Container Processes
-
-
-
+
+
+
-{% endblock %}
+{% endblock %}
diff --git a/filemanager/filemanager.py b/filemanager/filemanager.py
new file mode 100644
index 000000000..0d462f756
--- /dev/null
+++ b/filemanager/filemanager.py
@@ -0,0 +1,315 @@
+from django.shortcuts import HttpResponse
+import json
+import subprocess, shlex
+from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
+from plogical.processUtilities import ProcessUtilities
+from websiteFunctions.models import Websites
+from random import randint
+from django.core.files.storage import FileSystemStorage
+
+class FileManager:
+ def __init__(self, request, data):
+ self.request = request
+ self.data = data
+
+
+ def ajaxPre(self, status, errorMessage):
+ final_dic = {'status': status, 'error_message': errorMessage, 'uploadStatus': status}
+ final_json = json.dumps(final_dic)
+ return HttpResponse(final_json)
+
+ def returnPathEnclosed(self, path):
+ return "'" + path + "'"
+
+ def changeOwner(self, path):
+ domainName = self.data['domainName']
+ website = Websites.objects.get(domain=domainName)
+ command = "sudo chown -R " + website.externalApp + ':' + website.externalApp + ' ' + self.returnPathEnclosed(path)
+ ProcessUtilities.executioner(command)
+
+ def listForTable(self):
+ try:
+ finalData = {}
+ finalData['status'] = 1
+
+ if not self.data['completeStartingPath'].find(self.data['home']) > -1:
+ return self.ajaxPre(0, 'Not allowed to browse this path, going back home!')
+
+ command = "sudo ls -la --group-directories-first " + self.returnPathEnclosed(self.data['completeStartingPath'])
+ output = subprocess.check_output(shlex.split(command)).splitlines()
+
+ counter = 0
+ for items in output:
+ currentFile = items.split(' ')
+ currentFile = filter(lambda a: a != '', currentFile)
+ if currentFile[-1] == '.' or currentFile[-1] == '..' or currentFile[0] == 'total':
+ continue
+ dirCheck = 0
+ if currentFile[0][0] == 'd':
+ dirCheck = 1
+
+ size = str(int(int(currentFile[4])/float(1024)))
+ lastModified = currentFile[5] + ' ' + currentFile[6] + ' ' + currentFile[7]
+ finalData[str(counter)] = [currentFile[-1], currentFile[-1], lastModified, size, currentFile[0], dirCheck]
+ counter = counter + 1
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
+
+ def list(self):
+ try:
+ finalData = {}
+ finalData['status'] = 1
+
+ command = "sudo ls -la --group-directories-first " + self.returnPathEnclosed(self.data['completeStartingPath'])
+ output = subprocess.check_output(shlex.split(command)).splitlines()
+
+ counter = 0
+ for items in output:
+ currentFile = items.split(' ')
+ currentFile = filter(lambda a: a != '', currentFile)
+
+ if currentFile[-1] == '.' or currentFile[-1] == '..' or currentFile[0] == 'total':
+ continue
+
+ dirCheck = False
+ if currentFile[0][0] == 'd':
+ dirCheck = True
+
+ finalData[str(counter)] = [currentFile[-1], self.data['completeStartingPath'] + '/' + currentFile[-1], dirCheck]
+ counter = counter + 1
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
+
+ def createNewFile(self):
+ try:
+ finalData = {}
+ finalData['status'] = 1
+
+ command = "sudo touch " + self.returnPathEnclosed(self.data['fileName'])
+ ProcessUtilities.executioner(command)
+
+ self.changeOwner(self.data['fileName'])
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
+
+ def createNewFolder(self):
+ try:
+ finalData = {}
+ finalData['status'] = 1
+
+ command = "sudo mkdir " + self.returnPathEnclosed(self.data['folderName'])
+ ProcessUtilities.executioner(command)
+
+ self.changeOwner(self.data['folderName'])
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
+
+ def deleteFolderOrFile(self):
+ try:
+ finalData = {}
+ finalData['status'] = 1
+
+ for item in self.data['fileAndFolders']:
+ command = 'sudo rm -rf ' + self.returnPathEnclosed(self.data['path'] + '/' + item)
+ ProcessUtilities.executioner(command)
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
+
+ def copy(self):
+ try:
+
+ finalData = {}
+ finalData['status'] = 1
+
+ if not self.data['newPath'].find(self.data['home']) > -1:
+ return self.ajaxPre(0, 'Not allowed to move in this path, please choose location inside home!')
+
+ command = 'sudo mkdir ' + self.returnPathEnclosed(self.data['newPath'])
+ ProcessUtilities.executioner(command)
+
+ for item in self.data['fileAndFolders']:
+ command = 'sudo cp -R ' + self.returnPathEnclosed(self.data['basePath'] + '/' + item) + ' ' + self.returnPathEnclosed(self.data['newPath'] + '/' + item)
+ ProcessUtilities.executioner(command)
+
+ self.changeOwner(self.data['newPath'])
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
+
+ def move(self):
+ try:
+
+ finalData = {}
+ finalData['status'] = 1
+
+ if not self.data['newPath'].find(self.data['home']) > -1:
+ return self.ajaxPre(0, 'Not allowed to move in this path, please choose location inside home!')
+
+ command = 'sudo mkdir ' + self.returnPathEnclosed(self.data['newPath'])
+ ProcessUtilities.executioner(command)
+
+ for item in self.data['fileAndFolders']:
+ command = 'sudo mv ' + self.returnPathEnclosed(self.data['basePath'] + '/' + item) + ' ' + self.returnPathEnclosed(self.data['newPath'] + '/' + item)
+ ProcessUtilities.executioner(command)
+
+ self.changeOwner(self.data['newPath'])
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
+
+ def rename(self):
+ try:
+
+ finalData = {}
+ finalData['status'] = 1
+
+
+ command = 'sudo mv ' + self.returnPathEnclosed(self.data['basePath'] + '/' + self.data['existingName']) + ' ' + self.returnPathEnclosed(self.data['basePath'] + '/' + self.data['newFileName'])
+ ProcessUtilities.executioner(command)
+
+ self.changeOwner(self.data['basePath'] + '/' + self.data['newFileName'])
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
+
+ def readFileContents(self):
+ try:
+
+ finalData = {}
+ finalData['status'] = 1
+
+ command = 'sudo cat ' + self.returnPathEnclosed(self.data['fileName'])
+ ProcessUtilities.executioner(command)
+ finalData['fileContents'] = subprocess.check_output(shlex.split(command))
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
+
+ def writeFileContents(self):
+ try:
+
+ finalData = {}
+ finalData['status'] = 1
+ tempPath = "/home/cyberpanel/" + str(randint(1000, 9999))
+
+ writeToFile = open(tempPath, 'w')
+ writeToFile.write(self.data['fileContent'])
+ writeToFile.close()
+
+ command = 'sudo mv ' + tempPath + ' ' + self.returnPathEnclosed(self.data['fileName'])
+ ProcessUtilities.executioner(command)
+ self.changeOwner(self.data['fileName'])
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
+
+ def upload(self):
+ try:
+
+ finalData = {}
+ finalData['uploadStatus'] = 1
+ finalData['answer'] = 'File transfer completed.'
+
+ myfile = self.request.FILES['file']
+ fs = FileSystemStorage()
+ filename = fs.save(myfile.name, myfile)
+ finalData['fileName'] = fs.url(filename)
+
+ command = 'sudo mv ' + self.returnPathEnclosed('/home/cyberpanel/media/' + myfile.name) + ' ' + self.returnPathEnclosed(self.data['completePath'] + '/' + myfile.name)
+ ProcessUtilities.executioner(command)
+
+ self.changeOwner(self.data['completePath'] + '/' + myfile.name)
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
+
+ def extract(self):
+ try:
+
+ finalData = {}
+ finalData['status'] = 1
+
+ if not self.data['extractionLocation'].find(self.data['home']) > -1:
+ return self.ajaxPre(0, 'Not allowed to move in this path, please choose location inside home!')
+
+ if self.data['extractionType'] == 'zip':
+ command = 'sudo unzip -o ' + self.returnPathEnclosed(self.data['fileToExtract']) + ' -d ' + self.returnPathEnclosed(self.data['extractionLocation'])
+ else:
+ command = 'sudo tar -xf ' + self.returnPathEnclosed(self.data['fileToExtract']) + ' -C ' + self.returnPathEnclosed(self.data['extractionLocation'])
+
+ ProcessUtilities.executioner(command)
+
+ self.changeOwner(self.data['extractionLocation'])
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
+
+ def compress(self):
+ try:
+
+ finalData = {}
+ finalData['status'] = 1
+
+
+
+ if self.data['compressionType'] == 'zip':
+ compressedFileName = self.returnPathEnclosed(self.data['basePath'] + '/' + self.data['compressedFileName'] + '.zip')
+ command = 'sudo zip -r ' + compressedFileName + ' '
+ else:
+ compressedFileName = self.returnPathEnclosed(
+ self.data['basePath'] + '/' + self.data['compressedFileName'] + '.tar.gz')
+ command = 'sudo tar -czvf ' + compressedFileName + ' '
+
+ for item in self.data['listOfFiles']:
+ command = command + self.returnPathEnclosed(self.data['basePath'] + '/' + item) + ' '
+
+ ProcessUtilities.executioner(command)
+
+ self.changeOwner(self.data['compressedFileName'])
+
+ json_data = json.dumps(finalData)
+ return HttpResponse(json_data)
+
+ except BaseException, msg:
+ return self.ajaxPre(0, str(msg))
\ No newline at end of file
diff --git a/filemanager/static/filemanager/js/fileManager.js b/filemanager/static/filemanager/js/fileManager.js
index 9decf19cf..cd88bc316 100644
--- a/filemanager/static/filemanager/js/fileManager.js
+++ b/filemanager/static/filemanager/js/fileManager.js
@@ -63,7 +63,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
nodeForChilds = element.parentNode;
funcCompletePath = completePath;
}
- url = domainName + "/php/fileManager.php";
+ url = '/filemanager/controller';
var data = {
@@ -81,7 +81,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.treeLoading = true;
- if (response.data.fetchStatus === 1) {
+ if (response.data.status === 1) {
/// node prepration
@@ -93,7 +93,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
var keys = Object.keys(filesData);
for (var i = 0; i < keys.length; i++) {
- if (keys[i] === "error_message" | keys[i] === "fetchStatus") {
+ if (keys[i] === "error_message" | keys[i] === "status") {
continue;
}
else {
@@ -620,7 +620,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
allFilesAndFolders = [];
$scope.buttonActivator();
- url = domainName + "/php/fileManager.php";
+ url = "/filemanager/controller";
var completePathToFile = "";
if (functionName === "startPoint") {
@@ -666,7 +666,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
tableBody.innerHTML = '';
- if (response.data.fetchStatus === 1) {
+ if (response.data.status === 1) {
/// node prepration
@@ -676,7 +676,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
var keys = Object.keys(filesData);
for (var i = 0; i < keys.length; i++) {
- if (keys[i] === "error_message" | keys[i] === "fetchStatus") {
+ if (keys[i] === "error_message" | keys[i] === "status") {
continue;
}
else {
@@ -697,7 +697,6 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
}
else {
var notification = alertify.notify(response.data.error_message, 'error', 10, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'homeFetch');
}
@@ -713,46 +712,6 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
return (/[.]/.exec(fileName)) ? /[^.]+$/.exec(fileName) : undefined;
}
- // Create entry point for domain
-
- function createEntryPoint() {
-
- url = "/filemanager/createTemporaryFile";
-
- var data = {
- domainName: domainName
- };
-
- var config = {};
-
- $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
-
-
- function ListInitialDatas(response) {
-
- if (response.data.createTemporaryFile === 1) {
- domainRandomSeed = response.data.domainRandomSeed;
- $scope.fetchForTableSecondary(null, "startPoint");
- }
- else {
- var notification = alertify.notify(response.data.error_message, 'error', 10, function () {
- console.log('dismissed');
- });
- }
- }
-
- function cantLoadInitialDatas(response) {
- var notification = alertify.notify("Could not connec to server, refresh page.", 'error', 10, function () {
- console.log('dismissed');
- });
- }
-
-
- }
-
- createEntryPoint();
-
-
// html editor
$scope.getFileContents = function () {
@@ -774,7 +733,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.htmlEditorLoading = true;
- if (response.data.fetchStatus === 1) {
+ if (response.data.status === 1) {
var editor = ace.edit("htmlEditorContent");
editor.setTheme("ace/theme/chrome");
@@ -817,7 +776,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.htmlEditorLoading = true;
- if (response.data.saveStatus === 1) {
+ if (response.data.status === 1) {
$scope.htmlEditorLoading = true;
$scope.saveSuccess = false;
}
@@ -839,7 +798,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.errorMessage = true;
var uploader = $scope.uploader = new FileUploader({
- url: domainName + "/php/caller.php",
+ url: "/filemanager/upload",
formData: [{
"method": "upload",
"home": homePathBack
@@ -902,12 +861,12 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
domainName: domainName
};
-
+ var url = '/filemanager/controller';
$http.post(url, data).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
- if (response.data.createStatus === 1) {
+ if (response.data.status === 1) {
$scope.createSuccess = false;
$scope.fetchForTableSecondary(null, 'refresh');
$('#showCreateFolder').modal('hide');
@@ -959,7 +918,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
function ListInitialDatas(response) {
- if (response.data.createStatus === 1) {
+ if (response.data.status === 1) {
$scope.createSuccess = false;
$scope.fetchForTableSecondary(null, 'refresh');
$('#showCreateFile').modal('hide');
@@ -1004,10 +963,9 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
function ListInitialDatas(response) {
$scope.deleteLoading = true;
- if (response.data.deleteStatus === 1) {
+ if (response.data.status === 1) {
$('#showDelete').modal('hide');
var notification = alertify.notify('Successfully Deleted!', 'success', 5, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'refresh');
}
@@ -1062,15 +1020,13 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.compressionLoading = true;
$('#showCompression').modal('hide');
- if (response.data.compressed === 1) {
+ if (response.data.status === 1) {
var notification = alertify.notify('Successfully Compressed!', 'success', 5, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'refresh');
}
else {
var notification = alertify.notify(response.data.error_message, 'error', 5, function () {
- console.log('dismissed');
});
}
@@ -1125,7 +1081,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.extractionLoading = true;
$('#showExtraction').modal('hide');
- if (response.data.extracted === 1) {
+ if (response.data.status === 1) {
var notification = alertify.notify('Successfully Extracted!', 'success', 5, function () {
console.log('dismissed');
});
@@ -1184,15 +1140,13 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.moveLoading = true;
$('#showMove').modal('hide');
- if (response.data.moved === 1) {
+ if (response.data.status === 1) {
var notification = alertify.notify('Successfully Moved!', 'success', 5, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'refresh');
}
else {
var notification = alertify.notify(response.data.error_message, 'error', 5, function () {
- console.log('dismissed');
});
}
@@ -1242,15 +1196,13 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$('#showCopy').modal('hide');
- if (response.data.copied === 1) {
+ if (response.data.status === 1) {
var notification = alertify.notify('Successfully Copied!', 'success', 5, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'refresh');
}
else {
var notification = alertify.notify(response.data.error_message, 'error', 5, function () {
- console.log('dismissed');
});
}
@@ -1366,15 +1318,13 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$('#showRename').modal('hide');
$scope.renameLoading = true;
- if (response.data.renamed === 1) {
+ if (response.data.status === 1) {
var notification = alertify.notify('Successfully Renamed!', 'success', 5, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'refresh');
}
else {
var notification = alertify.notify(response.data.error_message, 'error', 5, function () {
- console.log('dismissed');
});
}
@@ -1602,13 +1552,11 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
if (response.data.permissionsChanged === 1) {
var notification = alertify.notify('Permissions Successfully Changed!', 'success', 5, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'refresh');
}
else {
var notification = alertify.notify(response.data.error_message, 'error', 5, function () {
- console.log('dismissed');
});
}
diff --git a/filemanager/urls.py b/filemanager/urls.py
index 4fe10f8e9..25a64655f 100644
--- a/filemanager/urls.py
+++ b/filemanager/urls.py
@@ -2,9 +2,10 @@ from django.conf.urls import url
import views
urlpatterns = [
+ url(r'^upload$',views.upload, name='upload'),
url(r'^changePermissions$',views.changePermissions, name='changePermissions'),
+ url(r'^controller$',views.controller, name='controller'),
url(r'^downloadFile$',views.downloadFile, name='downloadFile'),
- url(r'^createTemporaryFile$',views.createTemporaryFile, name='createTemporaryFile'),
url(r'^(?P(.*))$', views.loadFileManagerHome, name='loadFileManagerHome'),
]
diff --git a/filemanager/views.py b/filemanager/views.py
index d3d599e19..ce1129888 100644
--- a/filemanager/views.py
+++ b/filemanager/views.py
@@ -13,6 +13,7 @@ import shlex
import os
from plogical.virtualHostUtilities import virtualHostUtilities
from plogical.acl import ACLManager
+from .filemanager import FileManager as FM
# Create your views here.
@@ -34,7 +35,6 @@ def loadFileManagerHome(request,domain):
except KeyError:
return redirect(loadLoginPage)
-
def changePermissions(request):
try:
userID = request.session['userID']
@@ -92,40 +92,71 @@ def downloadFile(request):
except KeyError:
return redirect(loadLoginPage)
-def createTemporaryFile(request):
+def controller(request):
try:
- userID = request.session['userID']
data = json.loads(request.body)
domainName = data['domainName']
+ method = data['method']
+ userID = request.session['userID']
admin = Administrator.objects.get(pk=userID)
-
currentACL = ACLManager.loadedACL(userID)
if ACLManager.checkOwnership(domainName, admin, currentACL) == 1:
pass
else:
- return ACLManager.loadErrorJson('createTemporaryFile', 0)
+ return ACLManager.loadErrorJson()
- ## Create file manager entry
+ fm = FM(request, data)
- if Websites.objects.filter(domain=domainName).exists():
- execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/filemanager.py"
+ if method == 'listForTable':
+ return fm.listForTable()
+ elif method == 'list':
+ return fm.list()
+ elif method == 'createNewFile':
+ return fm.createNewFile()
+ elif method == 'createNewFolder':
+ return fm.createNewFolder()
+ elif method == 'deleteFolderOrFile':
+ return fm.deleteFolderOrFile()
+ elif method == 'copy':
+ return fm.copy()
+ elif method == 'move':
+ return fm.move()
+ elif method == 'rename':
+ return fm.rename()
+ elif method == 'readFileContents':
+ return fm.readFileContents()
+ elif method == 'writeFileContents':
+ return fm.writeFileContents()
+ elif method == 'upload':
+ return fm.writeFileContents()
+ elif method == 'extract':
+ return fm.extract()
+ elif method == 'compress':
+ return fm.compress()
- execPath = execPath + " createTemporaryFile --domainName " + domainName
- output = subprocess.check_output(shlex.split(execPath))
+ except BaseException, msg:
+ fm = FM(request, None)
+ return fm.ajaxPre(0, str(msg))
- if output.find("0,") > -1:
- data_ret = {'createTemporaryFile': 0, 'error_message': "None"}
- json_data = json.dumps(data_ret)
- return HttpResponse(json_data)
+def upload(request):
+ try:
- else:
- domainRandomSeed = output.rstrip('\n')
- data_ret = {'createTemporaryFile': 1, 'error_message': "None", 'domainRandomSeed': domainRandomSeed}
- json_data = json.dumps(data_ret)
- return HttpResponse(json_data)
+ data = request.POST
+
+ userID = request.session['userID']
+ admin = Administrator.objects.get(pk=userID)
+ currentACL = ACLManager.loadedACL(userID)
+
+ if ACLManager.checkOwnership(data['domainName'], admin, currentACL) == 1:
+ pass
+ else:
+ return ACLManager.loadErrorJson()
+
+ fm = FM(request, data)
+ return fm.upload()
except KeyError:
return redirect(loadLoginPage)
diff --git a/install/gun-configs/gunicorn.service b/install/gun-configs/gunicorn.service
index 548b564b6..fced14826 100644
--- a/install/gun-configs/gunicorn.service
+++ b/install/gun-configs/gunicorn.service
@@ -9,7 +9,7 @@ User=cyberpanel
Group=cyberpanel
RuntimeDirectory=gunicorn
WorkingDirectory=/usr/local/CyberCP
-ExecStart=/usr/local/CyberCP/bin/gunicorn --pid /run/gunicorn/gucpid \
+ExecStart=/usr/local/CyberCP/bin/gunicorn --pid /run/gunicorn/gucpid --timeout 2000 --workers 2 \
--bind 127.0.0.1:5003 CyberCP.wsgi
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
diff --git a/plogical/upgrade.py b/plogical/upgrade.py
index 843e9ade9..be95454b2 100644
--- a/plogical/upgrade.py
+++ b/plogical/upgrade.py
@@ -121,7 +121,7 @@ User=cyberpanel
Group=cyberpanel
RuntimeDirectory=gunicorn
WorkingDirectory=/usr/local/CyberCP
-ExecStart=/usr/local/CyberCP/bin/gunicorn --pid /run/gunicorn/gucpid \
+ExecStart=/usr/local/CyberCP/bin/gunicorn --pid /run/gunicorn/gucpid --timeout 2000 --workers 2 \
--bind 127.0.0.1:5003 CyberCP.wsgi
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
@@ -697,6 +697,11 @@ WantedBy=multi-user.target"""
except:
pass
+ try:
+ cursor.execute('ALTER TABLE dockerManager_containers ADD volumes longtext')
+ except:
+ pass
+
try:
connection.close()
except:
@@ -838,6 +843,15 @@ WantedBy=multi-user.target"""
else:
writeToFile.writelines(items)
+ MEDIA_URL = 1
+ for items in data:
+ if items.find('MEDIA_URL') > -1:
+ MEDIA_URL = 0
+
+ if MEDIA_URL == 1:
+ writeToFile.writelines("MEDIA_URL = '/home/cyberpanel/media/'\n")
+ writeToFile.writelines('MEDIA_ROOT = MEDIA_URL\n')
+
writeToFile.close()
Upgrade.stdOut('Settings file restored!')
diff --git a/static/dockerManager/dockerManager.js b/static/dockerManager/dockerManager.js
index 96421e682..e77e55ed6 100644
--- a/static/dockerManager/dockerManager.js
+++ b/static/dockerManager/dockerManager.js
@@ -1,5 +1,3 @@
-
-
app.controller('installDocker', function ($scope, $http, $timeout, $window) {
$scope.installDockerStatus = true;
$scope.installBoxGen = true;
@@ -120,18 +118,27 @@ app.controller('runContainer', function ($scope, $http) {
$scope.couldNotConnect = true;
$scope.goBackDisable = true;
+ $scope.volList = {};
+ $scope.volListNumber = 0;
+ $scope.addVolField = function () {
+ $scope.volList[$scope.volListNumber] = {'dest': '', 'src': ''};
+ $scope.volListNumber = $scope.volListNumber + 1;
+ console.log($scope.volList)
+ };
+ $scope.removeVolField = function () {
+ delete $scope.volList[$scope.volListNumber - 1];
+ $scope.volListNumber = $scope.volListNumber - 1;
+ };
+
$scope.addEnvField = function () {
var countEnv = Object.keys($scope.envList).length;
$scope.envList[countEnv + 1] = {'name': '', 'value': ''};
- }
+ };
var statusFile;
$scope.createContainer = function () {
- console.log($scope.iport);
- console.log($scope.portType);
-
$scope.containerCreationLoading = true;
$scope.installationDetailsForm = true;
$scope.installationProgress = false;
@@ -157,7 +164,8 @@ app.controller('runContainer', function ($scope, $http) {
memory: memory,
dockerOwner: dockerOwner,
image: image,
- envList: $scope.envList
+ envList: $scope.envList,
+ volList: $scope.volList
};
@@ -165,8 +173,6 @@ app.controller('runContainer', function ($scope, $http) {
data[port + "/" + protocol] = $scope.eport[port];
});
- console.log(data)
-
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
@@ -314,7 +320,7 @@ app.controller('listContainers', function ($scope, $http) {
if (response.data.delContainerStatus === 1) {
location.reload();
}
- else if (response.data.delContainerStatus == 2) {
+ else if (response.data.delContainerStatus === 2) {
(new PNotify({
title: response.data.error_message,
text: 'Delete anyway?',
@@ -382,7 +388,6 @@ app.controller('listContainers', function ($scope, $http) {
else {
name = $scope.activeLog;
}
- console.log(name)
$scope.logs = "Loading...";
url = "/docker/getContainerLogs";
@@ -420,7 +425,7 @@ app.controller('listContainers', function ($scope, $http) {
type: 'error'
});
}
- }
+ };
url = "/docker/getContainerList";
@@ -697,7 +702,16 @@ app.controller('viewContainer', function ($scope, $http) {
});
}
- }
+ };
+
+ $scope.addVolField = function () {
+ $scope.volList[$scope.volListNumber] = {'dest': '', 'src': ''};
+ $scope.volListNumber = $scope.volListNumber + 1;
+ };
+ $scope.removeVolField = function () {
+ delete $scope.volList[$scope.volListNumber - 1];
+ $scope.volListNumber = $scope.volListNumber - 1;
+ };
$scope.saveSettings = function () {
$('#containerSettingLoading').show();
@@ -709,10 +723,11 @@ app.controller('viewContainer', function ($scope, $http) {
memory: $scope.memory,
startOnReboot: $scope.startOnReboot,
envConfirmation: $scope.envConfirmation,
- envList: $scope.envList
+ envList: $scope.envList,
+ volList: $scope.volList
};
- console.log(data)
+
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
diff --git a/static/filemanager/js/fileManager.js b/static/filemanager/js/fileManager.js
index 9decf19cf..cd88bc316 100644
--- a/static/filemanager/js/fileManager.js
+++ b/static/filemanager/js/fileManager.js
@@ -63,7 +63,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
nodeForChilds = element.parentNode;
funcCompletePath = completePath;
}
- url = domainName + "/php/fileManager.php";
+ url = '/filemanager/controller';
var data = {
@@ -81,7 +81,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.treeLoading = true;
- if (response.data.fetchStatus === 1) {
+ if (response.data.status === 1) {
/// node prepration
@@ -93,7 +93,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
var keys = Object.keys(filesData);
for (var i = 0; i < keys.length; i++) {
- if (keys[i] === "error_message" | keys[i] === "fetchStatus") {
+ if (keys[i] === "error_message" | keys[i] === "status") {
continue;
}
else {
@@ -620,7 +620,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
allFilesAndFolders = [];
$scope.buttonActivator();
- url = domainName + "/php/fileManager.php";
+ url = "/filemanager/controller";
var completePathToFile = "";
if (functionName === "startPoint") {
@@ -666,7 +666,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
tableBody.innerHTML = '';
- if (response.data.fetchStatus === 1) {
+ if (response.data.status === 1) {
/// node prepration
@@ -676,7 +676,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
var keys = Object.keys(filesData);
for (var i = 0; i < keys.length; i++) {
- if (keys[i] === "error_message" | keys[i] === "fetchStatus") {
+ if (keys[i] === "error_message" | keys[i] === "status") {
continue;
}
else {
@@ -697,7 +697,6 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
}
else {
var notification = alertify.notify(response.data.error_message, 'error', 10, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'homeFetch');
}
@@ -713,46 +712,6 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
return (/[.]/.exec(fileName)) ? /[^.]+$/.exec(fileName) : undefined;
}
- // Create entry point for domain
-
- function createEntryPoint() {
-
- url = "/filemanager/createTemporaryFile";
-
- var data = {
- domainName: domainName
- };
-
- var config = {};
-
- $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
-
-
- function ListInitialDatas(response) {
-
- if (response.data.createTemporaryFile === 1) {
- domainRandomSeed = response.data.domainRandomSeed;
- $scope.fetchForTableSecondary(null, "startPoint");
- }
- else {
- var notification = alertify.notify(response.data.error_message, 'error', 10, function () {
- console.log('dismissed');
- });
- }
- }
-
- function cantLoadInitialDatas(response) {
- var notification = alertify.notify("Could not connec to server, refresh page.", 'error', 10, function () {
- console.log('dismissed');
- });
- }
-
-
- }
-
- createEntryPoint();
-
-
// html editor
$scope.getFileContents = function () {
@@ -774,7 +733,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.htmlEditorLoading = true;
- if (response.data.fetchStatus === 1) {
+ if (response.data.status === 1) {
var editor = ace.edit("htmlEditorContent");
editor.setTheme("ace/theme/chrome");
@@ -817,7 +776,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.htmlEditorLoading = true;
- if (response.data.saveStatus === 1) {
+ if (response.data.status === 1) {
$scope.htmlEditorLoading = true;
$scope.saveSuccess = false;
}
@@ -839,7 +798,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.errorMessage = true;
var uploader = $scope.uploader = new FileUploader({
- url: domainName + "/php/caller.php",
+ url: "/filemanager/upload",
formData: [{
"method": "upload",
"home": homePathBack
@@ -902,12 +861,12 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
domainName: domainName
};
-
+ var url = '/filemanager/controller';
$http.post(url, data).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
- if (response.data.createStatus === 1) {
+ if (response.data.status === 1) {
$scope.createSuccess = false;
$scope.fetchForTableSecondary(null, 'refresh');
$('#showCreateFolder').modal('hide');
@@ -959,7 +918,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
function ListInitialDatas(response) {
- if (response.data.createStatus === 1) {
+ if (response.data.status === 1) {
$scope.createSuccess = false;
$scope.fetchForTableSecondary(null, 'refresh');
$('#showCreateFile').modal('hide');
@@ -1004,10 +963,9 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
function ListInitialDatas(response) {
$scope.deleteLoading = true;
- if (response.data.deleteStatus === 1) {
+ if (response.data.status === 1) {
$('#showDelete').modal('hide');
var notification = alertify.notify('Successfully Deleted!', 'success', 5, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'refresh');
}
@@ -1062,15 +1020,13 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.compressionLoading = true;
$('#showCompression').modal('hide');
- if (response.data.compressed === 1) {
+ if (response.data.status === 1) {
var notification = alertify.notify('Successfully Compressed!', 'success', 5, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'refresh');
}
else {
var notification = alertify.notify(response.data.error_message, 'error', 5, function () {
- console.log('dismissed');
});
}
@@ -1125,7 +1081,7 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.extractionLoading = true;
$('#showExtraction').modal('hide');
- if (response.data.extracted === 1) {
+ if (response.data.status === 1) {
var notification = alertify.notify('Successfully Extracted!', 'success', 5, function () {
console.log('dismissed');
});
@@ -1184,15 +1140,13 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$scope.moveLoading = true;
$('#showMove').modal('hide');
- if (response.data.moved === 1) {
+ if (response.data.status === 1) {
var notification = alertify.notify('Successfully Moved!', 'success', 5, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'refresh');
}
else {
var notification = alertify.notify(response.data.error_message, 'error', 5, function () {
- console.log('dismissed');
});
}
@@ -1242,15 +1196,13 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$('#showCopy').modal('hide');
- if (response.data.copied === 1) {
+ if (response.data.status === 1) {
var notification = alertify.notify('Successfully Copied!', 'success', 5, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'refresh');
}
else {
var notification = alertify.notify(response.data.error_message, 'error', 5, function () {
- console.log('dismissed');
});
}
@@ -1366,15 +1318,13 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
$('#showRename').modal('hide');
$scope.renameLoading = true;
- if (response.data.renamed === 1) {
+ if (response.data.status === 1) {
var notification = alertify.notify('Successfully Renamed!', 'success', 5, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'refresh');
}
else {
var notification = alertify.notify(response.data.error_message, 'error', 5, function () {
- console.log('dismissed');
});
}
@@ -1602,13 +1552,11 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader,
if (response.data.permissionsChanged === 1) {
var notification = alertify.notify('Permissions Successfully Changed!', 'success', 5, function () {
- console.log('dismissed');
});
$scope.fetchForTableSecondary(null, 'refresh');
}
else {
var notification = alertify.notify(response.data.error_message, 'error', 5, function () {
- console.log('dismissed');
});
}
diff --git a/websiteFunctions/models.py b/websiteFunctions/models.py
index c3a93cc3a..5d3476e0a 100644
--- a/websiteFunctions/models.py
+++ b/websiteFunctions/models.py
@@ -9,8 +9,8 @@ from loginSystem.models import Administrator
class Websites(models.Model):
- admin = models.ForeignKey(Administrator)
- package = models.ForeignKey(Package)
+ admin = models.ForeignKey(Administrator, on_delete=models.PROTECT)
+ package = models.ForeignKey(Package, on_delete=models.PROTECT)
domain = models.CharField(max_length=50,unique=True)
adminEmail = models.CharField(max_length=50)
phpSelection = models.CharField(max_length=10)