mirror of
				https://github.com/usmannasir/cyberpanel.git
				synced 2025-10-31 10:26:01 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			308 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			308 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/local/CyberCP/bin/python
 | |
| import os.path
 | |
| import sys
 | |
| import django
 | |
| from plogical.httpProc import httpProc
 | |
| sys.path.append('/usr/local/CyberCP')
 | |
| os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
 | |
| django.setup()
 | |
| from django.shortcuts import redirect
 | |
| from django.http import HttpResponse
 | |
| from loginSystem.views import loadLoginPage
 | |
| from loginSystem.models import Administrator
 | |
| import json
 | |
| from .models import Package
 | |
| from plogical.acl import ACLManager
 | |
| 
 | |
| class PackagesManager:
 | |
|     def __init__(self, request = None):
 | |
|         self.request  = request
 | |
| 
 | |
|     def packagesHome(self):
 | |
|         proc = httpProc(self.request, 'packages/index.html',
 | |
|                         None, 'createPackage')
 | |
|         return proc.render()
 | |
| 
 | |
|     def createPacakge(self):
 | |
|         userID = self.request.session['userID']
 | |
|         admin = Administrator.objects.get(pk=userID)
 | |
|         proc = httpProc(self.request, 'packages/createPackage.html',
 | |
|                         {"adminNamePackage": admin.userName}, 'createPackage')
 | |
|         return proc.render()
 | |
| 
 | |
|     def deletePacakge(self):
 | |
|         userID = self.request.session['userID']
 | |
|         currentACL = ACLManager.loadedACL(userID)
 | |
|         packageList = ACLManager.loadPackages(userID, currentACL)
 | |
|         proc = httpProc(self.request, 'packages/deletePackage.html',
 | |
|                         {"packageList": packageList}, 'deletePackage')
 | |
|         return proc.render()
 | |
| 
 | |
|     def submitPackage(self):
 | |
|         try:
 | |
| 
 | |
|             userID = self.request.session['userID']
 | |
|             currentACL = ACLManager.loadedACL(userID)
 | |
| 
 | |
|             if ACLManager.currentContextPermission(currentACL, 'createPackage') == 0:
 | |
|                 return ACLManager.loadErrorJson('saveStatus', 0)
 | |
| 
 | |
|             data = json.loads(self.request.body)
 | |
|             packageName = data['packageName'].replace(' ', '')
 | |
|             packageSpace = int(data['diskSpace'])
 | |
|             packageBandwidth = int(data['bandwidth'])
 | |
|             packageDatabases = int(data['dataBases'])
 | |
|             ftpAccounts = int(data['ftpAccounts'])
 | |
|             emails = int(data['emails'])
 | |
|             allowedDomains = int(data['allowedDomains'])
 | |
| 
 | |
|             try:
 | |
|                 api = data['api']
 | |
|             except:
 | |
|                 api = '0'
 | |
| 
 | |
|             try:
 | |
|                 allowFullDomain = int(data['allowFullDomain'])
 | |
|             except:
 | |
|                 allowFullDomain = 1
 | |
| 
 | |
|             try:
 | |
|                 enforceDiskLimits = int(data['enforceDiskLimits'])
 | |
|             except:
 | |
|                 enforceDiskLimits = 0
 | |
| 
 | |
| 
 | |
|             if packageSpace < 0 or packageBandwidth < 0 or packageDatabases < 0 or ftpAccounts < 0 or emails < 0 or allowedDomains < 0:
 | |
|                 data_ret = {'saveStatus': 0, 'error_message': "All values should be positive or 0."}
 | |
|                 json_data = json.dumps(data_ret)
 | |
|                 return HttpResponse(json_data)
 | |
| 
 | |
|             admin = Administrator.objects.get(pk=userID)
 | |
| 
 | |
|             if api == '0':
 | |
|                 packageName = admin.userName + "_" + packageName
 | |
| 
 | |
|             package = Package(admin=admin, packageName=packageName, diskSpace=packageSpace,
 | |
|                               bandwidth=packageBandwidth, ftpAccounts=ftpAccounts, dataBases=packageDatabases,
 | |
|                               emailAccounts=emails, allowedDomains=allowedDomains, allowFullDomain=allowFullDomain, enforceDiskLimits=enforceDiskLimits)
 | |
| 
 | |
|             package.save()
 | |
| 
 | |
|             data_ret = {'status': 1, 'saveStatus': 1, 'error_message': "None"}
 | |
|             json_data = json.dumps(data_ret)
 | |
|             return HttpResponse(json_data)
 | |
| 
 | |
|         except BaseException as msg:
 | |
|             data_ret = {'status': 0, 'saveStatus': 0, 'error_message': str(msg)}
 | |
|             json_data = json.dumps(data_ret)
 | |
|             return HttpResponse(json_data)
 | |
| 
 | |
|     def submitDelete(self):
 | |
|         try:
 | |
|             userID = self.request.session['userID']
 | |
|             currentACL = ACLManager.loadedACL(userID)
 | |
| 
 | |
|             if ACLManager.currentContextPermission(currentACL, 'deletePackage') == 0:
 | |
