HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/emailPremium/views.py
# -*- coding: utf-8 -*-
import os
import time

from django.shortcuts import redirect
from django.http import HttpResponse

from loginSystem.models import Administrator
from mailServer.models import Domains, EUsers
from plogical.applicationInstaller import ApplicationInstaller
from websiteFunctions.models import Websites
from loginSystem.views import loadLoginPage
import plogical.CyberCPLogFileWriter as logging
import json
from .models import DomainLimits, EmailLimits
from math import ceil
from postfixSenderPolicy.client import cacheClient
from plogical.mailUtilities import mailUtilities
from plogical.virtualHostUtilities import virtualHostUtilities
from random import randint
from plogical.acl import ACLManager
from plogical.processUtilities import ProcessUtilities
from plogical.httpProc import httpProc
from cloudAPI.cloudManager import CloudManager


## Email Policy Server

def emailPolicyServer(request):
    proc = httpProc(request, 'emailPremium/policyServer.html',
                    None, 'admin')
    return proc.render()


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'
                output = ProcessUtilities.outputExecutioner(command).split('\n')

                installCheck = 0

                for items in output:
                    if items.find('check_policy_service unix:/var/log/policyServerSocket') > -1:
                        installCheck = 1
                        break

                data_ret = {'status': 1, 'error_message': 'None', 'installCheck': installCheck}
                json_data = json.dumps(data_ret)
                return HttpResponse(json_data)


        except BaseException as msg:
            data_ret = {'status': 0, 'error_message': str(msg)}
            json_data = json.dumps(data_ret)
            return HttpResponse(json_data)

    except KeyError as msg:
        logging.CyberCPLogFileWriter.writeToFile(str(msg))
        data_ret = {'status': 0, 'error_message': str(msg)}
        json_data = json.dumps(data_ret)
        return HttpResponse(json_data)


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

                execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
                execPath = execPath + " savePolicyServerStatus --install " + install
                output = ProcessUtilities.outputExecutioner(execPath)

                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)


        except BaseException as msg:
            data_ret = {'status': 0, 'error_message': str(msg)}
            json_data = json.dumps(data_ret)
            return HttpResponse(json_data)

    except KeyError as msg:
        logging.CyberCPLogFileWriter.writeToFile(str(msg))
        data_ret = {'status': 0, 'error_message': str(msg)}
        json_data = json.dumps(data_ret)
        return HttpResponse(json_data)


## Email Policy Server configs

def listDomains(request):
    websites = DomainLimits.objects.all()

    ## Check if Policy Server is installed.

    command = 'sudo cat /etc/postfix/main.cf'
    output = ProcessUtilities.outputExecutioner(command).split('\n')

    installCheck = 0

    for items in output:
        if items.find('check_policy_service unix:/var/log/policyServerSocket') > -1:
            installCheck = 1
            break

    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()


def getFurtherDomains(request):
    try:
        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)

                except BaseException as msg:
                    status = str(msg)

            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,
                           'status': domainLimits.limitStatus}

                    if checker == 0:
                        json_data = json_data + json.dumps(dic)
                        checker = 1
                    else:
                        json_data = json_data + ',' + json.dumps(dic)
                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)

        except BaseException as msg:
            dic = {'listWebSiteStatus': 0, 'error_message': str(msg)}
            json_data = json.dumps(dic)
            return HttpResponse(json_data)


    except KeyError as msg:
        dic = {'listWebSiteStatus': 0, 'error_message': str(msg)}
        json_data = json.dumps(dic)
        return HttpResponse(json_data)


def enableDisableEmailLimits(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)
                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)

        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 = {'statusa': 0, 'error_message': str(msg)}
        json_data = json.dumps(dic)
        return HttpResponse(json_data)


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)

        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
        else:
            Data['limitsOn'] = 0
            Data['limitsOff'] = 1

        ## 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

        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()


def changeDomainLimit(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)
                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)

        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 = {'statusa': 0, 'error_message': str(msg)}
        json_data = json.dumps(dic)
        return HttpResponse(json_data)


def getFurtherEmail(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)
                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,
                               'hourlyUsed': emailLts.hourlyUsed, 'status': emailLts.limitStatus}

                        if checker == 0:
                            json_data = json_data + json.dumps(dic)
                            checker = 1
                        else:
                            json_data = json_data + ',' + json.dumps(dic)
                    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)

        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)


