mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2026-02-17 20:16:48 +01:00
2854 lines
76 KiB
JavaScript
2854 lines
76 KiB
JavaScript
/**
|
||
* Created by usman on 9/5/17.
|
||
*/
|
||
|
||
|
||
/* Java script code to ADD Firewall Rules */
|
||
|
||
app.controller('firewallController', function ($scope, $http, $timeout) {
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.rulesDetails = false;
|
||
|
||
// Tab from hash so we stay on /firewall/ (avoids 404 on servers without /firewall/firewall-rules/)
|
||
function tabFromHash() {
|
||
var h = (window.location.hash || '').replace(/^#/, '');
|
||
return (h === 'banned-ips') ? 'banned' : 'rules';
|
||
}
|
||
$scope.activeTab = tabFromHash();
|
||
$scope.bannedIPs = [];
|
||
// Re-apply tab from hash after load (hash can be set after controller init in some browsers)
|
||
function applyTabFromHash() {
|
||
var tab = tabFromHash();
|
||
if ($scope.activeTab !== tab) {
|
||
$scope.activeTab = tab;
|
||
if (tab === 'banned') { populateBannedIPs(); } else { populateCurrentRecords(); }
|
||
if (!$scope.$$phase && !$scope.$root.$$phase) { $scope.$apply(); }
|
||
}
|
||
}
|
||
$timeout(applyTabFromHash, 0);
|
||
if (document.readyState === 'complete') {
|
||
$timeout(applyTabFromHash, 50);
|
||
} else {
|
||
window.addEventListener('load', function() { $timeout(applyTabFromHash, 0); });
|
||
}
|
||
$scope.setFirewallTab = function(tab) {
|
||
$timeout(function() {
|
||
$scope.activeTab = tab;
|
||
window.location.hash = (tab === 'banned') ? '#banned-ips' : '#rules';
|
||
if (tab === 'banned') { populateBannedIPs(); } else { populateCurrentRecords(); }
|
||
}, 0);
|
||
};
|
||
window.addEventListener('hashchange', function() {
|
||
var tab = tabFromHash();
|
||
if ($scope.activeTab !== tab) {
|
||
$scope.activeTab = tab;
|
||
if (tab === 'banned') { populateBannedIPs(); } else { populateCurrentRecords(); }
|
||
if (!$scope.$$phase && !$scope.$root.$$phase) { $scope.$apply(); }
|
||
}
|
||
});
|
||
$scope.rulesPage = 1;
|
||
$scope.rulesPageSize = 10;
|
||
$scope.rulesPageSizeOptions = [5, 10, 20, 30, 50, 100];
|
||
$scope.rulesTotalCount = 0;
|
||
$scope.bannedPage = 1;
|
||
$scope.bannedPageSize = 10;
|
||
$scope.bannedPageSizeOptions = [5, 10, 20, 30, 50, 100];
|
||
$scope.bannedTotalCount = 0;
|
||
$scope.bannedIPsLoading = false;
|
||
$scope.bannedIPActionFailed = true;
|
||
$scope.bannedIPActionSuccess = true;
|
||
$scope.bannedIPCouldNotConnect = true;
|
||
$scope.banIP = '';
|
||
$scope.banReason = '';
|
||
$scope.banDuration = '24h';
|
||
|
||
firewallStatus();
|
||
|
||
// Load both tabs on init
|
||
populateCurrentRecords();
|
||
populateBannedIPs();
|
||
|
||
// Whenever activeTab changes, load that tab's data (ensures second tab loads even if click/apply failed)
|
||
$scope.$watch('activeTab', function(newVal, oldVal) {
|
||
if (newVal === oldVal || !newVal) return;
|
||
$timeout(function() {
|
||
if (newVal === 'banned') { populateBannedIPs(); } else if (newVal === 'rules') { populateCurrentRecords(); }
|
||
}, 0);
|
||
});
|
||
|
||
$scope.addRule = function () {
|
||
|
||
$scope.rulesLoading = false;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
|
||
url = "/firewall/addRule";
|
||
|
||
|
||
var ruleName = $scope.ruleName;
|
||
var ruleProtocol = $scope.ruleProtocol;
|
||
var rulePort = $scope.rulePort;
|
||
|
||
|
||
var data = {
|
||
ruleName: ruleName,
|
||
ruleProtocol: ruleProtocol,
|
||
rulePort: rulePort,
|
||
ruleIP: $scope.ruleIP,
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
|
||
if (response.data.add_status == 1) {
|
||
|
||
|
||
populateCurrentRecords();
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = false;
|
||
$scope.couldNotConnect = true;
|
||
|
||
|
||
}
|
||
else {
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = false;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
|
||
$scope.errorMessage = response.data.error_message;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = false;
|
||
|
||
|
||
}
|
||
|
||
};
|
||
|
||
function populateCurrentRecords() {
|
||
|
||
$scope.rulesLoading = false;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
url = "/firewall/getCurrentRules";
|
||
var data = { page: $scope.rulesPage || 1, page_size: $scope.rulesPageSize || 10 };
|
||
var config = { headers: { 'X-CSRFToken': getCookie('csrftoken') } };
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
function ListInitialDatas(response) {
|
||
var res = (typeof response.data === 'string') ? (function() { try { return JSON.parse(response.data); } catch (e) { return {}; } })() : response.data;
|
||
if (res && res.fetchStatus === 1) {
|
||
$scope.rules = typeof res.data === 'string' ? JSON.parse(res.data) : (res.data || []);
|
||
$scope.rulesTotalCount = res.total_count != null ? res.total_count : ($scope.rules ? $scope.rules.length : 0);
|
||
$scope.rulesPage = Math.max(1, res.page != null ? res.page : 1);
|
||
$scope.rulesPageSize = res.page_size != null ? res.page_size : 10;
|
||
$scope.rulesLoading = true;
|
||
}
|
||
else {
|
||
$scope.rulesLoading = true;
|
||
$scope.errorMessage = (res && res.error_message) ? res.error_message : '';
|
||
}
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.couldNotConnect = false;
|
||
}
|
||
}
|
||
|
||
$scope.goToRulesPage = function(page) {
|
||
var totalP = $scope.rulesTotalPages();
|
||
if (page < 1 || page > totalP) return;
|
||
$scope.rulesPage = page;
|
||
populateCurrentRecords();
|
||
};
|
||
$scope.goToRulesPageByInput = function() {
|
||
var n = parseInt($scope.rulesPageInput, 10);
|
||
if (isNaN(n) || n < 1) n = 1;
|
||
var maxP = $scope.rulesTotalPages();
|
||
if (n > maxP) n = maxP;
|
||
$scope.rulesPageInput = n;
|
||
$scope.goToRulesPage(n);
|
||
};
|
||
$scope.rulesTotalPages = function() {
|
||
var size = $scope.rulesPageSize || 10;
|
||
var total = $scope.rulesTotalCount || ($scope.rules && $scope.rules.length) || 0;
|
||
return size > 0 ? Math.max(1, Math.ceil(total / size)) : 1;
|
||
};
|
||
$scope.rulesRangeStart = function() {
|
||
var total = $scope.rulesTotalCount || ($scope.rules && $scope.rules.length) || 0;
|
||
if (total === 0) return 0;
|
||
var page = Math.max(1, $scope.rulesPage || 1);
|
||
var size = $scope.rulesPageSize || 10;
|
||
return (page - 1) * size + 1;
|
||
};
|
||
$scope.rulesRangeEnd = function() {
|
||
var start = $scope.rulesRangeStart();
|
||
var size = $scope.rulesPageSize || 10;
|
||
var total = $scope.rulesTotalCount || ($scope.rules && $scope.rules.length) || 0;
|
||
return total === 0 ? 0 : Math.min(start + size - 1, total);
|
||
};
|
||
$scope.setRulesPageSize = function() {
|
||
$scope.rulesPage = 1;
|
||
populateCurrentRecords();
|
||
};
|
||
|
||
$scope.deleteRule = function (id, proto, port, ruleIP) {
|
||
|
||
$scope.rulesLoading = false;
|
||
|
||
url = "/firewall/deleteRule";
|
||
|
||
var data = {
|
||
id: id,
|
||
proto: proto,
|
||
port: port,
|
||
ruleIP: ruleIP
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
|
||
if (response.data.delete_status === 1) {
|
||
|
||
|
||
populateCurrentRecords();
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
|
||
}
|
||
else {
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = false;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.errorMessage = response.data.error_message;
|
||
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = false;
|
||
|
||
|
||
}
|
||
|
||
|
||
};
|
||
|
||
|
||
$scope.reloadFireWall = function () {
|
||
|
||
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
$scope.rulesLoading = false;
|
||
|
||
url = "/firewall/reloadFirewall";
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
|
||
if (response.data.reload_status == 1) {
|
||
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = false;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
|
||
}
|
||
else {
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = false;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
$scope.errorMessage = response.data.error_message;
|
||
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = false;
|
||
|
||
|
||
}
|
||
|
||
|
||
};
|
||
|
||
$scope.startFirewall = function () {
|
||
|
||
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
$scope.rulesLoading = false;
|
||
|
||
url = "/firewall/startFirewall";
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
|
||
if (response.data.start_status == 1) {
|
||
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = false;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
$scope.rulesDetails = false;
|
||
|
||
firewallStatus();
|
||
|
||
|
||
}
|
||
else {
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = false;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
$scope.errorMessage = response.data.error_message;
|
||
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = false;
|
||
|
||
|
||
}
|
||
|
||
|
||
};
|
||
|
||
|
||
$scope.stopFirewall = function () {
|
||
|
||
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
$scope.rulesLoading = false;
|
||
|
||
url = "/firewall/stopFirewall";
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
|
||
if (response.data.stop_status == 1) {
|
||
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = false;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
$scope.rulesDetails = true;
|
||
|
||
firewallStatus();
|
||
|
||
|
||
}
|
||
else {
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = false;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
$scope.errorMessage = response.data.error_message;
|
||
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
$scope.canNotAddRule = true;
|
||
$scope.ruleAdded = true;
|
||
$scope.couldNotConnect = false;
|
||
|
||
|
||
}
|
||
|
||
|
||
};
|
||
|
||
|
||
function firewallStatus() {
|
||
|
||
|
||
url = "/firewall/firewallStatus";
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
|
||
if (response.data.status == 1) {
|
||
|
||
if (response.data.firewallStatus == 1) {
|
||
$scope.rulesDetails = false;
|
||
$scope.status = "ON";
|
||
}
|
||
else {
|
||
$scope.rulesDetails = true;
|
||
$scope.status = "OFF";
|
||
}
|
||
}
|
||
else {
|
||
|
||
$scope.rulesDetails = true;
|
||
$scope.status = "OFF";
|
||
}
|
||
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
|
||
$scope.couldNotConnect = false;
|
||
|
||
|
||
}
|
||
|
||
};
|
||
|
||
|
||
});
|
||
|
||
/* Java script code to ADD Firewall Rules */
|
||
|
||
/* Java script code to Secure SSH */
|
||
|
||
app.controller('secureSSHCTRL', function ($scope, $http) {
|
||
|
||
$scope.couldNotSave = true;
|
||
$scope.detailsSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.secureSSHLoading = true;
|
||
$scope.keyDeleted = true;
|
||
$scope.keyBox = true;
|
||
$scope.showKeyBox = false;
|
||
$scope.saveKeyBtn = true;
|
||
$scope.sshPort = "22"; // Initialize with default SSH port as string
|
||
|
||
$scope.addKey = function () {
|
||
$scope.saveKeyBtn = false;
|
||
$scope.showKeyBox = true;
|
||
$scope.keyBox = false;
|
||
};
|
||
|
||
|
||
getSSHConfigs();
|
||
populateCurrentKeys();
|
||
|
||
// Checking root login
|
||
|
||
var rootLogin = false;
|
||
|
||
$('#rootLogin').change(function () {
|
||
rootLogin = $(this).prop('checked');
|
||
});
|
||
|
||
|
||
function getSSHConfigs() {
|
||
|
||
$scope.couldNotSave = true;
|
||
$scope.detailsSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.secureSSHLoading = false;
|
||
|
||
url = "/firewall/getSSHConfigs";
|
||
|
||
var data = {
|
||
type: "1",
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.sshPort = response.data.sshPort;
|
||
|
||
if (response.data.permitRootLogin == 1) {
|
||
$('#rootLogin').prop('checked', true);
|
||
rootLogin = true;
|
||
$scope.couldNotSave = true;
|
||
$scope.detailsSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.secureSSHLoading = true;
|
||
}
|
||
else {
|
||
$scope.errorMessage = response.data.error_message;
|
||
$scope.couldNotSave = true;
|
||
$scope.detailsSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.secureSSHLoading = true;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.couldNotConnect = false;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
$scope.saveChanges = function () {
|
||
|
||
$scope.couldNotSave = true;
|
||
$scope.detailsSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.secureSSHLoading = false;
|
||
|
||
url = "/firewall/saveSSHConfigs";
|
||
|
||
var data = {
|
||
type: "1",
|
||
sshPort: $scope.sshPort,
|
||
rootLogin: rootLogin
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
if (response.data.saveStatus == 1) {
|
||
$scope.couldNotSave = true;
|
||
$scope.detailsSaved = false;
|
||
$scope.couldNotConnect = true;
|
||
$scope.secureSSHLoading = true;
|
||
}
|
||
else {
|
||
|
||
$scope.couldNotSave = false;
|
||
$scope.detailsSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.secureSSHLoading = true;
|
||
|
||
$scope.errorMessage = response.data.error_message;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.couldNotSave = true;
|
||
$scope.detailsSaved = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.secureSSHLoading = true;
|
||
|
||
}
|
||
};
|
||
|
||
|
||
function populateCurrentKeys() {
|
||
|
||
url = "/firewall/getSSHConfigs";
|
||
|
||
var data = {
|
||
type: "2"
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
if (response.data.status === 1) {
|
||
$scope.records = JSON.parse(response.data.data);
|
||
}
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.couldNotConnect = false;
|
||
}
|
||
|
||
|
||
}
|
||
|
||
$scope.deleteKey = function (key) {
|
||
|
||
$scope.secureSSHLoading = false;
|
||
|
||
url = "/firewall/deleteSSHKey";
|
||
|
||
var data = {
|
||
key: key,
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
if (response.data.delete_status === 1) {
|
||
$scope.secureSSHLoading = true;
|
||
$scope.keyDeleted = false;
|
||
populateCurrentKeys();
|
||
}
|
||
else {
|
||
$scope.couldNotConnect = false;
|
||
$scope.secureSSHLoading = true;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.couldNotConnect = false;
|
||
$scope.secureSSHLoading = true;
|
||
|
||
}
|
||
|
||
|
||
}
|
||
|
||
$scope.saveKey = function (key) {
|
||
|
||
$scope.secureSSHLoading = false;
|
||
|
||
url = "/firewall/addSSHKey";
|
||
|
||
var data = {
|
||
key: $scope.keyData,
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
if (response.data.add_status === 1) {
|
||
$scope.secureSSHLoading = true;
|
||
$scope.saveKeyBtn = true;
|
||
$scope.showKeyBox = false;
|
||
$scope.keyBox = true;
|
||
|
||
|
||
populateCurrentKeys();
|
||
}
|
||
else {
|
||
$scope.secureSSHLoading = true;
|
||
$scope.saveKeyBtn = false;
|
||
$scope.showKeyBox = true;
|
||
$scope.keyBox = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.secureSSHLoading = true;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.secureSSHLoading = true;
|
||
$scope.saveKeyBtn = false;
|
||
$scope.showKeyBox = true;
|
||
$scope.keyBox = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.secureSSHLoading = true;
|
||
|
||
}
|
||
|
||
|
||
}
|
||
|
||
});
|
||
|
||
/* Java script code to Secure SSH */
|
||
|
||
/* Java script code for ModSec */
|
||
|
||
app.controller('modSec', function ($scope, $http, $timeout, $window) {
|
||
|
||
$scope.modSecNotifyBox = true;
|
||
$scope.modeSecInstallBox = true;
|
||
$scope.modsecLoading = true;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
|
||
|
||
$scope.installModSec = function () {
|
||
|
||
$scope.modSecNotifyBox = true;
|
||
$scope.modeSecInstallBox = true;
|
||
$scope.modsecLoading = false;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
|
||
url = "/firewall/installModSec";
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
|
||
if (response.data.installModSec === 1) {
|
||
|
||
$scope.modSecNotifyBox = true;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = false;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
|
||
getRequestStatus();
|
||
|
||
}
|
||
else {
|
||
$scope.errorMessage = response.data.error_message;
|
||
|
||
$scope.modSecNotifyBox = false;
|
||
$scope.modeSecInstallBox = true;
|
||
$scope.modsecLoading = true;
|
||
$scope.failedToStartInallation = false;
|
||
$scope.couldNotConnect = true;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
|
||
$scope.modSecNotifyBox = false;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = true;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
}
|
||
|
||
};
|
||
|
||
function getRequestStatus() {
|
||
|
||
$scope.modSecNotifyBox = true;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = false;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
|
||
url = "/firewall/installStatusModSec";
|
||
|
||
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.modSecNotifyBox = true;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = false;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
|
||
$scope.requestData = response.data.requestStatus;
|
||
$timeout(getRequestStatus, 1000);
|
||
}
|
||
else {
|
||
// Notifications
|
||
$timeout.cancel();
|
||
$scope.modSecNotifyBox = false;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = true;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
$scope.requestData = response.data.requestStatus;
|
||
|
||
if (response.data.installed === 0) {
|
||
$scope.installationFailed = false;
|
||
$scope.errorMessage = response.data.error_message;
|
||
} else {
|
||
$scope.modSecSuccessfullyInstalled = false;
|
||
$timeout(function () {
|
||
$window.location.reload();
|
||
}, 3000);
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
|
||
$scope.modSecNotifyBox = false;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = true;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
|
||
|
||
}
|
||
|
||
}
|
||
|
||
///// ModSec configs
|
||
|
||
$scope.modsecurity_status = false;
|
||
$scope.SecAuditEngine = false;
|
||
$scope.SecRuleEngine = false;
|
||
|
||
// Initialize change handlers after DOM is ready
|
||
$timeout(function() {
|
||
$('#modsecurity_status').change(function () {
|
||
$scope.modsecurity_status = $(this).prop('checked');
|
||
$scope.$apply();
|
||
});
|
||
|
||
$('#SecAuditEngine').change(function () {
|
||
$scope.SecAuditEngine = $(this).prop('checked');
|
||
$scope.$apply();
|
||
});
|
||
|
||
$('#SecRuleEngine').change(function () {
|
||
$scope.SecRuleEngine = $(this).prop('checked');
|
||
$scope.$apply();
|
||
});
|
||
}, 100);
|
||
|
||
fetchModSecSettings();
|
||
function fetchModSecSettings() {
|
||
|
||
$scope.modsecLoading = false;
|
||
|
||
$('#modsecurity_status').prop('checked', false);
|
||
$('#SecAuditEngine').prop('checked', false);
|
||
$('#SecRuleEngine').prop('checked', false);
|
||
|
||
url = "/firewall/fetchModSecSettings";
|
||
|
||
var phpSelection = $scope.phpSelection;
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.modsecLoading = true;
|
||
|
||
if (response.data.fetchStatus === 1) {
|
||
|
||
if (response.data.installed === 1) {
|
||
|
||
if (response.data.modsecurity === 1) {
|
||
$('#modsecurity_status').prop('checked', true);
|
||
$scope.modsecurity_status = true;
|
||
}
|
||
if (response.data.SecAuditEngine === 1) {
|
||
$('#SecAuditEngine').prop('checked', true);
|
||
$scope.SecAuditEngine = true;
|
||
}
|
||
if (response.data.SecRuleEngine === 1) {
|
||
$('#SecRuleEngine').prop('checked', true);
|
||
$scope.SecRuleEngine = true;
|
||
}
|
||
|
||
$scope.SecDebugLogLevel = response.data.SecDebugLogLevel;
|
||
$scope.SecAuditLogParts = response.data.SecAuditLogParts;
|
||
$scope.SecAuditLogRelevantStatus = response.data.SecAuditLogRelevantStatus;
|
||
$scope.SecAuditLogType = response.data.SecAuditLogType;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.modsecLoading = true;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/////
|
||
|
||
/// Save ModSec Changes
|
||
|
||
$scope.failedToSave = true;
|
||
$scope.successfullySaved = true;
|
||
|
||
$scope.saveModSecConfigurations = function () {
|
||
|
||
$scope.failedToSave = true;
|
||
$scope.successfullySaved = true;
|
||
$scope.modsecLoading = false;
|
||
$scope.couldNotConnect = true;
|
||
|
||
|
||
url = "/firewall/saveModSecConfigurations";
|
||
|
||
var data = {
|
||
modsecurity_status: $scope.modsecurity_status,
|
||
SecAuditEngine: $scope.SecAuditEngine,
|
||
SecRuleEngine: $scope.SecRuleEngine,
|
||
SecDebugLogLevel: $scope.SecDebugLogLevel,
|
||
SecAuditLogParts: $scope.SecAuditLogParts,
|
||
SecAuditLogRelevantStatus: $scope.SecAuditLogRelevantStatus,
|
||
SecAuditLogType: $scope.SecAuditLogType,
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
|
||
if (response.data.saveStatus === 1) {
|
||
|
||
$scope.failedToSave = true;
|
||
$scope.successfullySaved = false;
|
||
$scope.modsecLoading = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
}
|
||
else {
|
||
$scope.errorMessage = response.data.error_message;
|
||
|
||
$scope.failedToSave = false;
|
||
$scope.successfullySaved = true;
|
||
$scope.modsecLoading = true;
|
||
$scope.couldNotConnect = true;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.failedToSave = true;
|
||
$scope.successfullySaved = false;
|
||
$scope.modsecLoading = true;
|
||
$scope.couldNotConnect = true;
|
||
}
|
||
|
||
|
||
};
|
||
|
||
});
|
||
|
||
|
||
app.controller('modSecRules', function ($scope, $http) {
|
||
|
||
$scope.modsecLoading = true;
|
||
$scope.rulesSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.couldNotSave = true;
|
||
|
||
|
||
fetchModSecRules();
|
||
function fetchModSecRules() {
|
||
|
||
$scope.modsecLoading = false;
|
||
$scope.modsecLoading = true;
|
||
$scope.rulesSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
|
||
url = "/firewall/fetchModSecRules";
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.modsecLoading = true;
|
||
|
||
if (response.data.modSecInstalled === 1) {
|
||
|
||
$scope.currentModSecRules = response.data.currentModSecRules;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.modsecLoading = true;
|
||
}
|
||
|
||
}
|
||
|
||
$scope.saveModSecRules = function () {
|
||
|
||
$scope.modsecLoading = false;
|
||
$scope.rulesSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.couldNotSave = true;
|
||
|
||
|
||
url = "/firewall/saveModSecRules";
|
||
|
||
var data = {
|
||
modSecRules: $scope.currentModSecRules
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.modsecLoading = true;
|
||
|
||
if (response.data.saveStatus === 1) {
|
||
|
||
$scope.rulesSaved = false;
|
||
$scope.couldNotConnect = true;
|
||
$scope.couldNotSave = true;
|
||
|
||
} else {
|
||
$scope.rulesSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.couldNotSave = false;
|
||
|
||
$scope.errorMessage = response.data.error_message;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.modsecLoading = true;
|
||
$scope.rulesSaved = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.couldNotSave = true;
|
||
}
|
||
}
|
||
|
||
});
|
||
|
||
|
||
/* Java script code for ModSec */
|
||
|
||
app.controller('modSecRulesPack', function ($scope, $http, $timeout, $window) {
|
||
|
||
$scope.modsecLoading = true;
|
||
$scope.owaspDisable = true;
|
||
$scope.comodoDisable = true;
|
||
|
||
|
||
//
|
||
|
||
$scope.installationQuote = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.installationFailed = true;
|
||
$scope.installationSuccess = true;
|
||
$scope.ruleFiles = true;
|
||
|
||
/////
|
||
|
||
var owaspInstalled = false;
|
||
var comodoInstalled = false;
|
||
var counterOWASP = 0;
|
||
var counterComodo = 0;
|
||
|
||
|
||
$('#owaspInstalled').change(function () {
|
||
|
||
owaspInstalled = $(this).prop('checked');
|
||
$scope.ruleFiles = true;
|
||
|
||
if (counterOWASP !== 0) {
|
||
if (owaspInstalled === true) {
|
||
installModSecRulesPack('installOWASP');
|
||
} else {
|
||
installModSecRulesPack('disableOWASP')
|
||
}
|
||
}
|
||
|
||
counterOWASP = counterOWASP + 1;
|
||
});
|
||
|
||
$('#comodoInstalled').change(function () {
|
||
|
||
$scope.ruleFiles = true;
|
||
comodoInstalled = $(this).prop('checked');
|
||
|
||
if (counterComodo !== 0) {
|
||
|
||
if (comodoInstalled === true) {
|
||
installModSecRulesPack('installComodo');
|
||
} else {
|
||
installModSecRulesPack('disableComodo')
|
||
}
|
||
}
|
||
|
||
counterComodo = counterComodo + 1;
|
||
|
||
});
|
||
|
||
|
||
getOWASPAndComodoStatus(true);
|
||
function getOWASPAndComodoStatus(updateToggle) {
|
||
|
||
$scope.modsecLoading = false;
|
||
|
||
|
||
url = "/firewall/getOWASPAndComodoStatus";
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.modsecLoading = true;
|
||
|
||
if (response.data.modSecInstalled === 1) {
|
||
|
||
if (updateToggle === true) {
|
||
|
||
if (response.data.owaspInstalled === 1) {
|
||
$('#owaspInstalled').prop('checked', true);
|
||
$scope.owaspDisable = false;
|
||
owaspInstalled = true;
|
||
} else {
|
||
$('#owaspInstalled').prop('checked', false);
|
||
$scope.owaspDisable = true;
|
||
owaspInstalled = false;
|
||
}
|
||
if (response.data.comodoInstalled === 1) {
|
||
$('#comodoInstalled').prop('checked', true);
|
||
$scope.comodoDisable = false;
|
||
comodoInstalled = true;
|
||
} else {
|
||
$('#comodoInstalled').prop('checked', false);
|
||
$scope.comodoDisable = true;
|
||
comodoInstalled = false;
|
||
}
|
||
} else {
|
||
|
||
if (response.data.owaspInstalled === 1) {
|
||
$scope.owaspDisable = false;
|
||
owaspInstalled = true;
|
||
} else {
|
||
$scope.owaspDisable = true;
|
||
owaspInstalled = false;
|
||
}
|
||
if (response.data.comodoInstalled === 1) {
|
||
$scope.comodoDisable = false;
|
||
comodoInstalled = true;
|
||
} else {
|
||
$scope.comodoDisable = true;
|
||
comodoInstalled = false;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.modsecLoading = true;
|
||
}
|
||
|
||
}
|
||
|
||
/////
|
||
|
||
function installModSecRulesPack(packName) {
|
||
|
||
$scope.modsecLoading = false;
|
||
|
||
url = "/firewall/installModSecRulesPack";
|
||
|
||
var data = {
|
||
packName: packName
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.modsecLoading = true;
|
||
|
||
if (response.data.installStatus === 1) {
|
||
|
||
$scope.modsecLoading = true;
|
||
|
||
//
|
||
|
||
$scope.installationQuote = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.installationFailed = true;
|
||
$scope.installationSuccess = false;
|
||
|
||
getOWASPAndComodoStatus(false);
|
||
|
||
} else {
|
||
$scope.modsecLoading = true;
|
||
|
||
//
|
||
|
||
$scope.installationQuote = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.installationFailed = false;
|
||
$scope.installationSuccess = true;
|
||
|
||
$scope.errorMessage = response.data.error_message;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.modsecLoading = true;
|
||
|
||
//
|
||
|
||
$scope.installationQuote = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.installationFailed = true;
|
||
$scope.installationSuccess = true;
|
||
}
|
||
|
||
|
||
}
|
||
|
||
/////
|
||
|
||
$scope.fetchRulesFile = function (packName) {
|
||
|
||
$scope.modsecLoading = false;
|
||
$scope.ruleFiles = false;
|
||
$scope.installationQuote = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.installationFailed = true;
|
||
$scope.installationSuccess = true;
|
||
|
||
url = "/firewall/getRulesFiles";
|
||
|
||
var data = {
|
||
packName: packName
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.modsecLoading = true;
|
||
|
||
if (response.data.fetchStatus === 1) {
|
||
$scope.records = JSON.parse(response.data.data);
|
||
$scope.installationQuote = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.installationFailed = true;
|
||
$scope.installationSuccess = false;
|
||
|
||
}
|
||
else {
|
||
$scope.installationQuote = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.installationFailed = false;
|
||
$scope.installationSuccess = true;
|
||
$scope.errorMessage = response.data.error_message;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.modsecLoading = true;
|
||
$scope.installationQuote = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.installationFailed = true;
|
||
$scope.installationSuccess = true;
|
||
}
|
||
|
||
};
|
||
|
||
|
||
$scope.removeRuleFile = function (fileName, packName, status) {
|
||
|
||
$scope.modsecLoading = false;
|
||
|
||
|
||
url = "/firewall/enableDisableRuleFile";
|
||
|
||
var data = {
|
||
packName: packName,
|
||
fileName: fileName,
|
||
status: status
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.modsecLoading = true;
|
||
|
||
if (response.data.saveStatus === 1) {
|
||
|
||
$scope.modsecLoading = true;
|
||
|
||
//
|
||
|
||
$scope.installationQuote = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.installationFailed = true;
|
||
$scope.installationSuccess = false;
|
||
|
||
$scope.fetchRulesFile(packName);
|
||
|
||
} else {
|
||
$scope.modsecLoading = true;
|
||
|
||
//
|
||
|
||
$scope.installationQuote = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.installationFailed = false;
|
||
$scope.installationSuccess = true;
|
||
|
||
$scope.errorMessage = response.data.error_message;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.modsecLoading = true;
|
||
|
||
//
|
||
|
||
$scope.installationQuote = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.installationFailed = true;
|
||
$scope.installationSuccess = true;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
});
|
||
|
||
|
||
/* Java script code for ModSec */
|
||
|
||
|
||
/* Java script code for CSF */
|
||
|
||
app.controller('csf', function ($scope, $http, $timeout, $window) {
|
||
|
||
$scope.csfLoading = true;
|
||
$scope.modeSecInstallBox = true;
|
||
$scope.modsecLoading = true;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
|
||
|
||
$scope.installCSF = function () {
|
||
|
||
$scope.modSecNotifyBox = true;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = false;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
|
||
url = "/firewall/installCSF";
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
|
||
if (response.data.installStatus === 1) {
|
||
|
||
$scope.modSecNotifyBox = true;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = false;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
|
||
getRequestStatus();
|
||
|
||
}
|
||
else {
|
||
$scope.errorMessage = response.data.error_message;
|
||
|
||
$scope.modSecNotifyBox = false;
|
||
$scope.modeSecInstallBox = true;
|
||
$scope.modsecLoading = true;
|
||
$scope.failedToStartInallation = false;
|
||
$scope.couldNotConnect = true;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
|
||
$scope.modSecNotifyBox = false;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = true;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
}
|
||
|
||
};
|
||
function getRequestStatus() {
|
||
|
||
$scope.modSecNotifyBox = true;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = false;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
|
||
url = "/firewall/installStatusCSF";
|
||
|
||
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.modSecNotifyBox = true;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = false;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
|
||
$scope.requestData = response.data.requestStatus;
|
||
$timeout(getRequestStatus, 1000);
|
||
}
|
||
else {
|
||
// Notifications
|
||
$timeout.cancel();
|
||
$scope.modSecNotifyBox = false;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = true;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
$scope.requestData = response.data.requestStatus;
|
||
|
||
if (response.data.installed === 0) {
|
||
$scope.installationFailed = false;
|
||
$scope.errorMessage = response.data.error_message;
|
||
} else {
|
||
$scope.modSecSuccessfullyInstalled = false;
|
||
$timeout(function () {
|
||
$window.location.reload();
|
||
}, 3000);
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
|
||
$scope.modSecNotifyBox = false;
|
||
$scope.modeSecInstallBox = false;
|
||
$scope.modsecLoading = true;
|
||
$scope.failedToStartInallation = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.modSecSuccessfullyInstalled = true;
|
||
$scope.installationFailed = true;
|
||
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
// After installation
|
||
|
||
var currentMain = "generalLI";
|
||
var currentChild = "general";
|
||
|
||
$scope.activateTab = function (newMain, newChild) {
|
||
// Remove active class from all tabs
|
||
$('.tab-button').removeClass('active');
|
||
|
||
// Add active class to clicked tab
|
||
$('#' + newMain).addClass('active');
|
||
|
||
// Hide all tab contents
|
||
$('.tab-content').removeClass('active');
|
||
|
||
// Show selected tab content
|
||
$('#' + newChild).addClass('active');
|
||
|
||
currentMain = newMain;
|
||
currentChild = newChild;
|
||
};
|
||
|
||
|
||
$scope.removeCSF = function () {
|
||
|
||
$scope.csfLoading = false;
|
||
|
||
|
||
url = "/firewall/removeCSF";
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.csfLoading = true;
|
||
|
||
|
||
if (response.data.installStatus === 1) {
|
||
|
||
new PNotify({
|
||
title: 'Successfully removed!',
|
||
text: 'CSF successfully removed from server, refreshing page in 3 seconds..',
|
||
type: 'success'
|
||
});
|
||
|
||
$timeout(function () {
|
||
$window.location.reload();
|
||
}, 3000);
|
||
|
||
}
|
||
else {
|
||
new PNotify({
|
||
title: 'Operation failed!',
|
||
text: response.data.error_message,
|
||
type: 'error'
|
||
});
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
|
||
new PNotify({
|
||
title: 'Operation failed!',
|
||
text: 'Could not connect to server, please refresh this page.',
|
||
type: 'error'
|
||
});
|
||
|
||
|
||
}
|
||
|
||
};
|
||
|
||
//////// Fetch settings
|
||
|
||
//
|
||
var testingMode = false;
|
||
var testingCounter = 0;
|
||
|
||
|
||
$('#testingMode').change(function () {
|
||
testingMode = $(this).prop('checked');
|
||
|
||
if (testingCounter !== 0) {
|
||
|
||
if (testingMode === true) {
|
||
$scope.changeStatus('testingMode', 'enable');
|
||
} else {
|
||
$scope.changeStatus('testingMode', 'disable');
|
||
}
|
||
}
|
||
testingCounter = testingCounter + 1;
|
||
});
|
||
//
|
||
|
||
//
|
||
var firewallStatus = false;
|
||
var firewallCounter = 0;
|
||
|
||
|
||
$('#firewallStatus').change(function () {
|
||
firewallStatus = $(this).prop('checked');
|
||
|
||
if (firewallCounter !== 0) {
|
||
|
||
if (firewallStatus === true) {
|
||
$scope.changeStatus('csf', 'enable');
|
||
} else {
|
||
$scope.changeStatus('csf', 'disable');
|
||
}
|
||
}
|
||
firewallCounter = firewallCounter + 1;
|
||
});
|
||
//
|
||
|
||
|
||
$scope.fetchSettings = function () {
|
||
|
||
$scope.csfLoading = false;
|
||
|
||
$('#testingMode').prop('checked', false);
|
||
$('#firewallStatus').prop('checked', false);
|
||
|
||
url = "/firewall/fetchCSFSettings";
|
||
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.csfLoading = true;
|
||
|
||
if (response.data.fetchStatus === 1) {
|
||
|
||
new PNotify({
|
||
title: 'Successfully fetched!',
|
||
text: 'CSF settings successfully fetched.',
|
||
type: 'success'
|
||
});
|
||
|
||
if (response.data.testingMode === 1) {
|
||
$('#testingMode').prop('checked', true);
|
||
}
|
||
if (response.data.firewallStatus === 1) {
|
||
$('#firewallStatus').prop('checked', true);
|
||
}
|
||
|
||
$scope.tcpIN = response.data.tcpIN;
|
||
$scope.tcpOUT = response.data.tcpOUT;
|
||
$scope.udpIN = response.data.udpIN;
|
||
$scope.udpOUT = response.data.udpOUT;
|
||
} else {
|
||
|
||
new PNotify({
|
||
title: 'Failed to load!',
|
||
text: response.data.error_message,
|
||
type: 'error'
|
||
});
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.csfLoading = true;
|
||
|
||
new PNotify({
|
||
title: 'Failed to load!',
|
||
text: 'Failed to fetch CSF settings.',
|
||
type: 'error'
|
||
});
|
||
}
|
||
|
||
};
|
||
$scope.fetchSettings();
|
||
|
||
|
||
$scope.changeStatus = function (controller, status) {
|
||
|
||
$scope.csfLoading = false;
|
||
|
||
|
||
url = "/firewall/changeStatus";
|
||
|
||
|
||
var data = {
|
||
controller: controller,
|
||
status: status
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.csfLoading = true;
|
||
|
||
if (response.data.status === 1) {
|
||
|
||
new PNotify({
|
||
title: 'Success!',
|
||
text: 'Changes successfully applied.',
|
||
type: 'success'
|
||
});
|
||
} else {
|
||
|
||
new PNotify({
|
||
title: 'Error!',
|
||
text: response.data.error_message,
|
||
type: 'error'
|
||
});
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.csfLoading = true;
|
||
|
||
new PNotify({
|
||
title: 'Failed to load!',
|
||
text: 'Failed to fetch CSF settings.',
|
||
type: 'error'
|
||
});
|
||
}
|
||
|
||
};
|
||
|
||
$scope.modifyPorts = function (protocol) {
|
||
|
||
$scope.csfLoading = false;
|
||
|
||
var ports;
|
||
|
||
if (protocol === 'TCP_IN') {
|
||
ports = $scope.tcpIN;
|
||
} else if (protocol === 'TCP_OUT') {
|
||
ports = $scope.tcpOUT;
|
||
} else if (protocol === 'UDP_IN') {
|
||
ports = $scope.udpIN;
|
||
} else if (protocol === 'UDP_OUT') {
|
||
ports = $scope.udpOUT;
|
||
}
|
||
|
||
|
||
url = "/firewall/modifyPorts";
|
||
|
||
|
||
var data = {
|
||
protocol: protocol,
|
||
ports: ports
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.csfLoading = true;
|
||
|
||
if (response.data.status === 1) {
|
||
|
||
new PNotify({
|
||
title: 'Success!',
|
||
text: 'Changes successfully applied.',
|
||
type: 'success'
|
||
});
|
||
} else {
|
||
|
||
new PNotify({
|
||
title: 'Error!',
|
||
text: response.data.error_message,
|
||
type: 'error'
|
||
});
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.csfLoading = true;
|
||
|
||
new PNotify({
|
||
title: 'Failed to load!',
|
||
text: 'Failed to fetch CSF settings.',
|
||
type: 'error'
|
||
});
|
||
}
|
||
|
||
};
|
||
|
||
$scope.modifyIPs = function (mode) {
|
||
|
||
$scope.csfLoading = false;
|
||
|
||
var ipAddress;
|
||
|
||
if (mode === 'allowIP') {
|
||
ipAddress = $scope.allowIP;
|
||
} else if (mode === 'blockIP') {
|
||
ipAddress = $scope.blockIP;
|
||
}
|
||
|
||
|
||
url = "/firewall/modifyIPs";
|
||
|
||
|
||
var data = {
|
||
mode: mode,
|
||
ipAddress: ipAddress
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.csfLoading = true;
|
||
|
||
if (response.data.status === 1) {
|
||
|
||
new PNotify({
|
||
title: 'Success!',
|
||
text: 'Changes successfully applied.',
|
||
type: 'success'
|
||
});
|
||
} else {
|
||
|
||
new PNotify({
|
||
title: 'Error!',
|
||
text: response.data.error_message,
|
||
type: 'error'
|
||
});
|
||
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.csfLoading = true;
|
||
|
||
new PNotify({
|
||
title: 'Failed to load!',
|
||
text: 'Failed to fetch CSF settings.',
|
||
type: 'error'
|
||
});
|
||
}
|
||
|
||
};
|
||
|
||
});
|
||
|
||
|
||
/* 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'
|
||
});
|
||
}
|
||
|
||
}
|
||
});
|
||
|
||
/* ImunifyAV */
|
||
|
||
app.controller('installImunifyAV', 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/submitinstallImunifyAV";
|
||
|
||
var data = {};
|
||
|
||
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'
|
||
});
|
||
}
|
||
|
||
}
|
||
});
|
||
|
||
|
||
app.controller('litespeed_ent_conf', function ($scope, $http, $timeout, $window){
|
||
$scope.modsecLoading = true;
|
||
$scope.rulesSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.couldNotSave = true;
|
||
fetchlitespeed_conf();
|
||
function fetchlitespeed_conf() {
|
||
|
||
$scope.modsecLoading = false;
|
||
$scope.modsecLoading = true;
|
||
$scope.rulesSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
|
||
|
||
url = "/firewall/fetchlitespeed_conf";
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.modsecLoading = true;
|
||
|
||
if (response.data.status === 1) {
|
||
|
||
$scope.currentLitespeed_conf = response.data.currentLitespeed_conf;
|
||
|
||
}
|
||
else
|
||
{
|
||
$scope.errorMessage = response.data.error_message;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.modsecLoading = true;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
$scope.saveLitespeed_conf = function () {
|
||
// alert('test-----------------')
|
||
|
||
$scope.modsecLoading = false;
|
||
$scope.rulesSaved = true;
|
||
$scope.couldNotConnect = true;
|
||
$scope.couldNotSave = true;
|
||
|
||
|
||
url = "/firewall/saveLitespeed_conf";
|
||
|
||
var data = {
|
||
modSecRules: $scope.currentLitespeed_conf
|
||
|
||
};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||
|
||
|
||
function ListInitialDatas(response) {
|
||
|
||
$scope.modsecLoading = true;
|
||
|
||
if (response.data.status === 1) {
|
||
|
||
$scope.rulesSaved = false;
|
||
$scope.couldNotConnect = true;
|
||
$scope.couldNotSave = true;
|
||
|
||
$scope.currentLitespeed_conf = response.data.currentLitespeed_conf;
|
||
|
||
} else {
|
||
$scope.rulesSaved = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.couldNotSave = false;
|
||
|
||
$scope.errorMessage = response.data.error_message;
|
||
}
|
||
|
||
}
|
||
|
||
function cantLoadInitialDatas(response) {
|
||
$scope.modsecLoading = true;
|
||
$scope.rulesSaved = true;
|
||
$scope.couldNotConnect = false;
|
||
$scope.couldNotSave = true;
|
||
}
|
||
}
|
||
|
||
// Banned IPs Functions
|
||
function populateBannedIPs() {
|
||
$scope.bannedIPsLoading = true;
|
||
var url = "/firewall/getBannedIPs";
|
||
var postData = { page: $scope.bannedPage || 1, page_size: $scope.bannedPageSize || 10 };
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
$http.post(url, postData, config).then(function(response) {
|
||
$scope.bannedIPsLoading = false;
|
||
var res = (typeof response.data === 'string') ? (function() { try { return JSON.parse(response.data); } catch (e) { return {}; } })() : response.data;
|
||
if (res && res.status === 1) {
|
||
$scope.bannedIPs = res.bannedIPs || [];
|
||
$scope.bannedTotalCount = res.total_count != null ? res.total_count : ($scope.bannedIPs ? $scope.bannedIPs.length : 0);
|
||
$scope.bannedPage = Math.max(1, res.page != null ? res.page : 1);
|
||
$scope.bannedPageSize = res.page_size != null ? res.page_size : 10;
|
||
} else {
|
||
$scope.bannedIPs = [];
|
||
$scope.bannedIPActionFailed = false;
|
||
$scope.bannedIPErrorMessage = (res && res.error_message) ? res.error_message : '';
|
||
}
|
||
}, function(error) {
|
||
$scope.bannedIPsLoading = false;
|
||
$scope.bannedIPCouldNotConnect = false;
|
||
});
|
||
}
|
||
|
||
$scope.goToBannedPage = function(page) {
|
||
var totalP = $scope.bannedTotalPages();
|
||
if (page < 1 || page > totalP) return;
|
||
$scope.bannedPage = page;
|
||
populateBannedIPs();
|
||
};
|
||
$scope.goToBannedPageByInput = function() {
|
||
var n = parseInt($scope.bannedPageInput, 10);
|
||
if (isNaN(n) || n < 1) n = 1;
|
||
var maxP = $scope.bannedTotalPages();
|
||
if (n > maxP) n = maxP;
|
||
$scope.bannedPageInput = n;
|
||
$scope.goToBannedPage(n);
|
||
};
|
||
$scope.bannedTotalPages = function() {
|
||
var size = $scope.bannedPageSize || 10;
|
||
var total = $scope.bannedTotalCount || ($scope.bannedIPs ? $scope.bannedIPs.length : 0) || 0;
|
||
return size > 0 ? Math.max(1, Math.ceil(total / size)) : 1;
|
||
};
|
||
$scope.bannedRangeStart = function() {
|
||
var total = $scope.bannedTotalCount || ($scope.bannedIPs ? $scope.bannedIPs.length : 0) || 0;
|
||
if (total === 0) return 0;
|
||
var page = Math.max(1, $scope.bannedPage || 1);
|
||
var size = $scope.bannedPageSize || 10;
|
||
return (page - 1) * size + 1;
|
||
};
|
||
$scope.bannedRangeEnd = function() {
|
||
var start = $scope.bannedRangeStart();
|
||
var size = $scope.bannedPageSize || 10;
|
||
var total = $scope.bannedTotalCount || ($scope.bannedIPs ? $scope.bannedIPs.length : 0) || 0;
|
||
return total === 0 ? 0 : Math.min(start + size - 1, total);
|
||
};
|
||
$scope.setBannedPageSize = function() {
|
||
$scope.bannedPage = 1;
|
||
populateBannedIPs();
|
||
};
|
||
$scope.populateBannedIPs = populateBannedIPs;
|
||
|
||
if (typeof window !== 'undefined') {
|
||
window.__firewallLoadTab = function(tab) {
|
||
$scope.$evalAsync(function() {
|
||
$scope.activeTab = tab;
|
||
if (tab === 'banned') { populateBannedIPs(); } else { populateCurrentRecords(); }
|
||
});
|
||
};
|
||
}
|
||
|
||
$scope.addBannedIP = function() {
|
||
if (!$scope.banIP || !$scope.banReason) {
|
||
$scope.bannedIPActionFailed = false;
|
||
$scope.bannedIPErrorMessage = "Please fill in all required fields";
|
||
return;
|
||
}
|
||
|
||
$scope.bannedIPsLoading = true;
|
||
$scope.bannedIPActionFailed = true;
|
||
$scope.bannedIPActionSuccess = true;
|
||
$scope.bannedIPCouldNotConnect = true;
|
||
|
||
var data = {
|
||
ip: $scope.banIP,
|
||
reason: $scope.banReason,
|
||
duration: $scope.banDuration
|
||
};
|
||
|
||
var url = "/firewall/addBannedIP";
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
$http.post(url, data, config).then(function(response) {
|
||
$scope.bannedIPsLoading = false;
|
||
if (response.data.status === 1) {
|
||
$scope.bannedIPActionSuccess = false;
|
||
$scope.banIP = '';
|
||
$scope.banReason = '';
|
||
$scope.banDuration = '24h';
|
||
populateBannedIPs(); // Refresh the list
|
||
} else {
|
||
$scope.bannedIPActionFailed = false;
|
||
$scope.bannedIPErrorMessage = response.data.error_message;
|
||
}
|
||
}, function(error) {
|
||
$scope.bannedIPsLoading = false;
|
||
$scope.bannedIPCouldNotConnect = false;
|
||
});
|
||
};
|
||
|
||
$scope.removeBannedIP = function(id, ip) {
|
||
if (!confirm('Are you sure you want to unban IP address ' + ip + '?')) {
|
||
return;
|
||
}
|
||
|
||
$scope.bannedIPsLoading = true;
|
||
$scope.bannedIPActionFailed = true;
|
||
$scope.bannedIPActionSuccess = true;
|
||
$scope.bannedIPCouldNotConnect = true;
|
||
|
||
var data = { id: id };
|
||
|
||
var url = "/firewall/removeBannedIP";
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
$http.post(url, data, config).then(function(response) {
|
||
$scope.bannedIPsLoading = false;
|
||
if (response.data.status === 1) {
|
||
$scope.bannedIPActionSuccess = false;
|
||
populateBannedIPs(); // Refresh the list
|
||
} else {
|
||
$scope.bannedIPActionFailed = false;
|
||
$scope.bannedIPErrorMessage = response.data.error_message;
|
||
}
|
||
}, function(error) {
|
||
$scope.bannedIPsLoading = false;
|
||
$scope.bannedIPCouldNotConnect = false;
|
||
});
|
||
};
|
||
|
||
$scope.deleteBannedIP = function(id, ip) {
|
||
if (!confirm('Are you sure you want to permanently delete the record for IP address ' + ip + '? This action cannot be undone.')) {
|
||
return;
|
||
}
|
||
|
||
$scope.bannedIPsLoading = true;
|
||
$scope.bannedIPActionFailed = true;
|
||
$scope.bannedIPActionSuccess = true;
|
||
$scope.bannedIPCouldNotConnect = true;
|
||
|
||
var data = { id: id };
|
||
|
||
var url = "/firewall/deleteBannedIP";
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
$http.post(url, data, config).then(function(response) {
|
||
$scope.bannedIPsLoading = false;
|
||
if (response.data.status === 1) {
|
||
$scope.bannedIPActionSuccess = false;
|
||
populateBannedIPs(); // Refresh the list
|
||
} else {
|
||
$scope.bannedIPActionFailed = false;
|
||
$scope.bannedIPErrorMessage = response.data.error_message;
|
||
}
|
||
}, function(error) {
|
||
$scope.bannedIPsLoading = false;
|
||
$scope.bannedIPCouldNotConnect = false;
|
||
});
|
||
};
|
||
|
||
// Export/Import Firewall Rules Functions
|
||
$scope.exportRules = function () {
|
||
$scope.rulesLoading = false;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
url = "/firewall/exportFirewallRules";
|
||
|
||
var data = {};
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken')
|
||
}
|
||
};
|
||
|
||
$http.post(url, data, config).then(exportSuccess, exportError);
|
||
|
||
function exportSuccess(response) {
|
||
$scope.rulesLoading = true;
|
||
|
||
// Check if response is JSON (error) or file download
|
||
if (typeof response.data === 'string' && response.data.includes('{')) {
|
||
try {
|
||
var errorData = JSON.parse(response.data);
|
||
if (errorData.exportStatus === 0) {
|
||
$scope.actionFailed = false;
|
||
$scope.actionSuccess = true;
|
||
$scope.errorMessage = errorData.error_message;
|
||
return;
|
||
}
|
||
} catch (e) {
|
||
// If not JSON, assume it's the file content
|
||
}
|
||
}
|
||
|
||
// If we get here, it's a successful file download
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = false;
|
||
}
|
||
|
||
function exportError(response) {
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = false;
|
||
$scope.actionSuccess = true;
|
||
$scope.errorMessage = "Could not connect to server. Please refresh this page.";
|
||
}
|
||
};
|
||
|
||
$scope.importRules = function () {
|
||
// Create file input element
|
||
var input = document.createElement('input');
|
||
input.type = 'file';
|
||
input.accept = '.json';
|
||
input.style.display = 'none';
|
||
|
||
input.onchange = function(event) {
|
||
var file = event.target.files[0];
|
||
if (file) {
|
||
var reader = new FileReader();
|
||
reader.onload = function(e) {
|
||
try {
|
||
var importData = JSON.parse(e.target.result);
|
||
|
||
// Validate file format
|
||
if (!importData.rules || !Array.isArray(importData.rules)) {
|
||
$scope.$apply(function() {
|
||
$scope.actionFailed = false;
|
||
$scope.actionSuccess = true;
|
||
$scope.errorMessage = "Invalid import file format. Please select a valid firewall rules export file.";
|
||
});
|
||
return;
|
||
}
|
||
|
||
// Upload file to server
|
||
uploadImportFile(file);
|
||
} catch (error) {
|
||
$scope.$apply(function() {
|
||
$scope.actionFailed = false;
|
||
$scope.actionSuccess = true;
|
||
$scope.errorMessage = "Invalid JSON file. Please select a valid firewall rules export file.";
|
||
});
|
||
}
|
||
};
|
||
reader.readAsText(file);
|
||
}
|
||
};
|
||
|
||
document.body.appendChild(input);
|
||
input.click();
|
||
document.body.removeChild(input);
|
||
};
|
||
|
||
function uploadImportFile(file) {
|
||
$scope.rulesLoading = false;
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = true;
|
||
|
||
var formData = new FormData();
|
||
formData.append('import_file', file);
|
||
|
||
var config = {
|
||
headers: {
|
||
'X-CSRFToken': getCookie('csrftoken'),
|
||
'Content-Type': undefined
|
||
},
|
||
transformRequest: angular.identity
|
||
};
|
||
|
||
$http.post("/firewall/importFirewallRules", formData, config).then(importSuccess, importError);
|
||
|
||
function importSuccess(response) {
|
||
$scope.rulesLoading = true;
|
||
|
||
if (response.data.importStatus === 1) {
|
||
$scope.actionFailed = true;
|
||
$scope.actionSuccess = false;
|
||
|
||
// Refresh rules list
|
||
populateCurrentRecords();
|
||
|
||
// Show import summary
|
||
var summary = `Import completed successfully!\n` +
|
||
`Imported: ${response.data.imported_count} rules\n` +
|
||
`Skipped: ${response.data.skipped_count} rules\n` +
|
||
`Errors: ${response.data.error_count} rules`;
|
||
|
||
if (response.data.errors && response.data.errors.length > 0) {
|
||
summary += `\n\nErrors:\n${response.data.errors.join('\n')}`;
|
||
}
|
||
|
||
alert(summary);
|
||
} else {
|
||
$scope.actionFailed = false;
|
||
$scope.actionSuccess = true;
|
||
$scope.errorMessage = response.data.error_message;
|
||
}
|
||
}
|
||
|
||
function importError(response) {
|
||
$scope.rulesLoading = true;
|
||
$scope.actionFailed = false;
|
||
$scope.actionSuccess = true;
|
||
$scope.errorMessage = "Could not connect to server. Please refresh this page.";
|
||
}
|
||
}
|
||
|
||
});
|
||
|
||
(function() {
|
||
// Do not capture tab clicks – let Angular ng-click run setFirewallTab() so data loads.
|
||
// Only sync tab from hash on load and hashchange (back/forward) via __firewallLoadTab.
|
||
function syncFirewallTabFromHash() {
|
||
var nav = document.getElementById('firewall-tab-nav');
|
||
if (!nav) return;
|
||
var h = (window.location.hash || '').replace(/^#/, '');
|
||
var tab = (h === 'banned-ips') ? 'banned' : 'rules';
|
||
if (window.__firewallLoadTab) {
|
||
try { window.__firewallLoadTab(tab); } catch (e) {}
|
||
}
|
||
}
|
||
|
||
if (document.readyState === 'loading') {
|
||
document.addEventListener('DOMContentLoaded', syncFirewallTabFromHash);
|
||
} else {
|
||
syncFirewallTabFromHash();
|
||
}
|
||
setTimeout(syncFirewallTabFromHash, 100);
|
||
window.addEventListener('hashchange', syncFirewallTabFromHash);
|
||
})(); |