Feature: allow user to disable session ip check

This commit is contained in:
Usman Nasir
2019-11-12 14:01:29 +05:00
parent dd3a5511af
commit e40fca9596
8 changed files with 72 additions and 9 deletions

View File

@@ -2,19 +2,24 @@ from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
import json import json
from django.shortcuts import HttpResponse from django.shortcuts import HttpResponse
import re import re
from loginSystem.models import Administrator
class secMiddleware: class secMiddleware:
HIGH = 0
LOW = 1
def __init__(self, get_response): def __init__(self, get_response):
self.get_response = get_response self.get_response = get_response
def __call__(self, request): def __call__(self, request):
try: try:
uID = request.session['userID'] uID = request.session['userID']
admin = Administrator.objects.get(pk=uID)
ipAddr = request.META.get('REMOTE_ADDR') ipAddr = request.META.get('REMOTE_ADDR')
if ipAddr.find('.') > -1: if ipAddr.find('.') > -1:
if request.session['ipAddr'] == ipAddr: if request.session['ipAddr'] == ipAddr or admin.securityLevel == secMiddleware.LOW:
pass pass
else: else:
del request.session['userID'] del request.session['userID']
@@ -27,7 +32,7 @@ class secMiddleware:
else: else:
ipAddr = request.META.get('REMOTE_ADDR').split(':')[:3] ipAddr = request.META.get('REMOTE_ADDR').split(':')[:3]
if request.session['ipAddr'] == ipAddr: if request.session['ipAddr'] == ipAddr or admin.securityLevel == secMiddleware.LOW:
pass pass
else: else:
del request.session['userID'] del request.session['userID']

View File

@@ -85,6 +85,7 @@ class Administrator(models.Model):
owner = models.IntegerField(default=1) owner = models.IntegerField(default=1)
token = models.CharField(max_length=500, default='None') token = models.CharField(max_length=500, default='None')
api = models.IntegerField(default=0) api = models.IntegerField(default=0)
securityLevel = models.IntegerField(default=0)
initWebsitesLimit = models.IntegerField(default=0) initWebsitesLimit = models.IntegerField(default=0)
acl = models.ForeignKey(ACL, default=1) acl = models.ForeignKey(ACL, default=1)

View File

@@ -553,6 +553,11 @@ class Upgrade:
except: except:
pass pass
try:
cursor.execute('ALTER TABLE loginSystem_administrator ADD securityLevel integer')
except:
pass
try: try:
cursor.execute('ALTER TABLE loginSystem_administrator ADD api integer') cursor.execute('ALTER TABLE loginSystem_administrator ADD api integer')
except: except:

2
upgrade.sh Normal file → Executable file
View File

