Files
CyberPanel/emailPremium/views.py

2079 lines
74 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
2022-07-24 13:26:12 +05:00
import os
2022-07-21 17:42:48 +05:00
import time
2019-12-10 15:09:10 +05:00
from django.shortcuts import redirect
from django.http import HttpResponse
2022-07-23 22:22:39 +05:00
from loginSystem.models import Administrator
from mailServer.models import Domains, EUsers
2022-07-21 17:42:48 +05:00
from plogical.applicationInstaller import ApplicationInstaller
from websiteFunctions.models import Websites
from loginSystem.views import loadLoginPage
import plogical.CyberCPLogFileWriter as logging
import json
2018-06-25 05:45:38 +05:00
from .models import DomainLimits, EmailLimits
from math import ceil
from postfixSenderPolicy.client import cacheClient
2018-06-25 05:45:38 +05:00
from plogical.mailUtilities import mailUtilities
from plogical.virtualHostUtilities import virtualHostUtilities
from random import randint
2018-08-18 00:39:10 +05:00
from plogical.acl import ACLManager
2019-03-26 16:19:03 +05:00
from plogical.processUtilities import ProcessUtilities
2021-03-03 20:09:13 +05:00
from plogical.httpProc import httpProc
2022-07-23 22:22:39 +05:00
from cloudAPI.cloudManager import CloudManager
2022-07-21 17:42:48 +05:00
2018-10-12 18:18:10 +05:00
## Email Policy Server
def emailPolicyServer(request):
proc = httpProc(request, 'emailPremium/policyServer.html',
None, 'admin')
return proc.render()
2018-10-12 18:18:10 +05:00
2022-07-21 17:42:48 +05:00
2018-10-12 18:18:10 +05:00
def fetchPolicyServerStatus(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
if request.method == 'POST':
command = 'sudo cat /etc/postfix/main.cf'
2019-03-26 16:19:03 +05:00
output = ProcessUtilities.outputExecutioner(command).split('\n')
2018-10-12 18:18:10 +05:00
installCheck = 0
for items in output:
if items.find('check_policy_service unix:/var/log/policyServerSocket') > -1:
installCheck = 1
break
2022-07-21 17:42:48 +05:00
data_ret = {'status': 1, 'error_message': 'None', 'installCheck': installCheck}
2018-10-12 18:18:10 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-10-12 18:18:10 +05:00
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
2018-10-12 18:18:10 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg))
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
2018-10-12 18:18:10 +05:00
def savePolicyServerStatus(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
if request.method == 'POST':
data = json.loads(request.body)
policServerStatus = data['policServerStatus']
install = '0'
if policServerStatus == True:
install = "1"
## save configuration data
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
2018-10-12 18:18:10 +05:00
execPath = execPath + " savePolicyServerStatus --install " + install
2019-03-26 16:19:03 +05:00
output = ProcessUtilities.outputExecutioner(execPath)
2018-10-12 18:18:10 +05:00
if output.find("1,None") > -1:
data_ret = {'status': 1, 'error_message': "None"}
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)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-10-12 18:18:10 +05:00
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
2018-10-12 18:18:10 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg))
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
2018-10-12 18:18:10 +05:00
## Email Policy Server configs
def listDomains(request):
websites = DomainLimits.objects.all()
2018-06-27 00:16:50 +05:00
## Check if Policy Server is installed.
2018-06-27 00:16:50 +05:00
command = 'sudo cat /etc/postfix/main.cf'
output = ProcessUtilities.outputExecutioner(command).split('\n')
2018-06-27 00:16:50 +05:00
installCheck = 0
2018-06-27 00:16:50 +05:00
for items in output:
if items.find('check_policy_service unix:/var/log/policyServerSocket') > -1:
installCheck = 1
break
2018-06-27 00:16:50 +05:00
if installCheck == 0:
proc = httpProc(request, 'emailPremium/listDomains.html', {"installCheck": installCheck}, 'admin')
return proc.render()
###
pages = float(len(websites)) / float(10)
pagination = []
if pages <= 1.0:
pages = 1
pagination.append('<li><a href="\#"></a></li>')
else:
pages = ceil(pages)
finalPages = int(pages) + 1
for i in range(1, finalPages):
pagination.append('<li><a href="\#">' + str(i) + '</a></li>')
proc = httpProc(request, 'emailPremium/listDomains.html',
{"pagination": pagination, "installCheck": installCheck}, 'admin')
return proc.render()
2022-07-21 17:42:48 +05:00
def getFurtherDomains(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
if request.method == 'POST':
try:
data = json.loads(request.body)
status = data['page']
pageNumber = int(status)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
status = str(msg)
2018-08-18 00:39:10 +05:00
finalPageNumber = ((pageNumber * 10)) - 10
endPageNumber = finalPageNumber + 10
websites = Websites.objects.all()[finalPageNumber:endPageNumber]
json_data = "["
checker = 0
for items in websites:
try:
domain = Domains.objects.get(domainOwner=items)
domainLimits = DomainLimits.objects.get(domain=domain)
dic = {'domain': items.domain, 'emails': domain.eusers_set.all().count(),
'monthlyLimit': domainLimits.monthlyLimit, 'monthlyUsed': domainLimits.monthlyUsed,
2022-07-21 17:42:48 +05:00
'status': domainLimits.limitStatus}
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
2022-07-21 17:42:48 +05:00
json_data = json_data + ',' + json.dumps(dic)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
try:
domain = Domains.objects.get(domainOwner=items)
except:
domain = Domains(domainOwner=items, domain=items.domain)
domain.save()
domainLimits = DomainLimits(domain=domain)
domainLimits.save()
dic = {'domain': items.domain, 'emails': domain.eusers_set.all().count(),
'monthlyLimit': domainLimits.monthlyLimit, 'monthlyUsed': domainLimits.monthlyUsed,
'status': domainLimits.limitStatus}
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_dic = {'listWebSiteStatus': 1, 'error_message': "None", "data": json_data}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
dic = {'listWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
dic = {'listWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
def enableDisableEmailLimits(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
2018-06-25 17:53:11 +05:00
2018-08-18 00:39:10 +05:00
try:
if request.method == 'POST':
data = json.loads(request.body)
operationVal = data['operationVal']
domainName = data['domainName']
domain = Domains.objects.get(domain=domainName)
domainLimits = DomainLimits.objects.get(domain=domain)
domainLimits.limitStatus = operationVal
domainLimits.save()
command = 'cyberpanelCleaner purgeLimitDomain ' + domainName + ' ' + str(operationVal)
cacheClient.handleCachePurgeRequest(command)
dic = {'status': 1, 'error_message': 'None'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
dic = {'statusa': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
def emailLimits(request, domain):
if Websites.objects.filter(domain=domain).exists():
website = Websites.objects.get(domain=domain)
domainEmail = Domains.objects.get(domainOwner=website)
domainLimits = DomainLimits.objects.get(domain=domainEmail)
2018-06-25 17:53:11 +05:00
Data = {}
Data['domain'] = domain
Data['monthlyLimit'] = domainLimits.monthlyLimit
Data['monthlyUsed'] = domainLimits.monthlyUsed
Data['emailAccounts'] = domainEmail.eusers_set.count()
if domainLimits.limitStatus == 1:
Data['limitsOn'] = 1
Data['limitsOff'] = 0
2018-08-18 00:39:10 +05:00
else:
Data['limitsOn'] = 0
Data['limitsOff'] = 1
2018-06-25 17:53:11 +05:00
## Pagination for emails
pages = float(Data['emailAccounts']) / float(10)
pagination = []
if pages <= 1.0:
pages = 1
pagination.append('<li><a href="\#"></a></li>')
else:
pages = ceil(pages)
finalPages = int(pages) + 1
for i in range(1, finalPages):
pagination.append('<li><a href="\#">' + str(i) + '</a></li>')
Data['pagination'] = pagination
2021-02-24 20:49:18 +05:00
proc = httpProc(request, 'emailPremium/emailLimits.html', Data, 'admin')
return proc.render()
else:
proc = httpProc(request, 'emailPremium/emailLimits.html', {"error": 1, "domain": "This domain does not exists"},
'admin')
return proc.render()
2022-07-21 17:42:48 +05:00
def changeDomainLimit(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
if request.method == 'POST':
data = json.loads(request.body)
newLimit = data['newLimit']
domainName = data['domainName']
domain = Domains.objects.get(domain=domainName)
domainLimits = DomainLimits.objects.get(domain=domain)
domainLimits.monthlyLimit = newLimit
domainLimits.save()
command = 'cyberpanelCleaner updateDomainLimit ' + domainName + ' ' + str(newLimit)
cacheClient.handleCachePurgeRequest(command)
dic = {'status': 1, 'error_message': 'None'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
dic = {'statusa': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
def getFurtherEmail(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
if request.method == 'POST':
2018-06-25 17:53:11 +05:00
data = json.loads(request.body)
status = data['page']
domainName = data['domainName']
pageNumber = int(status)
finalPageNumber = ((pageNumber * 10)) - 10
endPageNumber = finalPageNumber + 10
domain = Domains.objects.get(domain=domainName)
emails = domain.eusers_set.all()[finalPageNumber:endPageNumber]
json_data = "["
checker = 0
for item in emails:
try:
emailLts = EmailLimits.objects.get(email=item)
dic = {'email': item.email, 'monthlyLimit': emailLts.monthlyLimits,
'monthlyUsed': emailLts.monthlyUsed, 'hourlyLimit': emailLts.hourlyLimit,
2022-07-21 17:42:48 +05:00
'hourlyUsed': emailLts.hourlyUsed, 'status': emailLts.limitStatus}
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
2022-07-21 17:42:48 +05:00
json_data = json_data + ',' + json.dumps(dic)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
json_data = json_data + ']'
final_dic = {'status': 1, 'error_message': "None", "data": json_data}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
def enableDisableIndividualEmailLimits(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
if request.method == 'POST':
data = json.loads(request.body)
operationVal = data['operationVal']
emailAddress = data['emailAddress']
email = EUsers.objects.get(email=emailAddress)
emailtLts = EmailLimits.objects.get(email=email)
emailtLts.limitStatus = operationVal
emailtLts.save()
command = 'cyberpanelCleaner purgeLimit ' + emailAddress + ' ' + str(operationVal)
cacheClient.handleCachePurgeRequest(command)
dic = {'status': 1, 'error_message': 'None'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
dic = {'statusa': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
def emailPage(request, emailAddress):
Data = {}
Data['emailAddress'] = emailAddress
email = EUsers.objects.get(email=emailAddress)
logEntries = email.emaillogs_set.all().count()
2018-06-25 17:53:11 +05:00
pages = float(logEntries) / float(10)
pagination = []
if pages <= 1.0:
pages = 1
pagination.append('<li><a href="\#"></a></li>')
else:
pages = ceil(pages)
finalPages = int(pages) + 1
for i in range(1, finalPages):
pagination.append('<li><a href="\#">' + str(i) + '</a></li>')
Data['pagination'] = pagination
proc = httpProc(request, 'emailPremium/emailPage.html', Data, 'admin')
return proc.render()
2022-07-21 17:42:48 +05:00
def getEmailStats(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
if request.method == 'POST':
data = json.loads(request.body)
emailAddress = data['emailAddress']
email = EUsers.objects.get(email=emailAddress)
emailLTS = EmailLimits.objects.get(email=email)
final_dic = {'status': 1, 'error_message': "None", "monthlyLimit": emailLTS.monthlyLimits,
'monthlyUsed': emailLTS.monthlyUsed, 'hourlyLimit': emailLTS.hourlyLimit,
'hourlyUsed': emailLTS.hourlyUsed,
'limitStatus': emailLTS.limitStatus, 'logsStatus': emailLTS.emailLogs}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
def enableDisableIndividualEmailLogs(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
if request.method == 'POST':
data = json.loads(request.body)
operationVal = data['operationVal']
emailAddress = data['emailAddress']
email = EUsers.objects.get(email=emailAddress)
emailtLts = EmailLimits.objects.get(email=email)
emailtLts.emailLogs = operationVal
emailtLts.save()
command = 'cyberpanelCleaner purgeLog ' + emailAddress + ' ' + str(operationVal)
cacheClient.handleCachePurgeRequest(command)
dic = {'status': 1, 'error_message': 'None'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
dic = {'statusa': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
def changeDomainEmailLimitsIndividual(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
if request.method == 'POST':
data = json.loads(request.body)
emailAddress = data['emailAddress']
monthlyLimit = data['monthlyLimit']
hourlyLimit = data['hourlyLimit']
## Limits Check
if monthlyLimit < hourlyLimit:
dic = {'status': 0, 'error_message': 'Monthly limit should be greater then hourly limit.'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
domainName = emailAddress.split('@')[1]
dbDomain = Domains.objects.get(domain=domainName)
domainLimit = DomainLimits.objects.get(domain=dbDomain)
allEmails = dbDomain.eusers_set.all()
currentEmailConsumption = 0
for email in allEmails:
emailLTS = EmailLimits.objects.get(email=email)
currentEmailConsumption = emailLTS.monthlyLimits + currentEmailConsumption
allowedLimit = domainLimit.monthlyLimit - currentEmailConsumption
if monthlyLimit > allowedLimit:
2022-07-21 17:42:48 +05:00
dic = {'status': 0,
'error_message': 'You can not set this monthly limit, first increase limits for this domain.'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
## Limits Check End
email = EUsers.objects.get(email=emailAddress)
emailLTS = EmailLimits.objects.get(email=email)
emailLTS.monthlyLimits = monthlyLimit
emailLTS.hourlyLimit = hourlyLimit
emailLTS.save()
2022-07-21 17:42:48 +05:00
command = 'cyberpanelCleaner purgeLimitEmail ' + emailAddress + ' ' + str(monthlyLimit) + ' ' + str(
hourlyLimit)
cacheClient.handleCachePurgeRequest(command)
dic = {'status': 1, 'error_message': 'None'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
dic = {'statusa': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
def getEmailLogs(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
if request.method == 'POST':
data = json.loads(request.body)
status = data['page']
emailAddress = data['emailAddress']
pageNumber = int(status)
finalPageNumber = ((pageNumber * 10)) - 10
endPageNumber = finalPageNumber + 10
email = EUsers.objects.get(email=emailAddress)
logEntries = email.emaillogs_set.all()[finalPageNumber:endPageNumber]
json_data = "["
checker = 0
for item in logEntries:
2022-07-21 17:42:48 +05:00
dic = {'id': item.id, 'source': emailAddress, 'destination': item.destination,
'time': item.timeStamp}
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_dic = {'status': 1, 'error_message': "None", "data": json_data}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
def flushEmailLogs(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
if request.method == 'POST':
data = json.loads(request.body)
emailAddress = data['emailAddress']
email = EUsers.objects.get(email=emailAddress)
for logEntry in email.emaillogs_set.all():
logEntry.delete()
dic = {'status': 1, 'error_message': 'None'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
dic = {'statusa': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
2018-06-25 05:45:38 +05:00
return HttpResponse(json_data)
### SpamAssassin
def spamAssassinHome(request):
checkIfSpamAssassinInstalled = 0
2018-06-25 05:45:38 +05:00
if mailUtilities.checkIfSpamAssassinInstalled() == 1:
checkIfSpamAssassinInstalled = 1
2018-06-25 05:45:38 +05:00
proc = httpProc(request, 'emailPremium/SpamAssassin.html',
{'checkIfSpamAssassinInstalled': checkIfSpamAssassinInstalled}, 'admin')
return proc.render()
2018-06-25 05:45:38 +05:00
2022-07-21 17:42:48 +05:00
2018-06-25 05:45:38 +05:00
def installSpamAssassin(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2018-06-25 17:53:11 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
2019-04-15 15:54:23 +05:00
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
2019-04-15 15:54:23 +05:00
execPath = execPath + " installSpamAssassin"
ProcessUtilities.popenExecutioner(execPath)
2018-06-25 05:45:38 +05:00
final_json = json.dumps({'status': 1, 'error_message': "None"})
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-06-25 05:45:38 +05:00
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)
2022-07-21 17:42:48 +05:00
2018-06-25 05:45:38 +05:00
def installStatusSpamAssassin(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-06-25 05:45:38 +05:00
try:
if request.method == 'POST':
command = "sudo cat " + mailUtilities.spamassassinInstallLogPath
2019-03-26 16:19:03 +05:00
installStatus = ProcessUtilities.outputExecutioner(command)
2018-06-25 05:45:38 +05:00
2022-07-21 17:42:48 +05:00
if installStatus.find("[200]") > -1:
2018-06-25 05:45:38 +05:00
2019-12-10 23:04:24 +05:00
execPath = "export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin && /usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
2018-06-25 05:45:38 +05:00
execPath = execPath + " configureSpamAssassin"
2020-04-01 12:53:21 +05:00
output = ProcessUtilities.outputExecutioner(execPath, 'root')
2018-06-25 05:45:38 +05:00
if output.find("1,None") > -1:
2020-05-29 11:21:13 +05:00
import os
if os.path.exists(mailUtilities.mailScannerInstallLogPath):
os.remove(mailUtilities.mailScannerInstallLogPath)
2019-12-09 21:59:49 +05:00
final_json = json.dumps({
'error_message': "None",
'requestStatus': installStatus,
'abort': 1,
'installed': 1,
})
return HttpResponse(final_json)
2018-06-25 05:45:38 +05:00
else:
final_json = json.dumps({
'error_message': "Failed to install SpamAssassin configurations.",
'requestStatus': installStatus,
'abort': 1,
'installed': 0,
})
return HttpResponse(final_json)
elif installStatus.find("[404]") > -1:
final_json = json.dumps({
2022-07-21 17:42:48 +05:00
'abort': 1,
'installed': 0,
'error_message': "None",
'requestStatus': installStatus,
})
2018-06-25 05:45:38 +05:00
return HttpResponse(final_json)
else:
final_json = json.dumps({
2022-07-21 17:42:48 +05:00
'abort': 0,
'error_message': "None",
'requestStatus': installStatus,
})
2018-06-25 05:45:38 +05:00
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2022-07-21 17:42:48 +05:00
final_dic = {'abort': 1, 'installed': 0, 'error_message': str(msg)}
2018-06-25 05:45:38 +05:00
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
2022-07-21 17:42:48 +05:00
final_dic = {'abort': 1, 'installed': 0,
'error_message': "Not Logged In, please refresh the page or login again."}
2018-06-25 05:45:38 +05:00
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2022-07-21 17:42:48 +05:00
2018-06-25 05:45:38 +05:00
def fetchSpamAssassinSettings(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('fetchStatus', 0)
2018-06-25 05:45:38 +05:00
try:
if request.method == 'POST':
report_safe = 0
required_hits = '5.0'
rewrite_header = 'Subject [SPAM]'
required_score = '5'
confPath = "/etc/mail/spamassassin/local.cf"
if mailUtilities.checkIfSpamAssassinInstalled() == 1:
command = "sudo cat " + confPath
2019-03-26 16:19:03 +05:00
data = ProcessUtilities.outputExecutioner(command).splitlines()
2018-06-25 05:45:38 +05:00
2022-07-21 17:42:48 +05:00
# logging.CyberCPLogFileWriter.writeToFile(str(data))
2018-06-25 05:45:38 +05:00
for items in data:
if items.find('report_safe ') > -1:
if items.find('0') > -1:
report_safe = 0
continue
else:
report_safe = 1
if items.find('rewrite_header ') > -1:
tempData = items.split(' ')
2018-10-12 18:18:10 +05:00
rewrite_header = ''
counter = 0
for headerData in tempData:
if counter == 0:
counter = counter + 1
continue
rewrite_header = rewrite_header + headerData.strip('\n') + ' '
2018-06-25 05:45:38 +05:00
continue
if items.find('required_score ') > -1:
required_score = items.split(' ')[1].strip('\n')
continue
if items.find('required_hits ') > -1:
required_hits = items.split(' ')[1].strip('\n')
continue
final_dic = {'fetchStatus': 1,
'installed': 1,
'report_safe': report_safe,
'rewrite_header': rewrite_header,
'required_score': required_score,
'required_hits': required_hits,
}
else:
final_dic = {'fetchStatus': 1,
'installed': 0}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-06-25 05:45:38 +05:00
final_dic = {'fetchStatus': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
return redirect(loadLoginPage)
2022-07-21 17:42:48 +05:00
2018-06-25 05:45:38 +05:00
def saveSpamAssassinConfigurations(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2018-06-25 05:45:38 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('saveStatus', 0)
2018-06-25 17:53:11 +05:00
2018-08-18 00:39:10 +05:00
try:
if request.method == 'POST':
2018-06-25 05:45:38 +05:00
data = json.loads(request.body)
report_safe = data['report_safe']
required_hits = data['required_hits']
rewrite_header = data['rewrite_header']
required_score = data['required_score']
if report_safe == True:
report_safe = "report_safe 1"
else:
report_safe = "report_safe 0"
required_hits = "required_hits " + required_hits
rewrite_header = "rewrite_header " + rewrite_header
required_score = "required_score " + required_score
## writing data temporary to file
tempConfigPath = "/home/cyberpanel/" + str(randint(1000, 9999))
confPath = open(tempConfigPath, "w")
confPath.writelines(report_safe + "\n")
confPath.writelines(required_hits + "\n")
confPath.writelines(rewrite_header + "\n")
confPath.writelines(required_score + "\n")
confPath.close()
## save configuration data
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
2018-06-25 05:45:38 +05:00
execPath = execPath + " saveSpamAssassinConfigs --tempConfigPath " + tempConfigPath
2019-03-26 16:19:03 +05:00
output = ProcessUtilities.outputExecutioner(execPath)
2018-06-25 05:45:38 +05:00
if output.find("1,None") > -1:
data_ret = {'saveStatus': 1, 'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'saveStatus': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-06-25 05:45:38 +05:00
data_ret = {'saveStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except KeyError as msg:
2018-06-25 05:45:38 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg))
data_ret = {'saveStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
2018-06-27 00:16:50 +05:00
return HttpResponse(json_data)
2020-03-28 12:25:09 +05:00
2022-07-21 17:42:48 +05:00
2020-03-28 12:25:09 +05:00
def mailQueue(request):
proc = httpProc(request, 'emailPremium/mailQueue.html',
None, 'admin')
return proc.render()
2020-03-28 12:25:09 +05:00
2022-07-21 17:42:48 +05:00
2020-03-28 12:25:09 +05:00
def fetchMailQueue(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
data = json.loads(request.body)
json_data = "["
checker = 0
queues = ProcessUtilities.outputExecutioner('postqueue -j').split('\n')
for queue in queues:
if checker == 0:
json_data = json_data + queue
checker = 1
else:
json_data = json_data + ',' + queue
json_data = json_data.rstrip(',') + ']'
final_dic = {'status': 1, 'error_message': "None", "data": json_data}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2020-03-31 18:26:55 +05:00
2022-07-21 17:42:48 +05:00
2020-03-31 18:26:55 +05:00
def fetchMessage(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)
id = data['id']
command = 'postcat -vq %s' % (id)
emailMessageContent = ProcessUtilities.outputExecutioner(command)
dic = {'status': 1, 'error_message': 'None', 'emailMessageContent': emailMessageContent}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except KeyError as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
2020-03-31 18:26:55 +05:00
def flushQueue(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
command = 'postqueue -f'
ProcessUtilities.executioner(command)
dic = {'status': 1, 'error_message': 'None'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except KeyError as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
2020-03-31 18:26:55 +05:00
def delete(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)
type = data['type']
if type == 'all':
command = 'postsuper -d ALL'
else:
command = 'postsuper -d ALL deferred'
ProcessUtilities.executioner(command)
dic = {'status': 1, 'error_message': 'None'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except KeyError as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
2020-05-28 13:30:25 +05:00
return HttpResponse(json_data)
2022-07-21 17:42:48 +05:00
2020-05-28 13:30:25 +05:00
## MailScanner
def MailScanner(request):
checkIfMailScannerInstalled = 0
2020-05-28 13:30:25 +05:00
ipFile = "/etc/cyberpanel/machineIP"
f = open(ipFile)
ipData = f.read()
ipAddress = ipData.split('\n', 1)[0]
2020-05-28 13:30:25 +05:00
if mailUtilities.checkIfMailScannerInstalled() == 1:
checkIfMailScannerInstalled = 1
2020-05-28 16:19:30 +05:00
proc = httpProc(request, 'emailPremium/MailScanner.html',
{'checkIfMailScannerInstalled': checkIfMailScannerInstalled, 'ipAddress': ipAddress}, 'admin')
return proc.render()
2020-05-28 16:19:30 +05:00
2022-07-21 17:42:48 +05:00
2020-05-28 16:19:30 +05:00
def installMailScanner(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
### Check selinux
2021-04-22 01:37:59 +05:00
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
command = 'sestatus'
result = ProcessUtilities.outputExecutioner(command)
2021-04-22 01:37:59 +05:00
if result.find('disabled') == -1:
2022-07-21 17:42:48 +05:00
final_json = json.dumps(
{'status': 0, 'error_message': "Disable selinux before installing MailScanner."})
2021-04-22 01:37:59 +05:00
return HttpResponse(final_json)
2020-05-28 16:19:30 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
execPath = execPath + " installMailScanner"
ProcessUtilities.popenExecutioner(execPath)
final_json = json.dumps({'status': 1, 'error_message': "None"})
return HttpResponse(final_json)
except BaseException as msg:
final_dic = {'status': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2020-05-28 13:30:25 +05:00
except KeyError:
2020-05-28 16:19:30 +05:00
final_dic = {'status': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
2020-05-28 20:58:06 +05:00
return HttpResponse(final_json)
2022-07-21 17:42:48 +05:00
2020-05-28 20:58:06 +05:00
def installStatusMailScanner(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
if request.method == 'POST':
2020-05-28 21:29:48 +05:00
command = "sudo cat " + mailUtilities.mailScannerInstallLogPath
2020-05-28 20:58:06 +05:00
installStatus = ProcessUtilities.outputExecutioner(command)
2022-07-21 17:42:48 +05:00
if installStatus.find("[200]") > -1:
final_json = json.dumps({
'error_message': "None",
'requestStatus': installStatus,
'abort': 1,
'installed': 1,
})
return HttpResponse(final_json)
elif installStatus.find("[404]") > -1:
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 as 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)
###Rspamd
def Rspamd(request):
2022-07-24 13:26:12 +05:00
url = "https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission"
data = {
"name": "email-debugger",
"IP": ACLManager.GetServerIP()
}
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
import requests
response = requests.post(url, data=json.dumps(data))
Status = response.json()['status']
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
if (Status == 1) or ProcessUtilities.decideServer() == ProcessUtilities.ent:
checkIfRspamdInstalled = 0
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
ipFile = "/etc/cyberpanel/machineIP"
f = open(ipFile)
ipData = f.read()
ipAddress = ipData.split('\n', 1)[0]
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
if mailUtilities.checkIfRspamdInstalled() == 1:
checkIfRspamdInstalled = 1
proc = httpProc(request, 'emailPremium/Rspamd.html',
{'checkIfRspamdInstalled': checkIfRspamdInstalled, 'ipAddress': ipAddress}, 'admin')
return proc.render()
else:
return redirect("https://cyberpanel.net/cyberpanel-addons")
2022-07-21 17:42:48 +05:00
def installRspamd(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
2022-07-24 13:26:12 +05:00
url = "https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission"
data = {
"name": "email-debugger",
"IP": ACLManager.GetServerIP()
}
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
import requests
response = requests.post(url, data=json.dumps(data))
Status = response.json()['status']
if (Status == 1) or ProcessUtilities.decideServer() == ProcessUtilities.ent:
try:
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
execPath = execPath + " installRspamd"
ProcessUtilities.popenExecutioner(execPath)
final_json = json.dumps({'status': 1, 'error_message': "None"})
return HttpResponse(final_json)
except BaseException as msg:
final_dic = {'status': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2022-07-21 17:42:48 +05:00
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 installStatusRspamd(request):
try:
userID = request.session['userID']
2022-07-24 13:26:12 +05:00
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
2022-07-21 17:42:48 +05:00
try:
if request.method == 'POST':
command = "sudo cat " + mailUtilities.RspamdInstallLogPath
installStatus = ProcessUtilities.outputExecutioner(command)
if installStatus.find("[200]") > -1:
2020-05-28 20:58:06 +05:00
final_json = json.dumps({
'error_message': "None",
'requestStatus': installStatus,
'abort': 1,
'installed': 1,
})
2022-07-21 17:42:48 +05:00
cmd = 'rm -f %s'%mailUtilities.RspamdInstallLogPath
ProcessUtilities.executioner(cmd)
2020-05-28 20:58:06 +05:00
return HttpResponse(final_json)
2022-07-21 17:42:48 +05:00
2020-05-28 20:58:06 +05:00
elif installStatus.find("[404]") > -1:
final_json = json.dumps({
2022-07-21 17:42:48 +05:00
'abort': 1,
'installed': 0,
'error_message': "None",
'requestStatus': installStatus,
})
cmd = 'rm -f %s' % mailUtilities.RspamdInstallLogPath
ProcessUtilities.executioner(cmd)
return HttpResponse(final_json)
else:
final_json = json.dumps({
'abort': 0,
'error_message': "None",
'requestStatus': installStatus,
})
2020-05-28 20:58:06 +05:00
return HttpResponse(final_json)
2022-07-21 17:42:48 +05:00
except BaseException as 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 fetchRspamdSettings(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('fetchStatus', 0)
2022-07-24 13:26:12 +05:00
url = "https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission"
data = {
"name": "email-debugger",
"IP": ACLManager.GetServerIP()
}
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
import requests
response = requests.post(url, data=json.dumps(data))
Status = response.json()['status']
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
if (Status == 1) or ProcessUtilities.decideServer() == ProcessUtilities.ent:
try:
if request.method == 'POST':
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
enabled = True
action = ''
max_Size = ''
scan_mime_parts = True
log_clean = True
Server = ''
CLAMAV_VIRUS = ''
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
confPath = "/etc/rspamd/local.d/antivirus.conf"
postfixpath = "/etc/postfix/main.cf"
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
if mailUtilities.checkIfRspamdInstalled() == 1:
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
command = "sudo cat " + confPath
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
data = ProcessUtilities.outputExecutioner(command).splitlines()
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
for items in data:
if items.find('enabled ') > -1:
if items.find('enabled = true') < 0:
enabled = False
continue
else:
enabled = True
if items.find('action =') > -1:
tempData = items.split(' ')
# logging.CyberCPLogFileWriter.writeToFile(str(tempData) + "action")
try:
a = tempData[4]
except:
a = tempData[2]
ac = a.split('"')
action = ac[1]
if items.find('max_size') > -1:
tempData = items.split(' ')
max = tempData[4]
max_Size = max.rstrip(";")
if items.find('scan_mime_parts ') > -1:
if items.find('scan_mime_parts = true') < 0:
scan_mime_parts = False
continue
else:
scan_mime_parts = True
if items.find('log_clean ') > -1:
if items.find('scan_mime_parts = true') < 0:
log_clean = False
continue
else:
log_clean = True
if items.find('servers =') > -1:
tempData = items.split(' ')
Ser = tempData[4]
x = Ser.rstrip(";")
y = x.split('"')
Server = y[1]
if items.find('CLAMAV_VIRUS =') > -1:
tempData = items.split(' ')
CLAMAV = tempData[6]
i = CLAMAV.rstrip(";")
j = i.split('"')
CLAMAV_VIRUS = j[1]
###postfix
smtpd_milters = ""
non_smtpd_milters = ""
command = "sudo cat " + postfixpath
postdata = ProcessUtilities.outputExecutioner(command).splitlines()
for i in postdata:
if i.find('smtpd_milters=') > -1 and i.find('non_smtpd_milters') < 0:
tempData = i.split(' ')
x = tempData[0]
y = x.split('=')
smtpd_milters = y[1]
if i.find('non_smtpd_milters=') > -1:
tempData = i.split(' ')
x = tempData[0]
y = x.split('=')
non_smtpd_milters = y[1]
###Redis
Redispath = "/etc/rspamd/local.d/redis.conf"
read_servers = ''
write_servers = ''
command = "sudo cat " + Redispath
postdata = ProcessUtilities.outputExecutioner(command).splitlines()
for i in postdata:
if i.find('write_servers =') > -1:
tempData = i.split(' ')
# logging.CyberCPLogFileWriter.writeToFile(str(tempData) + "redis")
write = tempData[2]
i = write.rstrip(";")
j = i.split('"')
write_servers = j[1]
# logging.CyberCPLogFileWriter.writeToFile(str(write_servers) + "write_servers")
if i.find('read_servers =') > -1:
tempData = i.split(' ')
# logging.CyberCPLogFileWriter.writeToFile(str(tempData) + "redis2")
read = tempData[2]
i = read.rstrip(";")
j = i.split('"')
read_servers = j[1]
# logging.CyberCPLogFileWriter.writeToFile(str(read_servers) + "read_servers")
2022-07-28 23:26:52 +05:00
#ClamAV configs
clamav_Debug = True
LogFile = ''
TCPAddr = ''
TCPSocket = ''
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
2022-07-29 12:12:14 +05:00
clamavconfpath = '/etc/clamd.d/scan.conf'
2022-07-28 23:26:52 +05:00
elif ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
clamavconfpath = "/etc/clamav/clamd.conf"
2022-07-29 12:12:14 +05:00
command = "sudo cat " + clamavconfpath
data = ProcessUtilities.outputExecutioner(command).splitlines()
for items in data:
if items.find('TCPSocket') > -1:
tempData = items.split(' ')
TCPSocket = tempData[1]
if items.find('TCPAddr') > -1:
tempData = items.split(' ')
TCPAddr = tempData[1]
if items.find('LogFile') > -1:
tempData = items.split(' ')
LogFile = tempData[1]
if items.find('Debug') > -1:
if items.find('Debug true') < 0:
clamav_Debug = False
continue
else:
clamav_Debug = True
2022-07-28 23:26:52 +05:00
2022-07-24 13:26:12 +05:00
final_dic = {'fetchStatus': 1,
'installed': 1,
'enabled': enabled,
'action': action,
'max_Size': max_Size,
'scan_mime_parts': scan_mime_parts,
'log_clean ': log_clean,
'Server': Server,
'CLAMAV_VIRUS': CLAMAV_VIRUS,
'smtpd_milters': smtpd_milters,
'non_smtpd_milters': non_smtpd_milters,
'read_servers': read_servers,
2022-07-28 23:26:52 +05:00
'write_servers': write_servers,
'clamav_Debug': clamav_Debug,
'LogFile': LogFile,
'TCPAddr': TCPAddr,
'TCPSocket': TCPSocket,
2022-07-24 13:26:12 +05:00
}
2022-07-21 17:42:48 +05:00
2020-05-28 20:58:06 +05:00
2022-07-24 13:26:12 +05:00
else:
final_dic = {'fetchStatus': 1,
'installed': 0}
2022-07-21 17:42:48 +05:00
2022-07-24 13:26:12 +05:00
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except BaseException as msg:
final_dic = {'fetchStatus': 0, 'error_message': str(msg)}
2022-07-21 17:42:48 +05:00
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
return redirect(loadLoginPage)
def saveRspamdConfigurations(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('saveStatus', 0)
try:
if request.method == 'POST':
data = json.loads(request.body)
tempfilepath = "/home/cyberpanel/tempfilerspamdconfigs"
json_object = json.dumps(data, indent=4)
writeDataToFile = open(tempfilepath, "w")
writeDataToFile.write(json_object)
writeDataToFile.close()
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
execPath = execPath + " changeRspamdConfig "
output = ProcessUtilities.outputExecutioner(execPath)
data_ret = {'saveStatus': 1, 'error_message': 'None'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'saveStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError:
return redirect(loadLoginPage)
def savepostfixConfigurations(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('saveStatus', 0)
try:
if request.method == 'POST':
data = json.loads(request.body)
tempfilepath = "/home/cyberpanel/tempfilepostfixconfigs"
json_object = json.dumps(data, indent=4)
writeDataToFile = open(tempfilepath, "w")
writeDataToFile.write(json_object)
writeDataToFile.close()
# status, msg = mailUtilities.changeRspamdConfig(request.body)
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
execPath = execPath + " changePostfixConfig "
output = ProcessUtilities.outputExecutioner(execPath)
data_ret = {'saveStatus': 1, 'error_message': 'None'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'saveStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError:
return redirect(loadLoginPage)
def saveRedisConfigurations(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('saveStatus', 0)
try:
if request.method == 'POST':
data = json.loads(request.body)
tempfilepath = "/home/cyberpanel/saveRedisConfigurations"
json_object = json.dumps(data, indent=4)
writeDataToFile = open(tempfilepath, "w")
writeDataToFile.write(json_object)
writeDataToFile.close()
# status, msg = mailUtilities.changeRspamdConfig(request.body)
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
execPath = execPath + " changeRedisxConfig "
output = ProcessUtilities.outputExecutioner(execPath)
data_ret = {'saveStatus': 1, 'error_message': 'None'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'saveStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError:
return redirect(loadLoginPage)
2022-07-28 23:26:52 +05:00
def saveclamavConfigurations(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('saveStatus', 0)
try:
if request.method == 'POST':
data = json.loads(request.body)
tempfilepath = "/home/cyberpanel/saveclamavConfigurations"
json_object = json.dumps(data, indent=4)
writeDataToFile = open(tempfilepath, "w")
writeDataToFile.write(json_object)
writeDataToFile.close()
# status, msg = mailUtilities.changeRspamdConfig(request.body)
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
execPath = execPath + " changeclamavConfig"
output = ProcessUtilities.outputExecutioner(execPath)
data_ret = {'saveStatus': 1, 'error_message': 'None'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'saveStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError:
return redirect(loadLoginPage)
2022-07-21 17:42:48 +05:00
def unistallRspamd(request):
try:
logging.CyberCPLogFileWriter.writeToFile("unistallRspamd...1")
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
execPath = execPath + " uninstallRspamd"
ProcessUtilities.popenExecutioner(execPath)
final_json = json.dumps({'status': 1, 'error_message': "None"})
return HttpResponse(final_json)
except BaseException as 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 uninstallStatusRspamd(request):
try:
userID = request.session['userID']
2022-07-24 13:26:12 +05:00
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
2022-07-21 17:42:48 +05:00
try:
if request.method == 'POST':
command = "sudo cat " + mailUtilities.RspamdUnInstallLogPath
installStatus = ProcessUtilities.outputExecutioner(command)
if installStatus.find("[200]") > -1:
2020-05-28 20:58:06 +05:00
final_json = json.dumps({
2022-07-21 17:42:48 +05:00
'error_message': "None",
'requestStatus': installStatus,
'abort': 1,
'installed': 1,
})
cmd = 'rm -f %s' % mailUtilities.RspamdUnInstallLogPath
ProcessUtilities.executioner(cmd)
2020-05-28 20:58:06 +05:00
return HttpResponse(final_json)
2022-07-21 17:42:48 +05:00
elif installStatus.find("[404]") > -1:
final_json = json.dumps({
'abort': 1,
'installed': 0,
'error_message': "None",
'requestStatus': installStatus,
})
cmd = 'rm -f %s' % mailUtilities.RspamdUnInstallLogPath
ProcessUtilities.executioner(cmd)
return HttpResponse(final_json)
else:
final_json = json.dumps({
'abort': 0,
'error_message': "None",
'requestStatus': installStatus,
})
return HttpResponse(final_json)
2020-05-28 20:58:06 +05:00
except BaseException as msg:
2022-07-21 17:42:48 +05:00
final_dic = {'abort': 1, 'installed': 0, 'error_message': str(msg)}
2020-05-28 20:58:06 +05:00
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
2022-07-21 17:42:48 +05:00
final_dic = {'abort': 1, 'installed': 0,
'error_message': "Not Logged In, please refresh the page or login again."}
2020-05-28 20:58:06 +05:00
final_json = json.dumps(final_dic)
2022-07-21 17:42:48 +05:00
return HttpResponse(final_json)
2022-07-23 22:22:39 +05:00
2022-07-28 23:26:52 +05:00
def FetchRspamdLog(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
fileName = "/var/log/rspamd/rspamd.log"
try:
command = "sudo tail -100 " + fileName
fewLinesOfLogFile = ProcessUtilities.outputExecutioner(command)
status = {"status": 1, "logstatus": 1, "logsdata": fewLinesOfLogFile}
final_json = json.dumps(status)
return HttpResponse(final_json)
except:
status = {"status": 1, "logstatus": 1, "logsdata": 'Emtpy File.'}
final_json = json.dumps(status)
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 RestartRspamd(request):
try:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
command = "systemctl restart rspamd"
ProcessUtilities.executioner(command)
2022-07-29 12:12:14 +05:00
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
command = 'systemctl start clamd@scan'
else:
command = "systemctl restart clamav-daemon"
2022-07-28 23:26:52 +05:00
ProcessUtilities.executioner(command)
dic = {'status': 1, 'error_message': 'None',}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except KeyError:
dic = {'status': 0, 'error_message': str("Not Logged In, please refresh the page or login again.")}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-23 22:22:39 +05:00
##Email Debugger
def EmailDebugger(request):
2022-07-24 13:26:12 +05:00
url = "https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission"
data = {
"name": "email-debugger",
"IP": ACLManager.GetServerIP()
}
2022-07-23 22:22:39 +05:00
2022-07-24 13:26:12 +05:00
import requests
response = requests.post(url, data=json.dumps(data))
Status = response.json()['status']
if (Status == 1) or ProcessUtilities.decideServer() == ProcessUtilities.ent:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
currentACL = ACLManager.loadedACL(userID)
websitesName = ACLManager.findAllSites(currentACL, userID)
proc = httpProc(request, 'emailPremium/EmailDebugger.html',
{'websiteList': websitesName}, 'admin')
return proc.render()
else:
return redirect("https://cyberpanel.net/cyberpanel-addons")
2022-07-23 22:22:39 +05:00
def RunServerLevelEmailChecks(request):
try:
userID = request.session['userID']
2022-07-24 13:26:12 +05:00
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
2022-10-03 12:32:36 +05:00
if ACLManager.CheckForPremFeature('email-debugger'):
2022-07-24 13:26:12 +05:00
ob = CloudManager()
res = ob.RunServerLevelEmailChecks()
return res
2022-10-03 12:32:36 +05:00
else:
dic = {'status': 0, 'error_message': 'Kindly purchase email debugger Add-on'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-23 22:22:39 +05:00
def ResetEmailConfigurations(request):
try:
userID = request.session['userID']
2022-07-24 13:26:12 +05:00
currentACL = ACLManager.loadedACL(userID)
2022-07-23 22:22:39 +05:00
2022-07-24 13:26:12 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
if ACLManager.CheckForPremFeature('email-debugger'):
ob = CloudManager()
res = ob.ResetEmailConfigurations()
return res
2022-10-03 12:32:36 +05:00
else:
dic = {'status': 0, 'error_message': 'Kindly purchase email debugger Add-on'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-23 22:22:39 +05:00
def statusFunc(request):
try:
userID = request.session['userID']
2022-07-24 13:26:12 +05:00
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
if ACLManager.CheckForPremFeature('email-debugger'):
ob = CloudManager(json.loads(request.body))
res = ob.statusFunc()
return res
2022-10-03 12:32:36 +05:00
else:
dic = {'status': 0, 'error_message': 'Kindly purchase email debugger Add-on'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except BaseException as msg:
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-23 22:22:39 +05:00
def ReadReport(request):
try:
userID = request.session['userID']
2022-07-24 13:26:12 +05:00
currentACL = ACLManager.loadedACL(userID)
2022-07-23 22:22:39 +05:00
2022-07-24 13:26:12 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
if ACLManager.CheckForPremFeature('email-debugger'):
try:
ob = CloudManager(json.loads(request.body))
res = ob.ReadReport()
Result = json.loads(res.content)
status = Result['status']
#fetch Ip
IP = ACLManager.GetServerIP()
if status == 1:
def CheckPort(port):
import socket
# Create a TCP socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.settimeout(1)
s.connect((IP, port))
return 1
except socket.error as e:
return 0
finally:
s.close()
report = {}
if CheckPort(25):
report['Port25'] = 'Open'
else:
report['Port25'] = 'Closed, mail will not go through.'
2022-07-23 22:22:39 +05:00
2022-07-24 13:26:12 +05:00
if CheckPort(587):
report['Port587'] = 'Open'
else:
report['Port587'] = 'Closed, mail will not go through.'
2022-07-23 22:22:39 +05:00
2022-07-24 13:26:12 +05:00
if CheckPort(465):
report['Port465'] = 'Open'
else:
report['Port465'] = 'Closed, mail will not go through.'
2022-07-23 22:22:39 +05:00
2022-07-24 13:26:12 +05:00
if CheckPort(110):
report['Port110'] = 'Open'
else:
report['Port110'] = 'Closed, POP3 will not work.'
2022-07-23 22:22:39 +05:00
2022-07-24 13:26:12 +05:00
if CheckPort(143):
report['Port143'] = 'Open'
else:
report['Port143'] = 'Closed, IMAP will not work.'
2022-07-23 22:22:39 +05:00
2022-07-24 13:26:12 +05:00
if CheckPort(993):
report['Port993'] = 'Open'
else:
report['Port993'] = 'Closed, IMAP will not work.'
2022-07-23 22:22:39 +05:00
2022-07-24 13:26:12 +05:00
if CheckPort(995):
report['Port995'] = 'Open'
else:
report['Port995'] = 'Closed, POP3 will not work.'
2022-07-23 22:22:39 +05:00
2022-07-24 13:26:12 +05:00
report['serverHostName'] = IP
finalResult = Result
finalResult['report'] = report
2022-07-23 22:22:39 +05:00
2022-07-24 13:26:12 +05:00
final_json = json.dumps(finalResult)
return HttpResponse(final_json)
else:
return 0 , Result
except BaseException as msg:
logging.CyberCPLogFileWriter.writeToFile("Result....3:" + str(msg))
2022-10-03 12:32:36 +05:00
else:
dic = {'status': 0, 'error_message': 'Kindly purchase email debugger Add-on'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-23 22:22:39 +05:00
except KeyError:
return redirect(loadLoginPage)
def debugEmailForSite(request):
try:
userID = request.session['userID']
2022-07-24 13:26:12 +05:00
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
2022-10-03 12:32:36 +05:00
if ACLManager.CheckForPremFeature('email-debugger'):
2022-07-24 13:26:12 +05:00
ob = CloudManager(json.loads(request.body))
res = ob.debugEmailForSite()
return res
2022-10-03 12:32:36 +05:00
else:
dic = {'status': 0, 'error_message': 'Kindly purchase email debugger Add-on'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-23 22:22:39 +05:00
except KeyError:
return redirect(loadLoginPage)
def fixMailSSL(request):
try:
userID = request.session['userID']
2022-07-24 13:26:12 +05:00
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
2022-07-23 22:22:39 +05:00
admin = Administrator.objects.get(pk=userID)
2022-10-03 12:32:36 +05:00
if ACLManager.CheckForPremFeature('email-debugger'):
2022-07-24 13:26:12 +05:00
cm = CloudManager(json.loads(request.body), admin)
res = cm.fixMailSSL(request)
if os.path.exists(ProcessUtilities.debugPath):
logging.CyberCPLogFileWriter.writeToFile("Result....3:" + str(res.content))
return res
2022-10-03 12:32:36 +05:00
else:
dic = {'status': 0, 'error_message': 'Kindly purchase email debugger Add-on'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2022-07-23 22:22:39 +05:00
except KeyError:
return redirect(loadLoginPage)