def enableDisableIndividualEmailLimits(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)
                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)

        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 = {'statusa': 0, 'error_message': str(msg)}
        json_data = json.dumps(dic)
        return HttpResponse(json_data)


def emailPage(request, emailAddress):
    Data = {}
    Data['emailAddress'] = emailAddress

    email = EUsers.objects.get(email=emailAddress)
    logEntries = email.emaillogs_set.all().count()

    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()


def getEmailStats(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)
                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)

        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)


def enableDisableIndividualEmailLogs(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)
                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)

        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 = {'statusa': 0, 'error_message': str(msg)}
        json_data = json.dumps(dic)
        return HttpResponse(json_data)


def changeDomainEmailLimitsIndividual(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)
                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:
                    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()

                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)

        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 = {'statusa': 0, 'error_message': str(msg)}
        json_data = json.dumps(dic)
        return HttpResponse(json_data)


def getEmailLogs(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)
                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:

                    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)

        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)


def flushEmailLogs(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)
                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)

        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 = {'statusa': 0, 'error_message': str(msg)}
        json_data = json.dumps(dic)
        return HttpResponse(json_data)


### SpamAssassin

def spamAssassinHome(request):
    checkIfSpamAssassinInstalled = 0

    if mailUtilities.checkIfSpamAssassinInstalled() == 1:
        checkIfSpamAssassinInstalled = 1

    proc = httpProc(request, 'emailPremium/SpamAssassin.html',
                    {'checkIfSpamAssassinInstalled': checkIfSpamAssassinInstalled}, 'admin')
    return proc.render()


def installSpamAssassin(request):
    try:
        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 + " installSpamAssassin"
            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 installStatusSpamAssassin(request):
    try:
        userID = request.session['userID']
        try:
            if request.method == 'POST':

                command = "sudo cat " + mailUtilities.spamassassinInstallLogPath
                installStatus = ProcessUtilities.outputExecutioner(command)

                if installStatus.find("[200]") > -1:

                    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"
                    execPath = execPath + " configureSpamAssassin"
                    output = ProcessUtilities.outputExecutioner(execPath, 'root')

                    if output.find("1,None") > -1:

                        import os
                        if os.path.exists(mailUtilities.mailScannerInstallLogPath):
                            os.remove(mailUtilities.mailScannerInstallLogPath)

                        final_json = json.dumps({
                            'error_message': "None",
                            'requestStatus': installStatus,
                            'abort': 1,
                            'installed': 1,
                        })
                        return HttpResponse(final_json)
                    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({
                        '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)


def fetchSpamAssassinSettings(request):
    try:
        userID = request.session['userID']
        currentACL = ACLManager.loadedACL(userID)

        if currentACL['admin'] == 1:
            pass
        else:
            return ACLManager.loadErrorJson('fetchStatus', 0)

        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

                    data = ProcessUtilities.outputExecutioner(command).splitlines()

                    # logging.CyberCPLogFileWriter.writeToFile(str(data))

                    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(' ')
                            rewrite_header = ''
                            counter = 0
                            for headerData in tempData:
                                if counter == 0:
                                    counter = counter + 1
                                    continue
                                rewrite_header = rewrite_header + headerData.strip('\n') + ' '
                            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)


        except BaseException as msg:
            final_dic = {'fetchStatus': 0, 'error_message': str(msg)}
            final_json = json.dumps(final_dic)
            return HttpResponse(final_json)
    except KeyError:
        return redirect(loadLoginPage)


def saveSpamAssassinConfigurations(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)

                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

                execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
                execPath = execPath + " saveSpamAssassinConfigs --tempConfigPath " + tempConfigPath
                output = ProcessUtilities.outputExecutioner(execPath)

                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)


        except BaseException as msg:
            data_ret = {'saveStatus': 0, 'error_message': str(msg)}
            json_data = json.dumps(data_ret)
            return HttpResponse(json_data)

    except KeyError as msg:
        logging.CyberCPLogFileWriter.writeToFile(str(msg))
        data_ret = {'saveStatus': 0, 'error_message': str(msg)}
        json_data = json.dumps(data_ret)
        return HttpResponse(json_data)


def mailQueue(request):
    proc = httpProc(request, 'emailPremium/mailQueue.html',
                    None, 'admin')
    return proc.render()


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)


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)


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)


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)
        return HttpResponse(json_data)


## MailScanner