|                 return ACLManager.loadErrorJson('deleteStatus', 0)
 | |
| 
 | |
|             data = json.loads(self.request.body)
 | |
|             packageName = data['packageName']
 | |
| 
 | |
|             delPackage = Package.objects.get(packageName=packageName)
 | |
| 
 | |
|             ## Check package ownership
 | |
|             admin = Administrator.objects.get(pk=userID)
 | |
|             if ACLManager.CheckPackageOwnership(delPackage, admin, currentACL) == 0:
 | |
|                 return ACLManager.loadErrorJson('deleteStatus', 0)
 | |
| 
 | |
|             delPackage.delete()
 | |
| 
 | |
|             data_ret = {'status': 1, 'deleteStatus': 1, 'error_message': "None"}
 | |
|             json_data = json.dumps(data_ret)
 | |
|             return HttpResponse(json_data)
 | |
| 
 | |
| 
 | |
|         except BaseException as msg:
 | |
|             data_ret = {'status': 0, 'deleteStatus': 0, 'error_message': str(msg)}
 | |
|             json_data = json.dumps(data_ret)
 | |
|             return HttpResponse(json_data)
 | |
| 
 | |
|     def modifyPackage(self):
 | |
|         userID = self.request.session['userID']
 | |
|         currentACL = ACLManager.loadedACL(userID)
 | |
|         packageList = ACLManager.loadPackages(userID, currentACL)
 | |
|         proc = httpProc(self.request, 'packages/modifyPackage.html',
 | |
|                         {"packList": packageList}, 'modifyPackage')
 | |
|         return proc.render()
 | |
| 
 | |
|     def submitModify(self):
 | |
|         try:
 | |
|             userID = self.request.session['userID']
 | |
|             data = json.loads(self.request.body)
 | |
|             packageName = data['packageName']
 | |
| 
 | |
|             currentACL = ACLManager.loadedACL(userID)
 | |
| 
 | |
|             if ACLManager.currentContextPermission(currentACL, 'modifyPackage') == 0:
 | |
|                 return ACLManager.loadErrorJson('modifyStatus', 0)
 | |
| 
 | |
|             modifyPack = Package.objects.get(packageName=packageName)
 | |
| 
 | |
|             ## Check package ownership
 | |
|             admin = Administrator.objects.get(pk=userID)
 | |
|             if ACLManager.CheckPackageOwnership(modifyPack, admin, currentACL) == 0:
 | |
|                 return ACLManager.loadErrorJson('deleteStatus', 0)
 | |
| 
 | |
|             diskSpace = modifyPack.diskSpace
 | |
|             bandwidth = modifyPack.bandwidth
 | |
|             ftpAccounts = modifyPack.ftpAccounts
 | |
|             dataBases = modifyPack.dataBases
 | |
|             emails = modifyPack.emailAccounts
 | |
| 
 | |
| 
 | |
|             data_ret = {'emails': emails, 'modifyStatus': 1, 'error_message': "None",
 | |
|                         "diskSpace": diskSpace, "bandwidth": bandwidth, "ftpAccounts": ftpAccounts,
 | |
|                         "dataBases": dataBases, "allowedDomains": modifyPack.allowedDomains, 'allowFullDomain': modifyPack.allowFullDomain, 'enforceDiskLimits': modifyPack.enforceDiskLimits}
 | |
|             json_data = json.dumps(data_ret)
 | |
|             return HttpResponse(json_data)
 | |
| 
 | |
|         except BaseException as msg:
 | |
|             data_ret = {'modifyStatus': 0, 'error_message': str(msg)}
 | |
|             json_data = json.dumps(data_ret)
 | |
|             return HttpResponse(json_data)
 | |
| 
 | |
|     def saveChanges(self):
 | |
|         try:
 | |
| 
 | |
|             userID = self.request.session['userID']
 | |
|             currentACL = ACLManager.loadedACL(userID)
 | |
| 
 | |
|             admin = Administrator.objects.get(pk=userID)
 | |
| 
 | |
|             if ACLManager.currentContextPermission(currentACL, 'modifyPackage') == 0:
 | |
|                 return ACLManager.loadErrorJson('saveStatus', 0)
 | |
| 
 | |
|             data = json.loads(self.request.body)
 | |
|             packageName = data['packageName']
 | |
| 
 | |
|             if data['diskSpace'] < 0 or data['bandwidth'] < 0 or data['ftpAccounts'] < 0 or data[
 | |
|                 'dataBases'] < 0 or \
 | |
|                             data['emails'] < 0 or data['allowedDomains'] < 0:
 | |
|                 data_ret = {'saveStatus': 0, 'error_message': "All values should be positive or 0."}
 | |
|                 json_data = json.dumps(data_ret)
 | |
|                 return HttpResponse(json_data)
 | |
| 
 | |
|             modifyPack = Package.objects.get(packageName=packageName)
 | |
| 
 | |
|             if modifyPack.admin == admin:
 | |
| 
 | |
|                 modifyPack.diskSpace = data['diskSpace']
 | |
|                 modifyPack.bandwidth = data['bandwidth']
 | |
