complete imunify integration

This commit is contained in:
Usman Nasir
2020-03-06 19:08:45 +05:00
parent 9f642cab39
commit 3ea6f7197b
7 changed files with 357 additions and 13 deletions

View File

@@ -114,16 +114,75 @@ class CageFS:
except BaseException as msg: except BaseException as msg:
logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath, str(msg) + ' [404].', 1) logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath, str(msg) + ' [404].', 1)
@staticmethod
def submitinstallImunify(key):
try:
mailUtilities.checkHome()
statusFile = open(ServerStatusUtil.lswsInstallStatusPath, 'w')
logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath,
"Starting Imunify Installation..\n", 1)
##
command = 'mkdir -p /etc/sysconfig/imunify360/generic'
ServerStatusUtil.executioner(command, statusFile)
command = 'touch /etc/sysconfig/imunify360/generic/modsec.conf'
ServerStatusUtil.executioner(command, statusFile)
integrationFile = '/etc/sysconfig/imunify360/integration.conf'
content = """[paths]
ui_path =/usr/local/CyberCP/public/imunify
[web_server]
server_type = litespeed
graceful_restart_script = /usr/local/lsws/bin/lswsctrl restart
modsec_audit_log = /usr/local/lsws/logs/auditmodsec.log
modsec_audit_logdir = /usr/local/lsws/logs/
[malware]
basedir = /home
pattern_to_watch = ^/home/.+?/(public_html|public_ftp|private_html)(/.*)?$
"""
writeToFile = open(integrationFile, 'w')
writeToFile.write(content)
writeToFile.close()
##
if not os.path.exists('i360deploy.sh'):
command = 'wget https://repo.imunify360.cloudlinux.com/defence360/i360deploy.sh'
ServerStatusUtil.executioner(command, statusFile)
command = 'bash i360deploy.sh --key %s --beta' % (key)
ServerStatusUtil.executioner(command, statusFile)
logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath,
"Imunify reinstalled..\n", 1)
logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath,
"Packages successfully installed.[200]\n", 1)
except BaseException as msg:
logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath, str(msg) + ' [404].', 1)
def main(): def main():
parser = argparse.ArgumentParser(description='CyberPanel CageFS Manager') parser = argparse.ArgumentParser(description='CyberPanel CageFS Manager')
parser.add_argument('--function', help='Function') parser.add_argument('--function', help='Function')
parser.add_argument('--key', help='Imunify Key')
args = vars(parser.parse_args()) args = vars(parser.parse_args())
if args["function"] == "submitCageFSInstall": if args["function"] == "submitCageFSInstall":
CageFS.submitCageFSInstall() CageFS.submitCageFSInstall()
elif args["function"] == "submitinstallImunify":
CageFS.submitinstallImunify(args["key"])

View File

@@ -19,9 +19,13 @@ from firewall.models import FirewallRules
from plogical.modSec import modSec from plogical.modSec import modSec
from plogical.csf import CSF from plogical.csf import CSF
from plogical.processUtilities import ProcessUtilities from plogical.processUtilities import ProcessUtilities
from serverStatus.serverStatusUtil import ServerStatusUtil
class FirewallManager: class FirewallManager:
imunifyPath = '/usr/bin/imunify360-agent'
CLPath = '/etc/sysconfig/cloudlinux'
def __init__(self, request = None): def __init__(self, request = None):
self.request = request self.request = request
@@ -1560,6 +1564,49 @@ class FirewallManager:
data = {} data = {}
data['ipAddress'] = ipAddress data['ipAddress'] = ipAddress
if os.path.exists(FirewallManager.CLPath):
data['CL'] = 1
else:
data['CL'] = 0
if os.path.exists(FirewallManager.imunifyPath):
data['imunify'] = 0
else:
data['imunify'] = 0
if data['CL'] == 0:
return render(self.request, 'firewall/notAvailable.html', data)
elif data['imunify'] == 0:
return render(self.request, 'firewall/notAvailable.html', data)
else:
return render(self.request, 'firewall/imunify.html', data) return render(self.request, 'firewall/imunify.html', data)
except BaseException as msg: except BaseException as msg:
return HttpResponse(str(msg)) return HttpResponse(str(msg))
def submitinstallImunify(self):
try:
userID = self.request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath,
'Not authorized to install container packages. [404].',
1)
return 0
data = json.loads(self.request.body)
execPath = "/usr/local/CyberCP/bin/python /usr/local/CyberCP/CLManager/CageFS.py"
execPath = execPath + " --function submitinstallImunify --key %s" % (data['key'])
ProcessUtilities.popenExecutioner(execPath)
data_ret = {'status': 1, 'error_message': 'None'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
logging.CyberCPLogFileWriter.statusWriter(ServerStatusUtil.lswsInstallStatusPath, str(msg) + ' [404].', 1)

View File

@@ -2073,3 +2073,107 @@ app.controller('csf', function ($scope, $http, $timeout, $window) {
}; };
}); });
/* Imunify */
app.controller('installImunify', function ($scope, $http, $timeout, $window) {
$scope.installDockerStatus = true;
$scope.installBoxGen = true;
$scope.dockerInstallBTN = false;
$scope.submitinstallImunify = function () {
$scope.installDockerStatus = false;
$scope.installBoxGen = true;
$scope.dockerInstallBTN = true;
url = "/firewall/submitinstallImunify";
var data = {
key: $scope.key
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberPanelLoading = true;
if (response.data.status === 1) {
$scope.installBoxGen = false;
getRequestStatus();
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberPanelLoading = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page',
type: 'error'
});
}
};
function getRequestStatus() {
$scope.installDockerStatus = false;
url = "/serverstatus/switchTOLSWSStatus";
var data = {};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
if (response.data.abort === 0) {
$scope.requestData = response.data.requestStatus;
$timeout(getRequestStatus, 1000);
} else {
// Notifications
$scope.installDockerStatus = true;
$timeout.cancel();
$scope.requestData = response.data.requestStatus;
if (response.data.installed === 1) {
$timeout(function () {
$window.location.reload();
}, 3000);
}
}
}
function cantLoadInitialDatas(response) {
$scope.installDockerStatus = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page',
type: 'error'
});
}
}
});

