Files
CyberPanel/firewall/views.py
2018-08-26 04:55:51 +05:00

508 lines
16 KiB
Python

from django.shortcuts import render,redirect
from django.http import HttpResponse
import json
import shlex
import subprocess
from loginSystem.views import loadLoginPage
from plogical.virtualHostUtilities import virtualHostUtilities
from plogical.csf import CSF
import time
from plogical.acl import ACLManager
from plogical.firewallManager import FirewallManager
# Create your views here.
def securityHome(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.securityHome(request, userID)
except KeyError:
return redirect(loadLoginPage)
def firewallHome(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.firewallHome(request, userID)
except KeyError:
return redirect(loadLoginPage)
def getCurrentRules(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.getCurrentRules(userID)
except KeyError:
return redirect(loadLoginPage)
def addRule(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.addRule(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def deleteRule(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.deleteRule(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def reloadFirewall(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.reloadFirewall(userID)
except KeyError:
return redirect(loadLoginPage)
def startFirewall(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.startFirewall(userID)
except KeyError:
return redirect(loadLoginPage)
def stopFirewall(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.stopFirewall(userID)
except KeyError:
return redirect(loadLoginPage)
def firewallStatus(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.firewallStatus(userID)
except KeyError:
return redirect(loadLoginPage)
def secureSSH(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.secureSSH(request, userID)
except KeyError:
return redirect(loadLoginPage)
def getSSHConfigs(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.getSSHConfigs(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def saveSSHConfigs(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.saveSSHConfigs(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def deleteSSHKey(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.deleteSSHKey(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def addSSHKey(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.addSSHKey(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def loadModSecurityHome(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.loadModSecurityHome(request, userID)
except KeyError:
return redirect(loadLoginPage)
def installModSec(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.installModSec(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def installStatusModSec(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.installStatusModSec(userID)
except KeyError:
return redirect(loadLoginPage)
def fetchModSecSettings(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.fetchModSecSettings(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def saveModSecConfigurations(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.saveModSecConfigurations(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def modSecRules(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.modSecRules(request, userID)
except KeyError:
return redirect(loadLoginPage)
def fetchModSecRules(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.fetchModSecRules(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def saveModSecRules(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.saveModSecRules(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def modSecRulesPacks(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.modSecRulesPacks(request, userID)
except KeyError:
return redirect(loadLoginPage)
def getOWASPAndComodoStatus(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.getOWASPAndComodoStatus(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def installModSecRulesPack(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.installModSecRulesPack(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def getRulesFiles(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.getRulesFiles(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def enableDisableRuleFile(request):
try:
userID = request.session['userID']
fm = FirewallManager()
return fm.enableDisableRuleFile(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def csf(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
csfInstalled = 1
try:
command = 'sudo csf -h'
res = subprocess.call(shlex.split(command))
if res == 1:
csfInstalled = 0
except subprocess.CalledProcessError:
csfInstalled = 0
return render(request,'firewall/csf.html', {'csfInstalled' : csfInstalled})
except KeyError:
return redirect(loadLoginPage)
def installCSF(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('installStatus', 0)
try:
execPath = "sudo " + virtualHostUtilities.cyberPanel + "/plogical/csf.py"
execPath = execPath + " installCSF"
subprocess.Popen(shlex.split(execPath))
time.sleep(2)
data_ret = {"installStatus": 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
final_dic = {'installStatus': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
final_dic = {'installStatus': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def installStatusCSF(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
try:
if request.method == 'POST':
installStatus = unicode(open(CSF.installLogPath, "r").read())
if installStatus.find("[200]")>-1:
command = 'sudo rm -f ' + CSF.installLogPath
subprocess.call(shlex.split(command))
final_json = json.dumps({
'error_message': "None",
'requestStatus': installStatus,
'abort':1,
'installed': 1,
})
return HttpResponse(final_json)
elif installStatus.find("[404]") > -1:
command = 'sudo rm -f ' + CSF.installLogPath
subprocess.call(shlex.split(command))
final_json = json.dumps({
'abort':1,
'installed':0,
'error_message': "None",
'requestStatus': installStatus,
})
return HttpResponse(final_json)
else:
final_json = json.dumps({
'abort':0,
'error_message': "None",
'requestStatus': installStatus,
})
return HttpResponse(final_json)
except BaseException,msg:
final_dic = {'abort':1,'installed':0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
final_dic = {'abort':1,'installed':0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def removeCSF(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('installStatus', 0)
try:
execPath = "sudo " + virtualHostUtilities.cyberPanel + "/plogical/csf.py"
execPath = execPath + " removeCSF"
subprocess.Popen(shlex.split(execPath))
time.sleep(2)
data_ret = {"installStatus": 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
final_dic = {'installStatus': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
final_dic = {'installStatus': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def fetchCSFSettings(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('fetchStatus', 0)
try:
currentSettings = CSF.fetchCSFSettings()
data_ret = {"fetchStatus": 1, 'testingMode' : currentSettings['TESTING'],
'tcpIN' : currentSettings['tcpIN'],
'tcpOUT': currentSettings['tcpOUT'],
'udpIN': currentSettings['udpIN'],
'udpOUT': currentSettings['udpOUT'],
'firewallStatus': currentSettings['firewallStatus']
}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
final_dic = {'fetchStatus': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
final_dic = {'fetchStatus': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def changeStatus(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
data = json.loads(request.body)
controller = data['controller']
status = data['status']
execPath = "sudo " + virtualHostUtilities.cyberPanel + "/plogical/csf.py"
execPath = execPath + " changeStatus --controller " + controller + " --status " + status
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
data_ret = {"status": 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'status': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
final_dic = {'status': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
final_dic = {'status': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def modifyPorts(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
data = json.loads(request.body)
protocol = data['protocol']
ports = data['ports']
execPath = "sudo " + virtualHostUtilities.cyberPanel + "/plogical/csf.py"
execPath = execPath + " modifyPorts --protocol " + protocol + " --ports " + ports
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
data_ret = {"status": 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'status': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
final_dic = {'status': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
final_dic = {'status': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def modifyIPs(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
data = json.loads(request.body)
mode = data['mode']
ipAddress = data['ipAddress']
if mode == 'allowIP':
CSF.allowIP(ipAddress)
elif mode == 'blockIP':
CSF.blockIP(ipAddress)
data_ret = {"status": 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
final_dic = {'status': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
final_dic = {'status': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)