|                 modifyPack.ftpAccounts = data['ftpAccounts']
 | |
|                 modifyPack.dataBases = data['dataBases']
 | |
|                 modifyPack.emailAccounts = data['emails']
 | |
|                 modifyPack.allowedDomains = data['allowedDomains']
 | |
| 
 | |
|                 try:
 | |
|                     modifyPack.allowFullDomain = int(data['allowFullDomain'])
 | |
|                 except:
 | |
|                     modifyPack.allowFullDomain = 1
 | |
| 
 | |
|                 try:
 | |
|                     modifyPack.enforceDiskLimits = int(data['enforceDiskLimits'])
 | |
|                 except:
 | |
|                     modifyPack.enforceDiskLimits = 0
 | |
| 
 | |
|                 modifyPack.save()
 | |
| 
 | |
|                 ## Fix https://github.com/usmannasir/cyberpanel/issues/998
 | |
| 
 | |
|                 # from plogical.IncScheduler import IncScheduler
 | |
|                 # isPU = IncScheduler('CalculateAndUpdateDiskUsage', {})
 | |
|                 # isPU.start()
 | |
| 
 | |
|                 from plogical.processUtilities import ProcessUtilities
 | |
|                 command = '/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/IncScheduler.py UpdateDiskUsageForce'
 | |
|                 ProcessUtilities.outputExecutioner(command)
 | |
| 
 | |
|                 data_ret = {'status': 1, 'saveStatus': 1, 'error_message': "None"}
 | |
|                 json_data = json.dumps(data_ret)
 | |
|                 return HttpResponse(json_data)
 | |
|             else:
 | |
|                 data_ret = {'status': 0, 'saveStatus': 0, 'error_message': "You don't own this package."}
 | |
|                 json_data = json.dumps(data_ret)
 | |
|                 return HttpResponse(json_data)
 | |
| 
 | |
|         except BaseException as msg:
 | |
|             data_ret = {'status': 0, 'saveStatus': 0, 'error_message': str(msg)}
 | |
|             json_data = json.dumps(data_ret)
 | |
|             return HttpResponse(json_data)
 | |
| 
 | |
| 
 | |
|     def listPackages(self):
 | |
|         userID = self.request.session['userID']
 | |
|         currentACL = ACLManager.loadedACL(userID)
 | |
|         packageList = ACLManager.loadPackages(userID, currentACL)
 | |
|         proc = httpProc(self.request, 'packages/listPackages.html',
 | |
|                         {"packList": packageList}, 'listPackages')
 | |
|         return proc.render()
 | |
| 
 | |
|     def listPackagesAPI(self,data=None):
 | |
|         """
 | |
|             List of packages for API
 | |
|         :param data:
 | |
|         :return HttpResponse:
 | |
|         """
 | |
|         try:
 | |
|             adminUser = data['adminUser']
 | |
|             admin = Administrator.objects.get(userName=adminUser)
 | |
|             currentACL = ACLManager.loadedACL(admin.id)
 | |
|             packageList = ACLManager.loadPackages(admin.id, currentACL)
 | |
|             return HttpResponse(json.dumps(packageList))
 | |
|         except BaseException as msg:
 | |
|             data_ret = {'status': 0, 'error_message': str(msg)}
 | |
|             json_data = json.dumps(data_ret)
 | |
|             return HttpResponse(json_data)
 | |
| 
 | |
|     def fetchPackagesTable(self):
 | |
|         try:
 | |
|             userID = self.request.session['userID']
 | |
| 
 | |
|             currentACL = ACLManager.loadedACL(userID)
 | |
| 
 | |
|             if ACLManager.currentContextPermission(currentACL, 'listPackages') == 0:
 | |
|                 return ACLManager.loadErrorJson()
 | |
| 
 | |
| 
 | |
|             packages = ACLManager.loadPackageObjects(userID, currentACL)
 | |
| 
 | |
|             json_data = "["
 | |
|             checker = 0
 | |
| 
 | |
|             for items in packages:
 | |
| 
 | |
|                 dic = {'package': items.packageName,
 | |
|                        'diskSpace': items.diskSpace,
 | |
|                        'bandwidth': items.bandwidth,
 | |
|                        'emailAccounts': items.emailAccounts,
 | |
|                        'dataBases': items.dataBases,
 | |
|                        'ftpAccounts': items.ftpAccounts,
 | |
|                        'allowedDomains': items.allowedDomains,
 | |
|                        'allowFullDomain': items.allowFullDomain,
 | |
|                        'enforceDiskLimits': items.enforceDiskLimits
 | |
|                        }
 | |
| 
 | |
|                 if checker == 0:
 | |
|                     json_data = json_data + json.dumps(dic)
 | |
|                     checker = 1
 | |
|                 else:
 | |
|                     json_data = json_data + ',' + json.dumps(dic)
 | |
| 
 | |
|             json_data = json_data + ']'
 | |
| 
 | |
|             final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": json_data})
 | |
|             return HttpResponse(final_json)
 | |
| 
 | |
|         except KeyError:
 | |
|             return redirect(loadLoginPage)
 |