View File

@@ -28,7 +28,7 @@
{% else %} {% else %}
<div ng-controller="installCageFS" class="panel"> <div ng-controller="installImunify" class="panel">
<div class="panel-body"> <div class="panel-body">
<h3 class="title-hero"> <h3 class="title-hero">
{% trans "Activate Now" %} <img ng-hide="installDockerStatus" {% trans "Activate Now" %} <img ng-hide="installDockerStatus"
@@ -36,12 +36,13 @@
</h3> </h3>
<div class="example-box-wrapper"> <div class="example-box-wrapper">
<p>{% trans "CloudLinux is installed, but not activated." %}</p> <p>{% trans "Imunify is not installed, click to install now." %}</p>
<!------ LSWS Switch box -----------------> <!------ LSWS Switch box ----------------->
<div style="margin-top: 2%" ng-hide="installBoxGen" class="col-md-12"> <div style="margin-top: 2%" ng-hide="installBoxGen" class="col-md-12">
<form action="/" id="" class="form-horizontal bordered-row"> <form action="/" id="" class="form-horizontal bordered-row">
<div class="form-group"> <div class="form-group">
<div style="margin-top: 2%;" class="col-sm-12"> <div style="margin-top: 2%;" class="col-sm-12">
<textarea ng-model="requestData" rows="15" <textarea ng-model="requestData" rows="15"
@@ -54,7 +55,27 @@
<!----- LSWS Switch box -----------------> <!----- LSWS Switch box ----------------->
<br> <br>
<button ng-hide="dockerInstallBTN" class="btn btn-primary" ng-click="submitCageFSInstall()">Activate Now</button>
<form action="/" id="" class="form-horizontal bordered-row">
<div ng-hide="dockerInstallBTN" class="form-group">
<label class="col-sm-3 control-label">{% trans "Imunify Key" %}</label>
<div class="col-sm-6">
<input name="key" type="text" class="form-control" ng-model="key" required>
</div>
</div>
<div ng-hide="dockerInstallBTN" ng-hide="installationDetailsForm" class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-6">
<button type="button" class="btn btn-primary"
ng-click="submitinstallImunify()">
Install Now
</button>
</div>
</div>
</form>
</div> </div>
</div> </div>

View File

@@ -54,6 +54,7 @@ urlpatterns = [
## Imunify ## Imunify
url(r'^imunify$', views.imunify, name='imunify'), url(r'^imunify$', views.imunify, name='imunify'),
url(r'^submitinstallImunify$', views.submitinstallImunify, name='submitinstallImunify'),

View File

@@ -553,10 +553,18 @@ def modifyIPs(request):
def imunify(request): def imunify(request):
try: try:
userID = request.session['userID']
fm = FirewallManager(request) fm = FirewallManager(request)
return fm.imunify() return fm.imunify()
except KeyError: except KeyError:
return redirect(loadLoginPage) return redirect(loadLoginPage)
def submitinstallImunify(request):
try:
fm = FirewallManager(request)
return fm.submitinstallImunify()
except KeyError:
return redirect(loadLoginPage)

104
static/firewall/firewall.js Executable file → Normal file
View File

@@ -2073,3 +2073,107 @@ app.controller('csf', function ($scope, $http, $timeout, $window) {
}; };
}); });
/* Imunify */
app.controller('installImunify', function ($scope, $http, $timeout, $window) {
$scope.installDockerStatus = true;
$scope.installBoxGen = true;
$scope.dockerInstallBTN = false;
$scope.submitinstallImunify = function () {
$scope.installDockerStatus = false;
$scope.installBoxGen = true;
$scope.dockerInstallBTN = true;
url = "/firewall/submitinstallImunify";
var data = {
key: $scope.key
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberPanelLoading = true;
if (response.data.status === 1) {
$scope.installBoxGen = false;
getRequestStatus();
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberPanelLoading = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page',
type: 'error'
});
}
};
function getRequestStatus() {
$scope.installDockerStatus = false;
url = "/serverstatus/switchTOLSWSStatus";
var data = {};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
if (response.data.abort === 0) {
$scope.requestData = response.data.requestStatus;
$timeout(getRequestStatus, 1000);
} else {
// Notifications
$scope.installDockerStatus = true;
$timeout.cancel();
$scope.requestData = response.data.requestStatus;
if (response.data.installed === 1) {
$timeout(function () {
$window.location.reload();
}, 3000);
}
}
}
function cantLoadInitialDatas(response) {
$scope.installDockerStatus = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page',
type: 'error'
});
}
}
});