def MailScanner(request):
    checkIfMailScannerInstalled = 0

    ipFile = "/etc/cyberpanel/machineIP"
    f = open(ipFile)
    ipData = f.read()
    ipAddress = ipData.split('\n', 1)[0]

    if mailUtilities.checkIfMailScannerInstalled() == 1:
        checkIfMailScannerInstalled = 1

    proc = httpProc(request, 'emailPremium/MailScanner.html',
                    {'checkIfMailScannerInstalled': checkIfMailScannerInstalled, 'ipAddress': ipAddress}, 'admin')
    return proc.render()


def installMailScanner(request):
    try:
        userID = request.session['userID']
        currentACL = ACLManager.loadedACL(userID)

        if currentACL['admin'] == 1:
            pass
        else:
            return ACLManager.loadErrorJson()
        try:

            ### Check selinux

            if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
                command = 'sestatus'
                result = ProcessUtilities.outputExecutioner(command)

                if result.find('disabled') == -1:
                    final_json = json.dumps(
                        {'status': 0, 'error_message': "Disable selinux before installing MailScanner."})
                    return HttpResponse(final_json)

            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)
    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 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':

                command = "sudo cat " + mailUtilities.mailScannerInstallLogPath
                installStatus = ProcessUtilities.outputExecutioner(command)

                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):
    url = "https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission"
    data = {
        "name": "email-debugger",
        "IP": ACLManager.GetServerIP()
    }

    import requests
    response = requests.post(url, data=json.dumps(data))
    Status = response.json()['status']

    if (Status == 1) or ProcessUtilities.decideServer() == ProcessUtilities.ent:
        checkIfRspamdInstalled = 0

        ipFile = "/etc/cyberpanel/machineIP"
        f = open(ipFile)
        ipData = f.read()
        ipAddress = ipData.split('\n', 1)[0]

        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")

def installRspamd(request):
    try:
        userID = request.session['userID']
        currentACL = ACLManager.loadedACL(userID)

        if currentACL['admin'] == 1:
            pass
        else:
            return ACLManager.loadErrorJson()

        url = "https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission"
        data = {
            "name": "email-debugger",
            "IP": ACLManager.GetServerIP()
        }

        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)
    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']
        currentACL = ACLManager.loadedACL(userID)

        if currentACL['admin'] == 1:
            pass
        else:
            return ACLManager.loadErrorJson()
        try:
            if request.method == 'POST':

                command = "sudo cat " + mailUtilities.RspamdInstallLogPath
                installStatus = ProcessUtilities.outputExecutioner(command)

                if installStatus.find("[200]") > -1:

                    final_json = json.dumps({
                        'error_message': "None",
                        'requestStatus': installStatus,
                        'abort': 1,
                        'installed': 1,
                    })
                    cmd = 'rm -f %s'%mailUtilities.RspamdInstallLogPath
                    ProcessUtilities.executioner(cmd)
                    return HttpResponse(final_json)


                elif installStatus.find("[404]") > -1:

                    final_json = json.dumps({
                        '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,
                    })
                    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)

