diff --git a/emailPremium/static/emailPremium/emailPremium.js b/emailPremium/static/emailPremium/emailPremium.js index c041c9853..871f0ebc4 100755 --- a/emailPremium/static/emailPremium/emailPremium.js +++ b/emailPremium/static/emailPremium/emailPremium.js @@ -1133,6 +1133,9 @@ app.controller('Rspamd', function ($scope, $http, $timeout, $window) { $('#log_clean').change(function () { log_clean = $(this).prop('checked'); }); + $('#clamav_Debug').change(function () { + clamav_Debug = $(this).prop('checked'); + }); fetchRspamdSettings(); @@ -1180,6 +1183,11 @@ app.controller('Rspamd', function ($scope, $http, $timeout, $window) { } else if (response.data.log_clean === false) { $('#log_clean').bootstrapToggle('off'); } + if (response.data.clamav_Debug === true) { + $('#clamav_Debug').bootstrapToggle('on'); + } else if (response.data.clamav_Debug === false) { + $('#clamav_Debug').bootstrapToggle('off'); + } $scope.max_size = response.data.max_Size; $scope.server = response.data.Server; @@ -1189,6 +1197,9 @@ app.controller('Rspamd', function ($scope, $http, $timeout, $window) { $scope.non_smtpd_milters = response.data.non_smtpd_milters; $scope.read_servers = response.data.read_servers; $scope.write_servers = response.data.write_servers; + $scope.LogFile = response.data.LogFile; + $scope.TCPAddr = response.data.TCPAddr; + $scope.TCPSocket = response.data.TCPSocket; // $scope.required_score = response.data.required_score; // } @@ -1521,6 +1532,138 @@ app.controller('Rspamd', function ($scope, $http, $timeout, $window) { } + ///ClamAV config + + $scope.CLamAVLoading = true; + $scope.ClamAVfailedToSave = true; + $scope.ClamAVsuccessfullySaved = true; + $scope.ClamAVcouldNotConnect = true; + + $scope.saveclamavConfigurations = function () { + $scope.CLamAVLoading = false; + url = "/emailPremium/saveclamavConfigurations"; + var data = { + LogFile: $scope.LogFile, + TCPAddr: $scope.TCPAddr, + TCPSocket: $scope.TCPSocket, + clamav_Debug: clamav_Debug + }; + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + + function ListInitialDatas(response) { + + + if (response.data.saveStatus === 1) { + + $scope.CLamAVfailedToSave = true; + $scope.CLamAVsuccessfullySaved = false; + $scope.CLamAVLoading = true; + $scope.CLamAVcouldNotConnect = true; + + location.reload(); + + } else { + $scope.errorMessage = response.data.error_message; + + $scope.CLamAVfailedToSave = false; + $scope.CLamAVsuccessfullySaved = true; + $scope.CLamAVLoading = true; + $scope.CLamAVcouldNotConnect = true; + } + + } + + function cantLoadInitialDatas(response) { + $scope.CLamAVfailedToSave = true; + $scope.CLamAVsuccessfullySaved = true; + $scope.CLamAVLoading = true; + $scope.CLamAVcouldNotConnect = false; + } + }; + + $scope.FetchRspamdLog = function () { + url = "/emailPremium/FetchRspamdLog"; + var data = { + + }; + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + function ListInitialDatas(response) { + + + if (response.data.status === 1) { + + console.log(response.data) + $scope.RspamdlogsData = response.data.logsdata; + + } else { + + console.log( response.data.error_message) + } + + } + + function cantLoadInitialDatas(response) { + console.log(response) + } + }; + + + $scope.RestartRspamd = function () { + + $scope.RspamdLoading = false; + url = "/emailPremium/RestartRspamd"; + var data = { + + }; + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + function ListInitialDatas(response) { + $scope.RspamdLoading = true; + if (response.data.status === 1) { + + console.log(response.data) + new PNotify({ + title: 'Success', + text: 'SUccessfully Restarted.', + type: 'success' + }); + + } else { + + new PNotify({ + title: 'Operation Failed!', + text: response.data.error_message, + type: 'error' + }); + } + + } + + function cantLoadInitialDatas(response) { + $scope.RspamdLoading = true; + new PNotify({ + title: 'Error', + text: 'Could not connect to server, please refresh this page.', + type: 'error' + }); + } + }; + + }); //// Email Debugger diff --git a/emailPremium/templates/emailPremium/Rspamd.html b/emailPremium/templates/emailPremium/Rspamd.html index 49b087f75..8f8af893e 100644 --- a/emailPremium/templates/emailPremium/Rspamd.html +++ b/emailPremium/templates/emailPremium/Rspamd.html @@ -10,30 +10,38 @@
-

{% trans "Rspamd Configurations!" %} - {% trans "Rspamd Docs" %} +

{% trans "Rspamd Configurations!" %} -

{% trans "On this page you can configure RSPAMD settings." %}

-
-
+

{% trans "Rspamd" %}

+
+ +
+ +
+
+
+ + + +
{#-------------------------------un install process----------------------------------#} @@ -247,6 +255,78 @@
+ + +
+

+ {% trans "ClamAV Configuration" %} + +

+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+ +
+ +
+ + +
+
+ +
+ +
+ +
+

{% trans "Failed to save ClamAV configurations. Error message: " %} + {$ errorMessage $}

+
+ +
+

{% trans "ClamAV configurations successfully saved." %}

+
+ +
+

{% trans "Could not connect. Please refresh this page." %}

+
+ +
+
+
+
+

@@ -396,6 +476,35 @@

+ + +
diff --git a/emailPremium/urls.py b/emailPremium/urls.py index f66aa2443..ba29c3fd2 100755 --- a/emailPremium/urls.py +++ b/emailPremium/urls.py @@ -52,9 +52,11 @@ urlpatterns = [ url(r'^saveRspamdConfigurations$', views.saveRspamdConfigurations, name='saveRspamdConfigurations'), url(r'^savepostfixConfigurations$', views.savepostfixConfigurations, name='savepostfixConfigurations'), url(r'^saveRedisConfigurations$', views.saveRedisConfigurations, name='saveRedisConfigurations'), - url(r'^saveRedisConfigurations$', views.saveRedisConfigurations, name='saveRedisConfigurations'), + url(r'^saveclamavConfigurations$', views.saveclamavConfigurations, name='saveclamavConfigurations'), url(r'^unistallRspamd$', views.unistallRspamd, name='unistallRspamd'), url(r'^uninstallStatusRspamd$', views.uninstallStatusRspamd, name='uninstallStatusRspamd'), + url(r'^FetchRspamdLog$', views.FetchRspamdLog, name='FetchRspamdLog'), + url(r'^RestartRspamd$', views.RestartRspamd, name='RestartRspamd'), url(r'^EmailDebugger$', views.EmailDebugger, name='EmailDebugger'), diff --git a/emailPremium/views.py b/emailPremium/views.py index f1002ed8a..dfc57b096 100755 --- a/emailPremium/views.py +++ b/emailPremium/views.py @@ -1487,6 +1487,39 @@ def fetchRspamdSettings(request): 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: + pass + 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(' ') + 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 + + + + final_dic = {'fetchStatus': 1, 'installed': 1, 'enabled': enabled, @@ -1499,7 +1532,12 @@ def fetchRspamdSettings(request): 'smtpd_milters': smtpd_milters, 'non_smtpd_milters': non_smtpd_milters, 'read_servers': read_servers, - 'write_servers': write_servers + 'write_servers': write_servers, + 'clamav_Debug': clamav_Debug, + 'LogFile': LogFile, + 'TCPAddr': TCPAddr, + 'TCPSocket': TCPSocket, + } @@ -1624,6 +1662,44 @@ def saveRedisConfigurations(request): 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") @@ -1716,6 +1792,62 @@ def uninstallStatusRspamd(request): 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) + 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): diff --git a/filemanager/static/filemanager/js/fileManager.js b/filemanager/static/filemanager/js/fileManager.js index 4a7d49354..a7f9447c0 100755 --- a/filemanager/static/filemanager/js/fileManager.js +++ b/filemanager/static/filemanager/js/fileManager.js @@ -759,8 +759,8 @@ fileManager.controller('fileManagerCtrl', function ($scope, $http, FileUploader, $scope.getFileContents = function () { - console.log("selectedfile"+ allFilesAndFolders) - console.log("currentpath"+ $scope.currentRPath) + // console.log("selectedfile"+ allFilesAndFolders) + // console.log("currentpath"+ $scope.currentRPath) var completePathForFile = $scope.currentRPath + "/" + allFilesAndFolders[0]; diff --git a/plogical/mailUtilities.py b/plogical/mailUtilities.py index 1d7f18d9d..efa63231f 100755 --- a/plogical/mailUtilities.py +++ b/plogical/mailUtilities.py @@ -679,7 +679,6 @@ FixStaleSocket true LocalSocketMode 666 ScanMail true ScanArchive true -Debug false #LogFile /var/log/clamd.scan/clamav.log """ writeToFile = open('/etc/clamd.d/scan.conf', 'w') @@ -975,6 +974,57 @@ LogFile /var/log/clamav/clamav.log str((msg) + " [changeRedisxConfig]") print(0, str(msg)) return [0, str(msg) + " [changeRedisxConfig]"] + + @staticmethod + def changeclamavConfig(install, changeclamavConfig): + try: + tempfilepath = "/home/cyberpanel/saveclamavConfigurations" + file = open(tempfilepath, "r") + jsondata1 = file.read() + jsondata = json.loads(jsondata1) + file.close() + LogFile= jsondata['LogFile'] + TCPAddr= jsondata['TCPAddr'] + TCPSocket= jsondata['TCPSocket'] + clamav_Debug= jsondata['clamav_Debug'] + + if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8: + pass + elif ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20: + clamavconfpath = "/etc/clamav/clamd.conf" + f = open(clamavconfpath, "r") + dataa = f.read() + f.close() + data = dataa.splitlines() + + writeDataToFile = open(clamavconfpath, "w") + for i in data: + if i.find('TCPSocket') > -1: + newitem = 'TCPSocket %s' % TCPSocket + writeDataToFile.writelines(newitem + '\n') + elif i.find('TCPAddr') > -1: + newitem = 'TCPAddr %s' % TCPAddr + writeDataToFile.writelines(newitem + '\n') + elif i.find('LogFile') > -1: + newitem = 'LogFile %s' % LogFile + writeDataToFile.writelines(newitem + '\n') + elif i.find('Debug =') > -1: + if clamav_Debug == True: + newitem = 'Debug true' + writeDataToFile.writelines(newitem + '\n') + elif clamav_Debug == False: + newitem = 'Debug false' + writeDataToFile.writelines(newitem + '\n') + else: + writeDataToFile.writelines(i + '\n') + + + return 1, 'None' + except BaseException as msg: + logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[changeclamavConfig]") + str((msg) + " [changeclamavConfig]") + print(0, str(msg)) + return [0, str(msg) + " [changeclamavConfig]"] @staticmethod def installMailScanner(install, SpamAssassin): try: @@ -2162,6 +2212,8 @@ def main(): mailUtilities.changePostfixConfig("install", "changePostfixConfig") elif args.function == 'changeRedisxConfig': mailUtilities.changeRedisxConfig("install", "changeRedisxConfig") + elif args.function == 'changeclamavConfig': + mailUtilities.changeclamavConfig("install", "changeclamavConfig") elif args.function == 'AfterEffects': mailUtilities.AfterEffects(args.domain) elif args.function == "ResetEmailConfigurations":