@@ -6,7 +6,7 @@
## Then run it like below. ## Then run it like below.
## /usr/local/CyberCP/upgrade.sh ## /usr/local/CyberCP/upgrade.sh
cd /usr/local/CyberCP && python manage.py collectstatic --no-input cd /usr/local/CyberCP && /usr/local/CyberCP/bin/python2 manage.py collectstatic --no-input
rm -rf /usr/local/CyberCP/public/static/* rm -rf /usr/local/CyberCP/public/static/*
cp -R /usr/local/CyberCP/static/* /usr/local/CyberCP/public/static/ cp -R /usr/local/CyberCP/static/* /usr/local/CyberCP/public/static/
find /usr/local/CyberCP -type d -exec chmod 0755 {} \; find /usr/local/CyberCP -type d -exec chmod 0755 {} \;

View File

@@ -42,7 +42,8 @@ app.controller('createUserCtr', function ($scope, $http) {
selectedACL: selectedACL, selectedACL: selectedACL,
websitesLimit: websitesLimits, websitesLimit: websitesLimits,
userName: userName, userName: userName,
password: password password: password,
securityLevel: $scope.securityLevel
}; };
var config = { var config = {
@@ -171,6 +172,7 @@ app.controller('modifyUser', function ($scope, $http) {
$scope.firstName = userDetails.firstName; $scope.firstName = userDetails.firstName;
$scope.lastName = userDetails.lastName; $scope.lastName = userDetails.lastName;
$scope.email = userDetails.email; $scope.email = userDetails.email;
$scope.secLevel = userDetails.securityLevel;
$scope.userModificationLoading = true; $scope.userModificationLoading = true;
$scope.acctDetailsFetched = false; $scope.acctDetailsFetched = false;
@@ -181,6 +183,7 @@ app.controller('modifyUser', function ($scope, $http) {
$scope.detailsFetched = false; $scope.detailsFetched = false;
$scope.userAccountsLimit = true; $scope.userAccountsLimit = true;
$scope.websitesLimit = true; $scope.websitesLimit = true;
} else { } else {
$scope.userModificationLoading = true; $scope.userModificationLoading = true;
$scope.acctDetailsFetched = true; $scope.acctDetailsFetched = true;
@@ -248,7 +251,8 @@ app.controller('modifyUser', function ($scope, $http) {
firstName: firstName, firstName: firstName,
lastName: lastName, lastName: lastName,
email: email, email: email,
password: password password: password,
securityLevel: $scope.securityLevel
}; };
var config = { var config = {

View File

@@ -102,6 +102,17 @@
</div> </div>
</div> </div>
<div ng-hide="acctDetailsFetched" class="form-group">
<label class="col-sm-3 control-label">{% trans "Security Level" %}</label>
<div class="col-sm-6">
<select ng-change="fetchUserDetails()" ng-model="securityLevel" class="form-control">
<option>HIGH</option>
<option>LOW</option>
</select>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label"></label> <label class="col-sm-3 control-label"></label>
<div class="col-sm-4"> <div class="col-sm-4">

View File

@@ -81,6 +81,20 @@
</div> </div>
<div ng-hide="acctDetailsFetched" class="form-group">
<label class="col-sm-3 control-label">{% trans "Security Level" %}</label>
<div class="col-sm-6">
<select ng-change="fetchUserDetails()" ng-model="securityLevel" class="form-control">
<option>HIGH</option>
<option>LOW</option>
</select>
</div>
<div class="col-sm-3">
Currently: {$ secLevel $}
</div>
</div>
<div ng-hide="acctDetailsFetched" class="form-group"> <div ng-hide="acctDetailsFetched" class="form-group">
<label class="col-sm-3 control-label"></label> <label class="col-sm-3 control-label"></label>
<div class="col-sm-4"> <div class="col-sm-4">

View File

@@ -10,6 +10,7 @@ from plogical import hashPassword
from plogical import CyberCPLogFileWriter as logging from plogical import CyberCPLogFileWriter as logging
from plogical.acl import ACLManager from plogical.acl import ACLManager
from plogical.virtualHostUtilities import virtualHostUtilities from plogical.virtualHostUtilities import virtualHostUtilities
from CyberCP.secMiddleware import secMiddleware
# Create your views here. # Create your views here.
@@ -138,6 +139,7 @@ def submitUserCreation(request):
password = data['password'] password = data['password']
websitesLimit = data['websitesLimit'] websitesLimit = data['websitesLimit']
selectedACL = data['selectedACL'] selectedACL = data['selectedACL']
securityLevel = data['securityLevel']
selectedACL = ACL.objects.get(name=selectedACL) selectedACL = ACL.objects.get(name=selectedACL)
@@ -146,6 +148,11 @@ def submitUserCreation(request):
else: else:
type = 3 type = 3
if securityLevel == 'LOW':
securityLevel = secMiddleware.LOW
else:
securityLevel = secMiddleware.HIGH
token = hashPassword.generateToken(userName, password) token = hashPassword.generateToken(userName, password)
password = hashPassword.hash_password(password) password = hashPassword.hash_password(password)
currentAdmin = Administrator.objects.get(pk=userID) currentAdmin = Administrator.objects.get(pk=userID)
@@ -168,7 +175,8 @@ def submitUserCreation(request):
initWebsitesLimit=websitesLimit, initWebsitesLimit=websitesLimit,
owner=currentAdmin.pk, owner=currentAdmin.pk,
acl=selectedACL, acl=selectedACL,
token=token token=token,
securityLevel=securityLevel,
) )
newAdmin.save() newAdmin.save()
@@ -183,7 +191,8 @@ def submitUserCreation(request):
initWebsitesLimit=websitesLimit, initWebsitesLimit=websitesLimit,
owner=currentAdmin.pk, owner=currentAdmin.pk,
acl=selectedACL, acl=selectedACL,
token=token token=token,
securityLevel=securityLevel,
) )
newAdmin.save() newAdmin.save()
elif currentACL['createNewUser'] == 1: elif currentACL['createNewUser'] == 1:
@@ -197,7 +206,8 @@ def submitUserCreation(request):
initWebsitesLimit=websitesLimit, initWebsitesLimit=websitesLimit,
owner=currentAdmin.pk, owner=currentAdmin.pk,
acl=selectedACL, acl=selectedACL,
token=token token=token,
securityLevel=securityLevel,
) )
newAdmin.save() newAdmin.save()
else: else:
@@ -261,6 +271,12 @@ def fetchUserDetails(request):
email = user.email email = user.email
websitesLimit = user.initWebsitesLimit websitesLimit = user.initWebsitesLimit
securityLevel = ''
if user.securityLevel == secMiddleware.LOW:
securityLevel = 'Low'
else:
securityLevel = 'High'
userDetails = { userDetails = {
"id": user.id, "id": user.id,
@@ -268,7 +284,8 @@ def fetchUserDetails(request):
"lastName": lastName, "lastName": lastName,
"email": email, "email": email,
"acl": user.acl.name, "acl": user.acl.name,
"websitesLimit": websitesLimit "websitesLimit": websitesLimit,
"securityLevel": securityLevel
} }
data_ret = {'fetchStatus': 1, 'error_message': 'None', "userDetails": userDetails} data_ret = {'fetchStatus': 1, 'error_message': 'None', "userDetails": userDetails}
@@ -296,6 +313,7 @@ def saveModifications(request):
firstName = data['firstName'] firstName = data['firstName']
lastName = data['lastName'] lastName = data['lastName']
email = data['email'] email = data['email']
securityLevel = data['securityLevel']
user = Administrator.objects.get(userName=accountUsername) user = Administrator.objects.get(userName=accountUsername)
@@ -323,6 +341,11 @@ def saveModifications(request):
user.token = token user.token = token
user.type = 0 user.type = 0
if securityLevel == 'LOW':
user.securityLevel = secMiddleware.LOW
else:
user.securityLevel = secMiddleware.HIGH
user.save() user.save()
data_ret = {'status': 1, 'saveStatus': 1, 'error_message': 'None'} data_ret = {'status': 1, 'saveStatus': 1, 'error_message': 'None'}