def fetchRspamdSettings(request):
    try:
        userID = request.session['userID']
        currentACL = ACLManager.loadedACL(userID)

        if currentACL['admin'] == 1:
            pass
        else:
            return ACLManager.loadErrorJson('fetchStatus', 0)

        url = "https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission"
        data = {
            "name": "email-debugger",
            "IP": ACLManager.GetServerIP()
        }

        import requests
        response = requests.post(url, data=json.dumps(data))
        Status = response.json()['status']

        if (Status == 1) or ProcessUtilities.decideServer() == ProcessUtilities.ent:
            try:
                if request.method == 'POST':

                    enabled = True
                    action = ''
                    max_Size = ''
                    scan_mime_parts = True
                    log_clean = True
                    Server = ''
                    CLAMAV_VIRUS = ''

                    confPath = "/etc/rspamd/local.d/antivirus.conf"
                    postfixpath = "/etc/postfix/main.cf"

                    if mailUtilities.checkIfRspamdInstalled() == 1:

                        command = "sudo cat " + confPath

                        data = ProcessUtilities.outputExecutioner(command).splitlines()

                        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:
                                    if len(tempData) > 4:
                                        a = tempData[4]
                                    elif len(tempData) > 2:
                                        a = tempData[2]
                                    else:
                                        continue
                                    ac = a.split('"')
                                    if len(ac) > 1:
                                        action = ac[1]
                                except:
                                    pass
                            if items.find('max_size') > -1:
                                tempData = items.split(' ')
                                if len(tempData) > 4:
                                    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(' ')
                                if len(tempData) > 4:
                                    Ser = tempData[4]
                                    x = Ser.rstrip(";")
                                    y = x.split('"')
                                    if len(y) > 1:
                                        Server = y[1]
                            if items.find('CLAMAV_VIRUS =') > -1:
                                tempData = items.split(' ')
                                if len(tempData) > 6:
                                    CLAMAV = tempData[6]
                                    i = CLAMAV.rstrip(";")
                                    j = i.split('"')
                                    if len(j) > 1:
                                        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 or i.find('smtpd_milters =') > -1) and i.find('non_smtpd_milters') < 0:
                                ### non_smtpd_milters = inet:127.0.0.1:8891, inet:127.0.0.1:11332
                                split_data = i.split(',')
                                if len(split_data) > 1:
                                    tempData = split_data[1]
                                    if os.path.exists(ProcessUtilities.debugPath):
                                        logging.CyberCPLogFileWriter.writeToFile(f'smtpd_milters: {tempData}')
                                    smtpd_milters = tempData.lstrip(' ')
                                else:
                                    # If no comma, try to get the value after the equals sign
                                    eq_split = i.split('=')
                                    if len(eq_split) > 1:
                                        smtpd_milters = eq_split[1].strip()
                            if i.find('non_smtpd_milters=') > -1 or i.find('non_smtpd_milters =') > -1:
                                eq_split = i.split('=')
                                if len(eq_split) > 1:
                                    tempData = eq_split[1]

                                    if os.path.exists(ProcessUtilities.debugPath):
                                        logging.CyberCPLogFileWriter.writeToFile(f'non_smtpd_milters: {tempData}')

                                    non_smtpd_milters = tempData.lstrip(' ')


                        ###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")
                                if len(tempData) > 2:
                                    write = tempData[2]
                                    i = write.rstrip(";")
                                    j = i.split('"')
                                    if len(j) > 1:
                                        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")
                                if len(tempData) > 2:
                                    read = tempData[2]
                                    i = read.rstrip(";")
                                    j = i.split('"')
                                    if len(j) > 1:
                                        read_servers = j[1]
                                    # logging.CyberCPLogFileWriter.writeToFile(str(read_servers) + "read_servers")

                        #ClamAV configs

                        clamav_Debug = True
                        LogFile = ''
                        TCPAddr = ''
                        TCPSocket = ''

                        if  ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
                            clamavconfpath = '/etc/clamd.d/scan.conf'
                        elif ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
                            clamavconfpath = "/etc/clamav/clamd.conf"

                        command = "sudo cat " + clamavconfpath
                        data = ProcessUtilities.outputExecutioner(command).splitlines()
                        for items in data:
                            if items.find('TCPSocket') > -1:
                                tempData = items.split(' ')
                                if len(tempData) > 1:
                                    TCPSocket = tempData[1]
                            if items.find('TCPAddr') > -1:
                                tempData = items.split(' ')
                                if len(tempData) > 1:
                                    TCPAddr = tempData[1]
                            if items.find('LogFile') > -1:
                                tempData = items.split(' ')
                                if len(tempData) > 1:
                                    LogFile = tempData[1]
                            if items.find('Debug') > -1:
                                if items.find('Debug true') < 0:
                                    clamav_Debug = False
                                    continue
                                else:
                                    clamav_Debug = True


                        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,
                                     'write_servers': write_servers,
                                     'clamav_Debug': clamav_Debug,
                                     'LogFile': LogFile,
                                     'TCPAddr': TCPAddr,
                                     'TCPSocket': TCPSocket,

                                     }


                    else:
                        final_dic = {'fetchStatus': 1,
                                     'installed': 0}

                    final_json = json.dumps(final_dic)
                    return HttpResponse(final_json)
            except BaseException as msg:
                final_dic = {'fetchStatus': 0, 'error_message': str(msg)}
                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)

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)

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']
        currentACL = ACLManager.loadedACL(userID)

        if currentACL['admin'] == 1:
            pass
        else:
            return ACLManager.loadErrorJson()
        try:
            if request.method == 'POST':

                command = "sudo cat " + mailUtilities.RspamdUnInstallLogPath
                installStatus = ProcessUtilities.outputExecutioner(command)

                if installStatus.find("[200]") > -1:

                    final_json = json.dumps({
                        'error_message': "None",
                        'requestStatus': installStatus,
                        'abort': 1,
                        'installed': 1,
                    })
                    cmd = 'rm -f %s' % mailUtilities.RspamdUnInstallLogPath
                    ProcessUtilities.executioner(cmd)
                    return HttpResponse(final_json)


                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)
        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 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)

            if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
                command = 'systemctl start clamd@scan'
            else:
                command = "systemctl restart clamav-daemon"

            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)


##Email Debugger

def EmailDebugger(request):
    url = "https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission"
    data = {
        "name": "email-debugger",
        "IP": ACLManager.GetServerIP()
    }

    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")

def RunServerLevelEmailChecks(request):
    try:
        userID = request.session['userID']
        currentACL = ACLManager.loadedACL(userID)

        if currentACL['admin'] == 1:
            pass
        else:
            return ACLManager.loadErrorJson()

        if ACLManager.CheckForPremFeature('email-debugger'):
            ob = CloudManager()
            res = ob.RunServerLevelEmailChecks()
            return res
        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)


def ResetEmailConfigurations(request):
    try:
        userID = request.session['userID']
        currentACL = ACLManager.loadedACL(userID)

        if currentACL['admin'] == 1:
            pass
        else:
            return ACLManager.loadErrorJson()
        if ACLManager.CheckForPremFeature('email-debugger'):
            ob = CloudManager()
            res = ob.ResetEmailConfigurations()
            return res
        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)

def statusFunc(request):
    try:
        userID = request.session['userID']
        currentACL = ACLManager.loadedACL(userID)

        if currentACL['admin'] == 1:
            pass
        else:
            return ACLManager.loadErrorJson()

        ob = CloudManager(json.loads(request.body))
        res = ob.statusFunc()
        return res
    except BaseException as msg:
        dic = {'status': 0, 'error_message': str(msg)}
        json_data = json.dumps(dic)
        return HttpResponse(json_data)

def ReadReport(request):
    try:
        userID = request.session['userID']
        currentACL = ACLManager.loadedACL(userID)

        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.'

                    if CheckPort(587):
                        report['Port587'] = 'Open'
                    else:
                        report['Port587'] = 'Closed, mail will not go through.'

                    if CheckPort(465):
                        report['Port465'] = 'Open'
                    else:
                        report['Port465'] = 'Closed, mail will not go through.'

                    if CheckPort(110):
                        report['Port110'] = 'Open'
                    else:
                        report['Port110'] = 'Closed, POP3 will not work.'

                    if CheckPort(143):
                        report['Port143'] = 'Open'
                    else:
                        report['Port143'] = 'Closed, IMAP will not work.'

                    if CheckPort(993):
                        report['Port993'] = 'Open'
                    else:
                        report['Port993'] = 'Closed, IMAP will not work.'

                    if CheckPort(995):
                        report['Port995'] = 'Open'
                    else:
                        report['Port995'] = 'Closed, POP3 will not work.'

                    report['serverHostName'] = IP
                    finalResult = Result
                    finalResult['report'] = report

                    final_json = json.dumps(finalResult)
                    return HttpResponse(final_json)
                else:
                    return 0 , Result
            except BaseException as msg:
                logging.CyberCPLogFileWriter.writeToFile("Result....3:" + str(msg))
        else:
            dic = {'status': 0, 'error_message': 'Kindly purchase email debugger Add-on'}
            json_data = json.dumps(dic)
            return HttpResponse(json_data)
    except KeyError:
        return redirect(loadLoginPage)

def debugEmailForSite(request):
    try:
        userID = request.session['userID']
        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.debugEmailForSite()
            return res
        else:
            dic = {'status': 0, 'error_message': 'Kindly purchase email debugger Add-on'}
            json_data = json.dumps(dic)
            return HttpResponse(json_data)
    except KeyError:
        return redirect(loadLoginPage)

def fixMailSSL(request):
    try:
        userID = request.session['userID']
        currentACL = ACLManager.loadedACL(userID)

        if currentACL['admin'] == 1:
            pass
        else:
            return ACLManager.loadErrorJson()
        admin = Administrator.objects.get(pk=userID)
        if ACLManager.CheckForPremFeature('email-debugger'):
            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
        else:
            dic = {'status': 0, 'error_message': 'Kindly purchase email debugger Add-on'}
            json_data = json.dumps(dic)
            return HttpResponse(json_data)
    except KeyError:
        return redirect(loadLoginPage)