mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2026-02-28 01:10:44 +01:00
cloudapi: updates in cloudapi
This commit is contained in:
@@ -359,27 +359,32 @@ class CloudManager:
|
||||
try:
|
||||
statusFile = self.data['statusFile']
|
||||
statusData = open(statusFile, 'r').readlines()
|
||||
lastLine = statusData[-1]
|
||||
|
||||
if lastLine.find('[200]') > -1:
|
||||
command = 'sudo rm -f ' + statusFile
|
||||
ProcessUtilities.executioner(command)
|
||||
data_ret = {'status': 1, 'abort': 1, 'installationProgress': "100", 'currentStatus': lastLine}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
elif lastLine.find('[404]') > -1:
|
||||
data_ret = {'status': 0, 'abort': 1, 'installationProgress': "0", 'error_message': lastLine}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
else:
|
||||
progress = lastLine.split(',')
|
||||
currentStatus = progress[0]
|
||||
try:
|
||||
installationProgress = progress[1]
|
||||
except:
|
||||
installationProgress = 0
|
||||
data_ret = {'status': 1, 'abort': 0, 'installationProgress': installationProgress,
|
||||
'currentStatus': currentStatus}
|
||||
try:
|
||||
lastLine = statusData[-1]
|
||||
if lastLine.find('[200]') > -1:
|
||||
command = 'rm -f ' + statusFile
|
||||
ProcessUtilities.executioner(command)
|
||||
data_ret = {'status': 1, 'abort': 1, 'installationProgress': "100", 'currentStatus': lastLine}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
elif lastLine.find('[404]') > -1:
|
||||
data_ret = {'status': 0, 'abort': 1, 'installationProgress': "0", 'error_message': lastLine}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
else:
|
||||
progress = lastLine.split(',')
|
||||
currentStatus = progress[0]
|
||||
try:
|
||||
installationProgress = progress[1].rstrip('\n')
|
||||
except:
|
||||
installationProgress = 0
|
||||
data_ret = {'status': 1, 'abort': 0, 'installationProgress': installationProgress,
|
||||
'currentStatus': currentStatus}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
except IndexError:
|
||||
data_ret = {'status': 1, 'abort': 0, 'installationProgress': 0,
|
||||
'currentStatus': 'Working..'}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
@@ -1462,4 +1467,174 @@ class CloudManager:
|
||||
request.session['userID'] = self.admin.pk
|
||||
return getUsageData(request)
|
||||
except BaseException as msg:
|
||||
return self.ajaxPre(0, str(msg))
|
||||
return self.ajaxPre(0, str(msg))
|
||||
|
||||
def RunServerLevelEmailChecks(self):
|
||||
try:
|
||||
|
||||
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
|
||||
reportFile = "/home/cyberpanel/" + str(randint(1000, 9999))
|
||||
|
||||
extraArgs = {'tempStatusPath': tempStatusPath, 'reportFile': reportFile}
|
||||
|
||||
background = MailServerManager(None, 'RunServerLevelEmailChecks', extraArgs)
|
||||
background.start()
|
||||
|
||||
final_dic = {'status': 1, 'tempStatusPath': tempStatusPath, 'reportFile': reportFile}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
except BaseException as msg:
|
||||
return self.ajaxPre(0, str(msg))
|
||||
|
||||
def ReadReport(self):
|
||||
try:
|
||||
reportFile = self.data['reportFile']
|
||||
reportContent = open(reportFile, 'r').read()
|
||||
|
||||
data_ret = {'status': 1, 'reportContent': reportContent}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
except BaseException as msg:
|
||||
data_ret = {'status': 0, 'abort': 0, 'installationProgress': "0", 'errorMessage': str(msg)}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
def ResetEmailConfigurations(self):
|
||||
try:
|
||||
|
||||
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
|
||||
|
||||
writeToFile = open(tempStatusPath, 'w')
|
||||
writeToFile.write('Starting..,0')
|
||||
writeToFile.close()
|
||||
|
||||
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/mailServer/mailserverManager.py"
|
||||
execPath = execPath + ' ResetEmailConfigurations --tempStatusPath %s' % (tempStatusPath)
|
||||
|
||||
ProcessUtilities.popenExecutioner(execPath)
|
||||
|
||||
final_dic = {'status': 1, 'tempStatusPath': tempStatusPath}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
except BaseException as msg:
|
||||
return self.ajaxPre(0, str(msg))
|
||||
|
||||
def fetchAllSites(self):
|
||||
try:
|
||||
currentACL = ACLManager.loadedACL(self.admin.pk)
|
||||
websites = ACLManager.findAllWebsites(currentACL, self.admin.pk)
|
||||
|
||||
final_dic = {'status': 1, 'websites': websites}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
except BaseException as msg:
|
||||
return self.ajaxPre(0, str(msg))
|
||||
|
||||
def debugEmailForSite(self):
|
||||
try:
|
||||
|
||||
websiteName = self.data['websiteName']
|
||||
result = MailServerManager(None, 'debugEmailForSite', None).debugEmailForSite(websiteName)
|
||||
|
||||
if result[0]:
|
||||
final_dic = {'error_message': result[1], 'status': 1}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
else:
|
||||
final_dic = {'error_message': result[1], 'status': 0}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
except BaseException as msg:
|
||||
return self.ajaxPre(0, str(msg))
|
||||
|
||||
def fixMailSSL(self, request):
|
||||
try:
|
||||
|
||||
request.session['userID'] = self.admin.pk
|
||||
msM = MailServerManager(request)
|
||||
return msM.fixMailSSL(self.data)
|
||||
|
||||
except BaseException as msg:
|
||||
return self.ajaxPre(0, str(msg))
|
||||
|
||||
def ReadReportFTP(self):
|
||||
try:
|
||||
command = 'ps aux'
|
||||
result = ProcessUtilities.outputExecutioner(command)
|
||||
|
||||
FTP = 1
|
||||
if result.find('pure-ftpd') == -1:
|
||||
FTP = 0
|
||||
|
||||
data_ret = {'status': 1, 'FTP': FTP}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
except BaseException as msg:
|
||||
data_ret = {'status': 0, 'abort': 0, 'installationProgress': "0", 'errorMessage': str(msg)}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
def ResetFTPConfigurations(self):
|
||||
try:
|
||||
|
||||
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
|
||||
|
||||
writeToFile = open(tempStatusPath, 'w')
|
||||
writeToFile.write('Starting..,0')
|
||||
writeToFile.close()
|
||||
|
||||
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/ftp/ftpManager.py"
|
||||
execPath = execPath + ' ResetFTPConfigurations --tempStatusPath %s' % (tempStatusPath)
|
||||
|
||||
ProcessUtilities.popenExecutioner(execPath)
|
||||
|
||||
final_dic = {'status': 1, 'tempStatusPath': tempStatusPath}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
except BaseException as msg:
|
||||
return self.ajaxPre(0, str(msg))
|
||||
|
||||
def ReadReportDNS(self):
|
||||
try:
|
||||
command = 'ps aux'
|
||||
result = ProcessUtilities.outputExecutioner(command)
|
||||
|
||||
DNS = 1
|
||||
if result.find('pdns_server --guardian=no') == -1:
|
||||
DNS = 0
|
||||
|
||||
data_ret = {'status': 1, 'DNS': DNS}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
except BaseException as msg:
|
||||
data_ret = {'status': 0, 'abort': 0, 'installationProgress': "0", 'errorMessage': str(msg)}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
def ResetDNSConfigurations(self):
|
||||
try:
|
||||
|
||||
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
|
||||
|
||||
writeToFile = open(tempStatusPath, 'w')
|
||||
writeToFile.write('Starting..,0')
|
||||
writeToFile.close()
|
||||
|
||||
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/dns/dnsManager.py"
|
||||
execPath = execPath + ' ResetDNSConfigurations --tempStatusPath %s' % (tempStatusPath)
|
||||
|
||||
ProcessUtilities.popenExecutioner(execPath)
|
||||
|
||||
final_dic = {'status': 1, 'tempStatusPath': tempStatusPath}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
except BaseException as msg:
|
||||
return self.ajaxPre(0, str(msg))
|
||||
|
||||
@@ -16,7 +16,6 @@ def router(request):
|
||||
serverUserName = data['serverUserName']
|
||||
admin = Administrator.objects.get(userName=serverUserName)
|
||||
|
||||
|
||||
cm = CloudManager(data, admin)
|
||||
|
||||
if admin.api == 0:
|
||||
@@ -32,6 +31,26 @@ def router(request):
|
||||
|
||||
if controller == 'verifyLogin':
|
||||
return cm.verifyLogin(request)[1]
|
||||
elif controller == 'RunServerLevelEmailChecks':
|
||||
return cm.RunServerLevelEmailChecks()
|
||||
elif controller == 'ReadReport':
|
||||
return cm.ReadReport()
|
||||
elif controller == 'ResetEmailConfigurations':
|
||||
return cm.ResetEmailConfigurations()
|
||||
elif controller == 'fetchAllSites':
|
||||
return cm.fetchAllSites()
|
||||
elif controller == 'debugEmailForSite':
|
||||
return cm.debugEmailForSite()
|
||||
elif controller == 'fixMailSSL':
|
||||
return cm.fixMailSSL(request)
|
||||
elif controller == 'ReadReportFTP':
|
||||
return cm.ReadReportFTP()
|
||||
elif controller == 'ResetFTPConfigurations':
|
||||
return cm.ResetFTPConfigurations()
|
||||
elif controller == 'ReadReportDNS':
|
||||
return cm.ReadReportDNS()
|
||||
elif controller == 'ResetDNSConfigurations':
|
||||
return cm.ResetDNSConfigurations()
|
||||
elif controller == 'fetchWebsites':
|
||||
return cm.fetchWebsites()
|
||||
elif controller == 'fetchWebsiteDataJSON':
|
||||
@@ -316,6 +335,7 @@ def access(request):
|
||||
try:
|
||||
serverUserName = request.GET.get('serverUserName')
|
||||
token = request.GET.get('token')
|
||||
redirectFinal = request.GET.get('redirect')
|
||||
|
||||
admin = Administrator.objects.get(userName=serverUserName)
|
||||
|
||||
@@ -326,7 +346,11 @@ def access(request):
|
||||
request.session['userID'] = admin.pk
|
||||
from django.shortcuts import redirect
|
||||
from baseTemplate.views import renderBase
|
||||
return redirect(renderBase)
|
||||
if redirectFinal == None:
|
||||
return redirect(renderBase)
|
||||
else:
|
||||
from django.shortcuts import redirect
|
||||
return redirect(redirectFinal)
|
||||
else:
|
||||
return HttpResponse('Unauthorized access.')
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
#!/usr/local/CyberCP/bin/python
|
||||
import argparse
|
||||
import errno
|
||||
import os.path
|
||||
import sys
|
||||
import django
|
||||
@@ -8,20 +10,27 @@ django.setup()
|
||||
from django.shortcuts import render
|
||||
from django.http import HttpResponse
|
||||
import json
|
||||
from plogical.dnsUtilities import DNS
|
||||
from loginSystem.models import Administrator
|
||||
try:
|
||||
from plogical.dnsUtilities import DNS
|
||||
from loginSystem.models import Administrator
|
||||
from .models import Domains,Records
|
||||
from plogical.mailUtilities import mailUtilities
|
||||
except:
|
||||
pass
|
||||
import os
|
||||
from .models import Domains,Records
|
||||
from re import match,I,M
|
||||
from plogical.mailUtilities import mailUtilities
|
||||
from plogical.acl import ACLManager
|
||||
import CloudFlare
|
||||
import re
|
||||
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
|
||||
import plogical.CyberCPLogFileWriter as logging
|
||||
from plogical.processUtilities import ProcessUtilities
|
||||
|
||||
class DNSManager:
|
||||
defaultNameServersPath = '/home/cyberpanel/defaultNameservers'
|
||||
|
||||
def __init__(self, extraArgs=None):
|
||||
self.extraArgs = extraArgs
|
||||
|
||||
def loadCFKeys(self):
|
||||
cfFile = '%s%s' % (DNS.CFPath, self.admin.userName)
|
||||
data = open(cfFile, 'r').readlines()
|
||||
@@ -1139,4 +1148,184 @@ class DNSManager:
|
||||
except BaseException as msg:
|
||||
final_dic = {'status': 0, 'delete_status': 0, 'error_message': str(msg)}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
def installPowerDNS(self):
|
||||
try:
|
||||
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
|
||||
|
||||
command = 'systemctl stop systemd-resolved'
|
||||
ProcessUtilities.executioner(command)
|
||||
command = 'systemctl disable systemd-resolved.service'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
try:
|
||||
os.rename('/etc/resolv.conf', 'etc/resolved.conf')
|
||||
except OSError as e:
|
||||
try:
|
||||
os.remove('/etc/resolv.conf')
|
||||
except OSError as e1:
|
||||
pass
|
||||
|
||||
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
|
||||
|
||||
command = 'DEBIAN_FRONTEND=noninteractive apt-get -y remove pdns-server pdns-backend-mysql -y'
|
||||
os.system(command)
|
||||
|
||||
command = "DEBIAN_FRONTEND=noninteractive apt-get -y install pdns-server pdns-backend-mysql"
|
||||
os.system(command)
|
||||
return 1
|
||||
else:
|
||||
|
||||
command = 'yum -y remove pdns pdns-backend-mysql'
|
||||
os.system(command)
|
||||
|
||||
command = 'yum -y install pdns pdns-backend-mysql'
|
||||
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
return 1
|
||||
|
||||
except BaseException as msg:
|
||||
return 0
|
||||
|
||||
def installPowerDNSConfigurations(self, mysqlPassword):
|
||||
try:
|
||||
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.cent8 or ProcessUtilities.decideDistro() == ProcessUtilities.centos:
|
||||
dnsPath = "/etc/pdns/pdns.conf"
|
||||
else:
|
||||
dnsPath = "/etc/powerdns/pdns.conf"
|
||||
|
||||
import shutil
|
||||
|
||||
if os.path.exists(dnsPath):
|
||||
os.remove(dnsPath)
|
||||
shutil.copy("/usr/local/CyberCP/install/dns-one/pdns.conf", dnsPath)
|
||||
else:
|
||||
shutil.copy("/usr/local/CyberCP/install/dns-one/pdns.conf", dnsPath)
|
||||
|
||||
data = open(dnsPath, "r").readlines()
|
||||
|
||||
writeDataToFile = open(dnsPath, "w")
|
||||
|
||||
dataWritten = "gmysql-password=" + mysqlPassword + "\n"
|
||||
|
||||
for items in data:
|
||||
if items.find("gmysql-password") > -1:
|
||||
writeDataToFile.writelines(dataWritten)
|
||||
else:
|
||||
writeDataToFile.writelines(items)
|
||||
|
||||
writeDataToFile.close()
|
||||
|
||||
|
||||
if self.remotemysql == 'ON':
|
||||
command = "sed -i 's|gmysql-host=localhost|gmysql-host=%s|g' %s" % (self.mysqlhost, dnsPath)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "sed -i 's|gmysql-port=3306|gmysql-port=%s|g' %s" % (self.mysqlport, dnsPath)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
return 1
|
||||
except IOError as msg:
|
||||
return 0
|
||||
|
||||
def startPowerDNS(self):
|
||||
|
||||
############## Start PowerDNS ######################
|
||||
|
||||
command = 'systemctl enable pdns'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'systemctl start pdns'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
return 1
|
||||
|
||||
def ResetDNSConfigurations(self):
|
||||
try:
|
||||
|
||||
### Check if remote or local mysql
|
||||
|
||||
passFile = "/etc/cyberpanel/mysqlPassword"
|
||||
|
||||
try:
|
||||
jsonData = json.loads(ProcessUtilities.outputExecutioner('cat %s' % (passFile)))
|
||||
|
||||
self.mysqluser = jsonData['mysqluser']
|
||||
self.mysqlpassword = jsonData['mysqlpassword']
|
||||
self.mysqlport = jsonData['mysqlport']
|
||||
self.mysqlhost = jsonData['mysqlhost']
|
||||
self.remotemysql = 'ON'
|
||||
|
||||
if self.mysqlhost.find('rds.amazon') > -1:
|
||||
self.RDS = 1
|
||||
|
||||
## Also set localhost to this server
|
||||
|
||||
ipFile = "/etc/cyberpanel/machineIP"
|
||||
f = open(ipFile)
|
||||
ipData = f.read()
|
||||
ipAddressLocal = ipData.split('\n', 1)[0]
|
||||
|
||||
self.LOCALHOST = ipAddressLocal
|
||||
except BaseException as msg:
|
||||
self.remotemysql = 'OFF'
|
||||
|
||||
if os.path.exists(ProcessUtilities.debugPath):
|
||||
logging.CyberCPLogFileWriter.writeToFile('%s. [setupConnection:75]' % (str(msg)))
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Removing and re-installing DNS..,5')
|
||||
|
||||
if self.installPowerDNS() == 0:
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'],
|
||||
'installPowerDNS failed. [404].')
|
||||
return 0
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Resetting configurations..,40')
|
||||
|
||||
import sys
|
||||
sys.path.append('/usr/local/CyberCP')
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
|
||||
from CyberCP import settings
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Configurations reset..,70')
|
||||
|
||||
if self.installPowerDNSConfigurations(settings.DATABASES['default']['PASSWORD']) == 0:
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'installPowerDNSConfigurations failed. [404].')
|
||||
return 0
|
||||
|
||||
if self.startPowerDNS() == 0:
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'],
|
||||
'startPowerDNS failed. [404].')
|
||||
return 0
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Fixing permissions..,90')
|
||||
|
||||
from mailServer.mailserverManager import MailServerManager
|
||||
MailServerManager(None, None, None).fixCyberPanelPermissions()
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Completed [200].')
|
||||
|
||||
except BaseException as msg:
|
||||
final_dic = {'status': 0, 'error_message': str(msg)}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
def main():
|
||||
|
||||
parser = argparse.ArgumentParser(description='CyberPanel')
|
||||
parser.add_argument('function', help='Specify a function to call!')
|
||||
parser.add_argument('--tempStatusPath', help='Path of temporary status file.')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.function == "ResetDNSConfigurations":
|
||||
extraArgs = {'tempStatusPath': args.tempStatusPath}
|
||||
ftp = DNSManager(extraArgs)
|
||||
ftp.ResetDNSConfigurations()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -8,18 +8,28 @@ django.setup()
|
||||
import json
|
||||
from django.shortcuts import render,redirect
|
||||
from django.http import HttpResponse
|
||||
from .models import Users
|
||||
from loginSystem.models import Administrator
|
||||
try:
|
||||
from .models import Users
|
||||
from loginSystem.models import Administrator
|
||||
except:
|
||||
pass
|
||||
import plogical.CyberCPLogFileWriter as logging
|
||||
from loginSystem.views import loadLoginPage
|
||||
from websiteFunctions.models import Websites
|
||||
from plogical.ftpUtilities import FTPUtilities
|
||||
try:
|
||||
from loginSystem.views import loadLoginPage
|
||||
from websiteFunctions.models import Websites
|
||||
from plogical.ftpUtilities import FTPUtilities
|
||||
from plogical.acl import ACLManager
|
||||
except:
|
||||
pass
|
||||
import os
|
||||
from plogical.acl import ACLManager
|
||||
|
||||
from plogical.processUtilities import ProcessUtilities
|
||||
import argparse
|
||||
|
||||
class FTPManager:
|
||||
def __init__(self, request):
|
||||
def __init__(self, request, extraArgs = None):
|
||||
self.request = request
|
||||
self.extraArgs = extraArgs
|
||||
|
||||
def loadFTPHome(self):
|
||||
try:
|
||||
@@ -285,4 +295,258 @@ class FTPManager:
|
||||
except BaseException as msg:
|
||||
data_ret = {'status': 0, 'changePasswordStatus': 0, 'error_message': str(msg)}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
def installPureFTPD(self):
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
|
||||
|
||||
command = 'DEBIAN_FRONTEND=noninteractive apt remove pure-ftp* -y'
|
||||
os.system(command)
|
||||
|
||||
command = 'DEBIAN_FRONTEND=noninteractive apt install pure-ftpd-mysql -y'
|
||||
os.system(command)
|
||||
|
||||
command = 'DEBIAN_FRONTEND=noninteractive apt install pure-ftpd-mysql -y'
|
||||
os.system(command)
|
||||
|
||||
if ProcessUtilities.decideDistro() != ProcessUtilities.ubuntu20:
|
||||
command = 'wget https://rep.cyberpanel.net/pure-ftpd-common_1.0.47-3_all.deb'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'wget https://rep.cyberpanel.net/pure-ftpd-mysql_1.0.47-3_amd64.deb'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'dpkg --install --force-confold pure-ftpd-common_1.0.47-3_all.deb'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'dpkg --install --force-confold pure-ftpd-mysql_1.0.47-3_amd64.deb'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
elif ProcessUtilities.decideDistro() == ProcessUtilities.centos:
|
||||
|
||||
command = 'yum remove pure-ftp* -y'
|
||||
os.system(command)
|
||||
|
||||
command = "yum install -y pure-ftpd"
|
||||
ProcessUtilities.executioner(command)
|
||||
elif ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
|
||||
|
||||
command = 'yum remove pure-ftp* -y'
|
||||
os.system(command)
|
||||
|
||||
command = 'dnf install pure-ftpd -y'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
####### Install pureftpd to system startup
|
||||
|
||||
def pureFTPDServiceName():
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
|
||||
return 'pure-ftpd-mysql'
|
||||
return 'pure-ftpd'
|
||||
|
||||
command = "systemctl enable " + pureFTPDServiceName()
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
###### FTP Groups and user settings settings
|
||||
|
||||
command = 'groupadd -g 2001 ftpgroup'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
return 1
|
||||
|
||||
def startPureFTPD(self):
|
||||
############## Start pureftpd ######################
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
|
||||
command = 'systemctl start pure-ftpd-mysql'
|
||||
else:
|
||||
command = 'systemctl start pure-ftpd'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
return 1
|
||||
|
||||
def installPureFTPDConfigurations(self, mysqlPassword):
|
||||
try:
|
||||
## setup ssl for ftp
|
||||
|
||||
try:
|
||||
os.mkdir("/etc/ssl/private")
|
||||
except:
|
||||
pass
|
||||
|
||||
if (ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8) or (
|
||||
ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20 and ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu):
|
||||
command = 'openssl req -newkey rsa:1024 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem'
|
||||
else:
|
||||
command = 'openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem'
|
||||
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
import shutil
|
||||
|
||||
ftpdPath = "/etc/pure-ftpd"
|
||||
|
||||
if os.path.exists(ftpdPath):
|
||||
shutil.rmtree(ftpdPath)
|
||||
shutil.copytree("/usr/local/CyberCP/install/pure-ftpd-one", ftpdPath)
|
||||
|
||||
else:
|
||||
shutil.copytree("/usr/local/CyberCP/install/pure-ftpd-one", ftpdPath)
|
||||
|
||||
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
|
||||
try:
|
||||
os.mkdir('/etc/pure-ftpd/conf')
|
||||
os.mkdir('/etc/pure-ftpd/auth')
|
||||
os.mkdir('/etc/pure-ftpd/db')
|
||||
except OSError as err:
|
||||
pass
|
||||
|
||||
data = open(ftpdPath + "/pureftpd-mysql.conf", "r").readlines()
|
||||
|
||||
writeDataToFile = open(ftpdPath + "/pureftpd-mysql.conf", "w")
|
||||
|
||||
dataWritten = "MYSQLPassword " + mysqlPassword + '\n'
|
||||
for items in data:
|
||||
if items.find("MYSQLPassword") > -1:
|
||||
writeDataToFile.writelines(dataWritten)
|
||||
else:
|
||||
writeDataToFile.writelines(items)
|
||||
|
||||
writeDataToFile.close()
|
||||
|
||||
ftpConfPath = '/etc/pure-ftpd/pureftpd-mysql.conf'
|
||||
|
||||
if self.remotemysql == 'ON':
|
||||
command = "sed -i 's|localhost|%s|g' %s" % (self.mysqlhost, ftpConfPath)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "sed -i 's|3306|%s|g' %s" % (self.mysqlport, ftpConfPath)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "sed -i 's|MYSQLSocket /var/lib/mysql/mysql.sock||g' %s" % (ftpConfPath)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
|
||||
|
||||
if os.path.exists('/etc/pure-ftpd/db/mysql.conf'):
|
||||
os.remove('/etc/pure-ftpd/db/mysql.conf')
|
||||
shutil.copy(ftpdPath + "/pureftpd-mysql.conf", '/etc/pure-ftpd/db/mysql.conf')
|
||||
else:
|
||||
shutil.copy(ftpdPath + "/pureftpd-mysql.conf", '/etc/pure-ftpd/db/mysql.conf')
|
||||
|
||||
import subprocess
|
||||
command = 'echo 1 > /etc/pure-ftpd/conf/TLS'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'echo %s > /etc/pure-ftpd/conf/ForcePassiveIP' % (self.publicip)
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'echo "40110 40210" > /etc/pure-ftpd/conf/PassivePortRange'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'echo "no" > /etc/pure-ftpd/conf/UnixAuthentication'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'echo "/etc/pure-ftpd/db/mysql.conf" > /etc/pure-ftpd/conf/MySQLConfigFile'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'ln -s /etc/pure-ftpd/conf/MySQLConfigFile /etc/pure-ftpd/auth/30mysql'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'ln -s /etc/pure-ftpd/conf/UnixAuthentication /etc/pure-ftpd/auth/65unix'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'systemctl restart pure-ftpd-mysql.service'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
return 1
|
||||
|
||||
except IOError as msg:
|
||||
return 0
|
||||
|
||||
def ResetFTPConfigurations(self):
|
||||
try:
|
||||
### Check if remote or local mysql
|
||||
|
||||
passFile = "/etc/cyberpanel/mysqlPassword"
|
||||
|
||||
try:
|
||||
jsonData = json.loads(ProcessUtilities.outputExecutioner('cat %s' % (passFile)))
|
||||
|
||||
self.mysqluser = jsonData['mysqluser']
|
||||
self.mysqlpassword = jsonData['mysqlpassword']
|
||||
self.mysqlport = jsonData['mysqlport']
|
||||
self.mysqlhost = jsonData['mysqlhost']
|
||||
self.remotemysql = 'ON'
|
||||
|
||||
if self.mysqlhost.find('rds.amazon') > -1:
|
||||
self.RDS = 1
|
||||
|
||||
## Also set localhost to this server
|
||||
|
||||
ipFile = "/etc/cyberpanel/machineIP"
|
||||
f = open(ipFile)
|
||||
ipData = f.read()
|
||||
ipAddressLocal = ipData.split('\n', 1)[0]
|
||||
|
||||
self.LOCALHOST = ipAddressLocal
|
||||
except BaseException as msg:
|
||||
self.remotemysql = 'OFF'
|
||||
|
||||
if os.path.exists(ProcessUtilities.debugPath):
|
||||
logging.CyberCPLogFileWriter.writeToFile('%s. [setupConnection:75]' % (str(msg)))
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Removing and re-installing FTP..,5')
|
||||
|
||||
if self.installPureFTPD() == 0:
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'],
|
||||
'installPureFTPD failed. [404].')
|
||||
return 0
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Resetting configurations..,40')
|
||||
|
||||
import sys
|
||||
sys.path.append('/usr/local/CyberCP')
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
|
||||
from CyberCP import settings
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Configurations reset..,70')
|
||||
|
||||
if self.installPureFTPDConfigurations(settings.DATABASES['default']['PASSWORD']) == 0:
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'installPureFTPDConfigurations failed. [404].')
|
||||
return 0
|
||||
|
||||
if self.startPureFTPD() == 0:
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'],
|
||||
'startPureFTPD failed. [404].')
|
||||
return 0
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Fixing permissions..,90')
|
||||
|
||||
from mailServer.mailserverManager import MailServerManager
|
||||
MailServerManager(None, None, None).fixCyberPanelPermissions()
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Completed [200].')
|
||||
|
||||
except BaseException as msg:
|
||||
final_dic = {'status': 0, 'error_message': str(msg)}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
def main():
|
||||
|
||||
parser = argparse.ArgumentParser(description='CyberPanel')
|
||||
parser.add_argument('function', help='Specify a function to call!')
|
||||
parser.add_argument('--tempStatusPath', help='Path of temporary status file.')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.function == "ResetFTPConfigurations":
|
||||
extraArgs = {'tempStatusPath': args.tempStatusPath}
|
||||
ftp = FTPManager(None, extraArgs)
|
||||
ftp.ResetFTPConfigurations()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1049,12 +1049,12 @@ $cfg['Servers'][$i]['LogoutURL'] = 'phpmyadminsignin.php?logout';
|
||||
|
||||
###############Getting SSL
|
||||
|
||||
command = 'openssl req -newkey rsa:1024 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/postfix/key.pem -out /etc/postfix/cert.pem'
|
||||
command = 'openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/postfix/key.pem -out /etc/postfix/cert.pem'
|
||||
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
||||
|
||||
##
|
||||
|
||||
command = 'openssl req -newkey rsa:1024 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/dovecot/key.pem -out /etc/dovecot/cert.pem'
|
||||
command = 'openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/dovecot/key.pem -out /etc/dovecot/cert.pem'
|
||||
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
||||
|
||||
# Cleanup config files for ubuntu
|
||||
|
||||
@@ -8,30 +8,51 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
|
||||
django.setup()
|
||||
from django.shortcuts import render,redirect
|
||||
from django.http import HttpResponse
|
||||
from .models import Domains,EUsers
|
||||
from loginSystem.views import loadLoginPage
|
||||
try:
|
||||
from .models import Domains,EUsers
|
||||
from loginSystem.views import loadLoginPage
|
||||
except:
|
||||
pass
|
||||
import plogical.CyberCPLogFileWriter as logging
|
||||
import json
|
||||
import shlex
|
||||
import subprocess
|
||||
from plogical.virtualHostUtilities import virtualHostUtilities
|
||||
from plogical.mailUtilities import mailUtilities
|
||||
try:
|
||||
from plogical.virtualHostUtilities import virtualHostUtilities
|
||||
from plogical.mailUtilities import mailUtilities
|
||||
except:
|
||||
pass
|
||||
import _thread
|
||||
from dns.models import Domains as dnsDomains
|
||||
from dns.models import Records as dnsRecords
|
||||
from mailServer.models import Forwardings, Pipeprograms
|
||||
from plogical.acl import ACLManager
|
||||
try:
|
||||
from dns.models import Domains as dnsDomains
|
||||
from dns.models import Records as dnsRecords
|
||||
from mailServer.models import Forwardings, Pipeprograms
|
||||
from plogical.acl import ACLManager
|
||||
from plogical.dnsUtilities import DNS
|
||||
from loginSystem.models import Administrator
|
||||
from websiteFunctions.models import Websites
|
||||
except:
|
||||
pass
|
||||
import os
|
||||
from plogical.dnsUtilities import DNS
|
||||
from loginSystem.models import Administrator
|
||||
from plogical.processUtilities import ProcessUtilities
|
||||
import bcrypt
|
||||
from websiteFunctions.models import Websites
|
||||
import threading as multi
|
||||
import argparse
|
||||
|
||||
class MailServerManager:
|
||||
class MailServerManager(multi.Thread):
|
||||
|
||||
def __init__(self, request = None):
|
||||
def __init__(self, request = None, function = None, extraArgs = None):
|
||||
multi.Thread.__init__(self)
|
||||
self.request = request
|
||||
self.function = function
|
||||
self.extraArgs = extraArgs
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
if self.function == 'RunServerLevelEmailChecks':
|
||||
self.RunServerLevelEmailChecks()
|
||||
except BaseException as msg:
|
||||
logging.CyberCPLogFileWriter.writeToFile(str(msg) + ' [MailServerManager.run]')
|
||||
|
||||
def loadEmailHome(self):
|
||||
try:
|
||||
@@ -40,6 +61,7 @@ class MailServerManager:
|
||||
except KeyError:
|
||||
return redirect(loadLoginPage)
|
||||
|
||||
|
||||
def createEmailAccount(self):
|
||||
try:
|
||||
userID = self.request.session['userID']
|
||||
@@ -59,7 +81,6 @@ class MailServerManager:
|
||||
except BaseException as msg:
|
||||
return redirect(loadLoginPage)
|
||||
|
||||
|
||||
def listEmails(self):
|
||||
try:
|
||||
userID = self.request.session['userID']
|
||||
@@ -226,14 +247,18 @@ class MailServerManager:
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
def fixMailSSL(self):
|
||||
def fixMailSSL(self, data = None):
|
||||
try:
|
||||
|
||||
userID = self.request.session['userID']
|
||||
currentACL = ACLManager.loadedACL(userID)
|
||||
|
||||
data = json.loads(self.request.body)
|
||||
selectedDomain = data['selectedDomain']
|
||||
if data == None:
|
||||
data = json.loads(self.request.body)
|
||||
selectedDomain = data['selectedDomain']
|
||||
else:
|
||||
selectedDomain = data['websiteName']
|
||||
|
||||
|
||||
admin = Administrator.objects.get(pk=userID)
|
||||
|
||||
@@ -818,3 +843,765 @@ class MailServerManager:
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
#######
|
||||
|
||||
def checkIfMailServerSSLIssued(self):
|
||||
postfixPath = '/etc/postfix/main.cf'
|
||||
|
||||
postFixData = ProcessUtilities.outputExecutioner('cat %s' % (postfixPath))
|
||||
|
||||
if postFixData.find('myhostname = server.example.com') > -1:
|
||||
return 0
|
||||
else:
|
||||
ipFile = "/etc/cyberpanel/machineIP"
|
||||
f = open(ipFile)
|
||||
ipData = f.read()
|
||||
ipAddress = ipData.split('\n', 1)[0]
|
||||
|
||||
command = 'openssl s_client -connect %s:465' % (ipAddress)
|
||||
result = ProcessUtilities.outputExecutioner(command)
|
||||
|
||||
if result.find('18 (self signed certificate)') > -1:
|
||||
return 0
|
||||
else:
|
||||
return 1
|
||||
|
||||
def RunServerLevelEmailChecks(self):
|
||||
try:
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Checking if MailServer SSL issued..,10')
|
||||
|
||||
reportFile = self.extraArgs['reportFile']
|
||||
|
||||
report = {}
|
||||
report['MailSSL'] = self.checkIfMailServerSSLIssued()
|
||||
|
||||
writeToFile = open(reportFile, 'w')
|
||||
writeToFile.write(json.dumps(report))
|
||||
writeToFile.close()
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Completed [200].')
|
||||
|
||||
except BaseException as msg:
|
||||
final_dic = {'installOpenDKIM': 0, 'error_message': str(msg)}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
def install_postfix_davecot(self):
|
||||
try:
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
|
||||
command = 'yum remove postfix -y'
|
||||
ProcessUtilities.executioner(command)
|
||||
elif ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
|
||||
command = 'apt-get -y remove postfix'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Re-installing postfix..,10')
|
||||
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.centos:
|
||||
command = 'yum install --enablerepo=gf-plus -y postfix3 postfix3-ldap postfix3-mysql postfix3-pcre'
|
||||
elif ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
|
||||
|
||||
command = 'dnf --nogpg install -y https://mirror.ghettoforge.org/distributions/gf/el/8/gf/x86_64/gf-release-8-11.gf.el8.noarch.rpm'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'dnf install --enablerepo=gf-plus postfix3 postfix3-mysql -y'
|
||||
else:
|
||||
import socket
|
||||
command = 'apt-get -y debconf-utils'
|
||||
ProcessUtilities.executioner(command)
|
||||
file_name = 'pf.unattend.text'
|
||||
pf = open(file_name, 'w')
|
||||
pf.write('postfix postfix/mailname string ' + str(socket.getfqdn() + '\n'))
|
||||
pf.write('postfix postfix/main_mailer_type string "Internet Site"\n')
|
||||
pf.close()
|
||||
command = 'debconf-set-selections ' + file_name
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'apt-get -y install postfix'
|
||||
# os.remove(file_name)
|
||||
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Re-installing Dovecot..,15')
|
||||
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
|
||||
pass
|
||||
else:
|
||||
command = 'apt-get -y install dovecot-imapd dovecot-pop3d postfix-mysql'
|
||||
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.centos:
|
||||
command = 'yum --enablerepo=gf-plus -y install dovecot23 dovecot23-mysql'
|
||||
elif ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
|
||||
command = 'dnf install --enablerepo=gf-plus dovecot23 dovecot23-mysql -y'
|
||||
else:
|
||||
command = 'apt-get -y install dovecot-mysql'
|
||||
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
|
||||
|
||||
command = 'curl https://repo.dovecot.org/DOVECOT-REPO-GPG | gpg --import'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'gpg --export ED409DA1 > /etc/apt/trusted.gpg.d/dovecot.gpg'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
debPath = '/etc/apt/sources.list.d/dovecot.list'
|
||||
writeToFile = open(debPath, 'w')
|
||||
writeToFile.write('deb https://repo.dovecot.org/ce-2.3-latest/ubuntu/bionic bionic main\n')
|
||||
writeToFile.close()
|
||||
|
||||
try:
|
||||
command = 'apt update -y'
|
||||
subprocess.call(command, shell=True)
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
command = 'DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical sudo apt-get -q -y -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" --only-upgrade install dovecot-mysql -y'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'dpkg --configure -a'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'apt --fix-broken install -y'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical sudo apt-get -q -y -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" --only-upgrade install dovecot-mysql -y'
|
||||
subprocess.call(command, shell=True)
|
||||
except:
|
||||
pass
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Postfix/dovecot reinstalled.,40')
|
||||
|
||||
except BaseException as msg:
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], '%s [install_postfix_davecot][404]' % (str(msg)), 10)
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
def setup_email_Passwords(self, mysqlPassword):
|
||||
try:
|
||||
|
||||
|
||||
mysql_virtual_domains = "/usr/local/CyberCP/install/email-configs-one/mysql-virtual_domains.cf"
|
||||
mysql_virtual_forwardings = "/usr/local/CyberCP/install/email-configs-one/mysql-virtual_forwardings.cf"
|
||||
mysql_virtual_mailboxes = "/usr/local/CyberCP/install/email-configs-one/mysql-virtual_mailboxes.cf"
|
||||
mysql_virtual_email2email = "/usr/local/CyberCP/install/email-configs-one/mysql-virtual_email2email.cf"
|
||||
davecotmysql = "/usr/local/CyberCP/install/email-configs-one/dovecot-sql.conf.ext"
|
||||
|
||||
### update password:
|
||||
|
||||
data = open(davecotmysql, "r").readlines()
|
||||
|
||||
writeDataToFile = open(davecotmysql, "w")
|
||||
|
||||
dataWritten = "connect = host=localhost dbname=cyberpanel user=cyberpanel password=" + mysqlPassword + " port=3306\n"
|
||||
|
||||
for items in data:
|
||||
if items.find("connect") > -1:
|
||||
writeDataToFile.writelines(dataWritten)
|
||||
else:
|
||||
writeDataToFile.writelines(items)
|
||||
|
||||
# if self.distro == ubuntu:
|
||||
# os.fchmod(writeDataToFile.fileno(), stat.S_IRUSR | stat.S_IWUSR)
|
||||
|
||||
writeDataToFile.close()
|
||||
|
||||
### update password:
|
||||
|
||||
data = open(mysql_virtual_domains, "r").readlines()
|
||||
|
||||
writeDataToFile = open(mysql_virtual_domains, "w")
|
||||
|
||||
dataWritten = "password = " + mysqlPassword + "\n"
|
||||
|
||||
for items in data:
|
||||
if items.find("password") > -1:
|
||||
writeDataToFile.writelines(dataWritten)
|
||||
else:
|
||||
writeDataToFile.writelines(items)
|
||||
|
||||
# if self.distro == ubuntu:
|
||||
# os.fchmod(writeDataToFile.fileno(), stat.S_IRUSR | stat.S_IWUSR)
|
||||
|
||||
writeDataToFile.close()
|
||||
|
||||
### update password:
|
||||
|
||||
data = open(mysql_virtual_forwardings, "r").readlines()
|
||||
|
||||
writeDataToFile = open(mysql_virtual_forwardings, "w")
|
||||
|
||||
dataWritten = "password = " + mysqlPassword + "\n"
|
||||
|
||||
for items in data:
|
||||
if items.find("password") > -1:
|
||||
writeDataToFile.writelines(dataWritten)
|
||||
else:
|
||||
writeDataToFile.writelines(items)
|
||||
|
||||
# if self.distro == ubuntu:
|
||||
# os.fchmod(writeDataToFile.fileno(), stat.S_IRUSR | stat.S_IWUSR)
|
||||
|
||||
writeDataToFile.close()
|
||||
|
||||
### update password:
|
||||
|
||||
data = open(mysql_virtual_mailboxes, "r").readlines()
|
||||
|
||||
writeDataToFile = open(mysql_virtual_mailboxes, "w")
|
||||
|
||||
dataWritten = "password = " + mysqlPassword + "\n"
|
||||
|
||||
for items in data:
|
||||
if items.find("password") > -1:
|
||||
writeDataToFile.writelines(dataWritten)
|
||||
else:
|
||||
writeDataToFile.writelines(items)
|
||||
|
||||
# if self.distro == ubuntu:
|
||||
# os.fchmod(writeDataToFile.fileno(), stat.S_IRUSR | stat.S_IWUSR)
|
||||
|
||||
writeDataToFile.close()
|
||||
|
||||
### update password:
|
||||
|
||||
data = open(mysql_virtual_email2email, "r").readlines()
|
||||
|
||||
writeDataToFile = open(mysql_virtual_email2email, "w")
|
||||
|
||||
dataWritten = "password = " + mysqlPassword + "\n"
|
||||
|
||||
for items in data:
|
||||
if items.find("password") > -1:
|
||||
writeDataToFile.writelines(dataWritten)
|
||||
else:
|
||||
writeDataToFile.writelines(items)
|
||||
|
||||
# if self.distro == ubuntu:
|
||||
# os.fchmod(writeDataToFile.fileno(), stat.S_IRUSR | stat.S_IWUSR)
|
||||
|
||||
writeDataToFile.close()
|
||||
|
||||
if self.remotemysql == 'ON':
|
||||
command = "sed -i 's|host=localhost|host=%s|g' %s" % (self.mysqlhost, davecotmysql)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "sed -i 's|port=3306|port=%s|g' %s" % (self.mysqlport, davecotmysql)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = "sed -i 's|localhost|%s:%s|g' %s" % (self.mysqlhost, self.mysqlport, mysql_virtual_domains)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "sed -i 's|localhost|%s:%s|g' %s" % (
|
||||
self.mysqlhost, self.mysqlport, mysql_virtual_forwardings)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "sed -i 's|localhost|%s:%s|g' %s" % (
|
||||
self.mysqlhost, self.mysqlport, mysql_virtual_mailboxes)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "sed -i 's|localhost|%s:%s|g' %s" % (
|
||||
self.mysqlhost, self.mysqlport, mysql_virtual_email2email)
|
||||
ProcessUtilities.executioner(command)
|
||||
except BaseException as msg:
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'],
|
||||
'%s [setup_email_Passwords][404]' % (str(msg)), 10)
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
def centos_lib_dir_to_ubuntu(self, filename, old, new):
|
||||
try:
|
||||
fd = open(filename, 'r')
|
||||
lines = fd.readlines()
|
||||
fd.close()
|
||||
fd = open(filename, 'w')
|
||||
centos_prefix = old
|
||||
ubuntu_prefix = new
|
||||
for line in lines:
|
||||
index = line.find(centos_prefix)
|
||||
if index != -1:
|
||||
line = line[:index] + ubuntu_prefix + line[index + len(centos_prefix):]
|
||||
fd.write(line)
|
||||
fd.close()
|
||||
except BaseException as msg:
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'],
|
||||
'%s [centos_lib_dir_to_ubuntu][404]' % (str(msg)), 10)
|
||||
|
||||
def setup_postfix_davecot_config(self):
|
||||
try:
|
||||
|
||||
mysql_virtual_domains = "/etc/postfix/mysql-virtual_domains.cf"
|
||||
mysql_virtual_forwardings = "/etc/postfix/mysql-virtual_forwardings.cf"
|
||||
mysql_virtual_mailboxes = "/etc/postfix/mysql-virtual_mailboxes.cf"
|
||||
mysql_virtual_email2email = "/etc/postfix/mysql-virtual_email2email.cf"
|
||||
main = "/etc/postfix/main.cf"
|
||||
master = "/etc/postfix/master.cf"
|
||||
davecot = "/etc/dovecot/dovecot.conf"
|
||||
davecotmysql = "/etc/dovecot/dovecot-sql.conf.ext"
|
||||
|
||||
if os.path.exists(mysql_virtual_domains):
|
||||
os.remove(mysql_virtual_domains)
|
||||
|
||||
if os.path.exists(mysql_virtual_forwardings):
|
||||
os.remove(mysql_virtual_forwardings)
|
||||
|
||||
if os.path.exists(mysql_virtual_mailboxes):
|
||||
os.remove(mysql_virtual_mailboxes)
|
||||
|
||||
if os.path.exists(mysql_virtual_email2email):
|
||||
os.remove(mysql_virtual_email2email)
|
||||
|
||||
if os.path.exists(main):
|
||||
os.remove(main)
|
||||
|
||||
if os.path.exists(master):
|
||||
os.remove(master)
|
||||
|
||||
if os.path.exists(davecot):
|
||||
os.remove(davecot)
|
||||
|
||||
if os.path.exists(davecotmysql):
|
||||
os.remove(davecotmysql)
|
||||
|
||||
###############Getting SSL
|
||||
|
||||
command = 'openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/postfix/key.pem -out /etc/postfix/cert.pem'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/dovecot/key.pem -out /etc/dovecot/cert.pem'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
# Cleanup config files for ubuntu
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
|
||||
self.centos_lib_dir_to_ubuntu("/usr/local/CyberCP/install/email-configs-one/master.cf", "/usr/libexec/", "/usr/lib/")
|
||||
self.centos_lib_dir_to_ubuntu("/usr/local/CyberCP/install/email-configs-one/main.cf", "/usr/libexec/postfix",
|
||||
"/usr/lib/postfix/sbin")
|
||||
|
||||
|
||||
########### Copy config files
|
||||
import shutil
|
||||
|
||||
shutil.copy("/usr/local/CyberCP/install/email-configs-one/mysql-virtual_domains.cf", "/etc/postfix/mysql-virtual_domains.cf")
|
||||
shutil.copy("/usr/local/CyberCP/install/email-configs-one/mysql-virtual_forwardings.cf",
|
||||
"/etc/postfix/mysql-virtual_forwardings.cf")
|
||||
shutil.copy("/usr/local/CyberCP/install/email-configs-one/mysql-virtual_mailboxes.cf", "/etc/postfix/mysql-virtual_mailboxes.cf")
|
||||
shutil.copy("/usr/local/CyberCP/install/email-configs-one/mysql-virtual_email2email.cf",
|
||||
"/etc/postfix/mysql-virtual_email2email.cf")
|
||||
shutil.copy("/usr/local/CyberCP/install/email-configs-one/main.cf", main)
|
||||
shutil.copy("/usr/local/CyberCP/install/email-configs-one/master.cf", master)
|
||||
shutil.copy("/usr/local/CyberCP/install/email-configs-one/dovecot.conf", davecot)
|
||||
shutil.copy("/usr/local/CyberCP/install/email-configs-one/dovecot-sql.conf.ext", davecotmysql)
|
||||
|
||||
|
||||
######################################## Permissions
|
||||
|
||||
command = 'chmod o= /etc/postfix/mysql-virtual_domains.cf'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'chmod o= /etc/postfix/mysql-virtual_forwardings.cf'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'chmod o= /etc/postfix/mysql-virtual_mailboxes.cf'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'chmod o= /etc/postfix/mysql-virtual_email2email.cf'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'chmod o= ' + main
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'chmod o= ' + master
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
#######################################
|
||||
|
||||
command = 'chgrp postfix /etc/postfix/mysql-virtual_domains.cf'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'chgrp postfix /etc/postfix/mysql-virtual_forwardings.cf'
|
||||
ProcessUtilities.executioner(command)
|
||||
##
|
||||
|
||||
command = 'chgrp postfix /etc/postfix/mysql-virtual_mailboxes.cf'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'chgrp postfix /etc/postfix/mysql-virtual_email2email.cf'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'chgrp postfix ' + main
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'chgrp postfix ' + master
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
######################################## users and groups
|
||||
|
||||
command = 'groupadd -g 5000 vmail'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'useradd -g vmail -u 5000 vmail -d /home/vmail -m'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
######################################## Further configurations
|
||||
|
||||
# hostname = socket.gethostname()
|
||||
|
||||
################################### Restart postix
|
||||
|
||||
command = 'systemctl enable postfix.service'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'systemctl start postfix.service'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
######################################## Permissions
|
||||
|
||||
command = 'chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'chmod o= /etc/dovecot/dovecot-sql.conf.ext'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
################################### Restart davecot
|
||||
|
||||
command = 'systemctl enable dovecot.service'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'systemctl start dovecot.service'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
##
|
||||
|
||||
command = 'systemctl restart postfix.service'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
## chaging permissions for main.cf
|
||||
|
||||
command = "chmod 755 " + main
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
|
||||
command = "mkdir -p /etc/pki/dovecot/private/"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "mkdir -p /etc/pki/dovecot/certs/"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "mkdir -p /etc/opendkim/keys/"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "sed -i 's/auth_mechanisms = plain/#auth_mechanisms = plain/g' /etc/dovecot/conf.d/10-auth.conf"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
## Ubuntu 18.10 ssl_dh for dovecot 2.3.2.1
|
||||
|
||||
if ProcessUtilities.ubuntu:
|
||||
dovecotConf = '/etc/dovecot/dovecot.conf'
|
||||
|
||||
data = open(dovecotConf, 'r').readlines()
|
||||
writeToFile = open(dovecotConf, 'w')
|
||||
for items in data:
|
||||
if items.find('ssl_key = <key.pem') > -1:
|
||||
writeToFile.writelines(items)
|
||||
writeToFile.writelines('ssl_dh = </usr/share/dovecot/dh.pem\n')
|
||||
else:
|
||||
writeToFile.writelines(items)
|
||||
writeToFile.close()
|
||||
|
||||
command = "systemctl restart dovecot"
|
||||
ProcessUtilities.executioner(command)
|
||||
except BaseException as msg:
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'],
|
||||
'%s [setup_postfix_davecot_config][404]' % (
|
||||
str(msg)), 10)
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
def fixCyberPanelPermissions(self):
|
||||
|
||||
###### fix Core CyberPanel permissions
|
||||
command = "find /usr/local/CyberCP -type d -exec chmod 0755 {} \;"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "find /usr/local/CyberCP -type f -exec chmod 0644 {} \;"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "chmod -R 755 /usr/local/CyberCP/bin"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
## change owner
|
||||
|
||||
command = "chown -R root:root /usr/local/CyberCP"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
########### Fix LSCPD
|
||||
|
||||
command = "find /usr/local/lscp -type d -exec chmod 0755 {} \;"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "find /usr/local/lscp -type f -exec chmod 0644 {} \;"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "chmod -R 755 /usr/local/lscp/bin"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "chmod -R 755 /usr/local/lscp/fcgi-bin"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "chown -R lscpd:lscpd /usr/local/CyberCP/public/phpmyadmin/tmp"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
## change owner
|
||||
|
||||
command = "chown -R root:root /usr/local/lscp"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "chown -R lscpd:lscpd /usr/local/lscp/cyberpanel/rainloop/data"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "chmod 700 /usr/local/CyberCP/cli/cyberPanel.py"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "chmod 700 /usr/local/CyberCP/plogical/upgradeCritical.py"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "chmod 755 /usr/local/CyberCP/postfixSenderPolicy/client.py"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "chmod 640 /usr/local/CyberCP/CyberCP/settings.py"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "chown root:cyberpanel /usr/local/CyberCP/CyberCP/settings.py"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
files = ['/etc/yum.repos.d/MariaDB.repo', '/etc/pdns/pdns.conf', '/etc/systemd/system/lscpd.service',
|
||||
'/etc/pure-ftpd/pure-ftpd.conf', '/etc/pure-ftpd/pureftpd-pgsql.conf',
|
||||
'/etc/pure-ftpd/pureftpd-mysql.conf', '/etc/pure-ftpd/pureftpd-ldap.conf',
|
||||
'/etc/dovecot/dovecot.conf', '/usr/local/lsws/conf/httpd_config.xml',
|
||||
'/usr/local/lsws/conf/modsec.conf', '/usr/local/lsws/conf/httpd.conf']
|
||||
|
||||
for items in files:
|
||||
command = 'chmod 644 %s' % (items)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
impFile = ['/etc/pure-ftpd/pure-ftpd.conf', '/etc/pure-ftpd/pureftpd-pgsql.conf',
|
||||
'/etc/pure-ftpd/pureftpd-mysql.conf', '/etc/pure-ftpd/pureftpd-ldap.conf',
|
||||
'/etc/dovecot/dovecot.conf', '/etc/pdns/pdns.conf', '/etc/pure-ftpd/db/mysql.conf',
|
||||
'/etc/powerdns/pdns.conf']
|
||||
|
||||
for items in impFile:
|
||||
command = 'chmod 600 %s' % (items)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'chmod 640 /etc/postfix/*.cf'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'chmod 644 /etc/postfix/main.cf'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'chmod 640 /etc/dovecot/*.conf'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'chmod 644 /etc/dovecot/dovecot.conf'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'chmod 640 /etc/dovecot/dovecot-sql.conf.ext'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'chmod 644 /etc/postfix/dynamicmaps.cf'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
fileM = ['/usr/local/lsws/FileManager/', '/usr/local/CyberCP/install/FileManager',
|
||||
'/usr/local/CyberCP/serverStatus/litespeed/FileManager', '/usr/local/lsws/Example/html/FileManager']
|
||||
|
||||
for items in fileM:
|
||||
try:
|
||||
import shutil
|
||||
shutil.rmtree(items)
|
||||
except:
|
||||
pass
|
||||
|
||||
command = 'chmod 755 /etc/pure-ftpd/'
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
command = 'chmod +x /usr/local/CyberCP/plogical/renew.py'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'chmod +x /usr/local/CyberCP/CLManager/CLPackages.py'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
clScripts = ['/usr/local/CyberCP/CLScript/panel_info.py', '/usr/local/CyberCP/CLScript/CloudLinuxPackages.py',
|
||||
'/usr/local/CyberCP/CLScript/CloudLinuxUsers.py',
|
||||
'/usr/local/CyberCP/CLScript/CloudLinuxDomains.py'
|
||||
, '/usr/local/CyberCP/CLScript/CloudLinuxResellers.py', '/usr/local/CyberCP/CLScript/CloudLinuxAdmins.py',
|
||||
'/usr/local/CyberCP/CLScript/CloudLinuxDB.py', '/usr/local/CyberCP/CLScript/UserInfo.py']
|
||||
|
||||
for items in clScripts:
|
||||
command = 'chmod +x %s' % (items)
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'chmod 600 /usr/local/CyberCP/plogical/adminPass.py'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'chmod 600 /etc/cagefs/exclude/cyberpanelexclude'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = "find /usr/local/CyberCP/ -name '*.pyc' -delete"
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.cent8:
|
||||
|
||||
command = 'chown root:pdns /etc/pdns/pdns.conf'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'chmod 640 /etc/pdns/pdns.conf'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'chmod 640 /usr/local/lscp/cyberpanel/logs/access.log'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
###
|
||||
|
||||
def ResetEmailConfigurations(self):
|
||||
try:
|
||||
### Check if remote or local mysql
|
||||
|
||||
passFile = "/etc/cyberpanel/mysqlPassword"
|
||||
|
||||
try:
|
||||
jsonData = json.loads(ProcessUtilities.outputExecutioner('cat %s' % (passFile)))
|
||||
|
||||
self.mysqluser = jsonData['mysqluser']
|
||||
self.mysqlpassword = jsonData['mysqlpassword']
|
||||
self.mysqlport = jsonData['mysqlport']
|
||||
self.mysqlhost = jsonData['mysqlhost']
|
||||
self.remotemysql = 'ON'
|
||||
|
||||
if self.mysqlhost.find('rds.amazon') > -1:
|
||||
self.RDS = 1
|
||||
|
||||
## Also set localhost to this server
|
||||
|
||||
ipFile = "/etc/cyberpanel/machineIP"
|
||||
f = open(ipFile)
|
||||
ipData = f.read()
|
||||
ipAddressLocal = ipData.split('\n', 1)[0]
|
||||
|
||||
self.LOCALHOST = ipAddressLocal
|
||||
|
||||
except BaseException as msg:
|
||||
self.remotemysql = 'OFF'
|
||||
|
||||
if os.path.exists(ProcessUtilities.debugPath):
|
||||
logging.CyberCPLogFileWriter.writeToFile('%s. [setupConnection:75]' % (str(msg)))
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Removing and re-installing postfix/dovecot..,5')
|
||||
|
||||
if self.install_postfix_davecot() == 0:
|
||||
return 0
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Resetting configurations..,40')
|
||||
|
||||
import sys
|
||||
sys.path.append('/usr/local/CyberCP')
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
|
||||
from CyberCP import settings
|
||||
|
||||
if self.setup_email_Passwords(settings.DATABASES['default']['PASSWORD']) == 0:
|
||||
return 0
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Configurations reset..,70')
|
||||
|
||||
if self.setup_postfix_davecot_config() == 0:
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'setup_postfix_davecot_config failed. [404].')
|
||||
return 0
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Fixing permissions..,90')
|
||||
|
||||
self.fixCyberPanelPermissions()
|
||||
|
||||
logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Completed [200].')
|
||||
|
||||
except BaseException as msg:
|
||||
final_dic = {'installOpenDKIM': 0, 'error_message': str(msg)}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
def debugEmailForSite(self, websiteName):
|
||||
|
||||
ipFile = "/etc/cyberpanel/machineIP"
|
||||
f = open(ipFile)
|
||||
ipData = f.read()
|
||||
ipAddress = ipData.split('\n', 1)[0]
|
||||
|
||||
try:
|
||||
import socket
|
||||
siteIPAddr = socket.gethostbyname('mail.%s' % (websiteName))
|
||||
|
||||
if siteIPAddr != ipAddress:
|
||||
return 0, 'mail.%s does not point to %s.' % (websiteName, ipAddress)
|
||||
except:
|
||||
return 0, 'mail.%s does not point to %s.' % (websiteName, ipAddress)
|
||||
|
||||
command = 'openssl s_client -connect mail.%s:993' % (websiteName)
|
||||
result = ProcessUtilities.outputExecutioner(command)
|
||||
|
||||
if result.find('18 (self signed certificate)') > -1:
|
||||
return 0, 'No valid SSL on port 993.'
|
||||
else:
|
||||
return 1, 'All checks are OK.'
|
||||
|
||||
def main():
|
||||
|
||||
parser = argparse.ArgumentParser(description='CyberPanel')
|
||||
parser.add_argument('function', help='Specifiy a function to call!')
|
||||
parser.add_argument('--tempStatusPath', help='Path of temporary status file.')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.function == "ResetEmailConfigurations":
|
||||
extraArgs = {'tempStatusPath': args.tempStatusPath}
|
||||
background = MailServerManager(None, 'ResetEmailConfigurations', extraArgs)
|
||||
background.ResetEmailConfigurations()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -290,7 +290,6 @@ class ProcessUtilities(multi.Thread):
|
||||
def customPoen(self):
|
||||
try:
|
||||
|
||||
|
||||
if type(self.extraArgs['command']) == str or type(self.extraArgs['command']) == bytes:
|
||||
command = self.extraArgs['command']
|
||||
else:
|
||||
|
||||
@@ -64,9 +64,12 @@ class virtualHostUtilities:
|
||||
childDomain = 'mail.%s' % (virtualHostName)
|
||||
childPath = '/home/%s/public_html/%s' % (virtualHostName, childDomain)
|
||||
|
||||
virtualHostUtilities.createDomain(virtualHostName, childDomain, 'PHP 7.2', childPath, 1, 0, 0,
|
||||
result = virtualHostUtilities.createDomain(virtualHostName, childDomain, 'PHP 7.2', childPath, 1, 0, 0,
|
||||
admin.userName, 0, "/home/cyberpanel/" + str(randint(1000, 9999)))
|
||||
|
||||
if result[0] == 0:
|
||||
sslUtilities.issueSSLForDomain(virtualHostName, admin.email, childPath)
|
||||
|
||||
## update dovecot conf to enable auto-discover
|
||||
|
||||
dovecotPath = '/etc/dovecot/dovecot.conf'
|
||||
@@ -74,18 +77,18 @@ class virtualHostUtilities:
|
||||
if os.path.exists(dovecotPath):
|
||||
dovecotContent = open(dovecotPath, 'r').read()
|
||||
|
||||
if dovecotContent.find(childDomain) == -1:
|
||||
if dovecotContent.find('/live/%s/' % (childDomain)) == -1:
|
||||
content = """\nlocal_name %s {
|
||||
ssl_cert = </etc/letsencrypt/live/%s/fullchain.pem
|
||||
ssl_key = </etc/letsencrypt/live/%s/privkey.pem
|
||||
ssl_cert = </etc/letsencrypt/live/%s/fullchain.pem
|
||||
ssl_key = </etc/letsencrypt/live/%s/privkey.pem
|
||||
}\n""" % (childDomain, childDomain, childDomain)
|
||||
|
||||
writeToFile = open(dovecotPath, 'a')
|
||||
writeToFile.write(content)
|
||||
writeToFile.close()
|
||||
|
||||
command = 'systemctl restart dovecot'
|
||||
ProcessUtilities.executioner(command)
|
||||
command = 'systemctl restart dovecot'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
### Update postfix configurations
|
||||
|
||||
@@ -99,13 +102,16 @@ class virtualHostUtilities:
|
||||
writeToFile.close()
|
||||
|
||||
postfixMapFile = '/etc/postfix/vmail_ssl.map'
|
||||
postfixMapFileContent = open(postfixMapFile, 'r').read()
|
||||
|
||||
mapContent = '%s /etc/letsencrypt/live/%s/privkey.pem /etc/letsencrypt/live/%s/fullchain.pem\n' % (
|
||||
childDomain, childDomain, childDomain)
|
||||
if postfixMapFileContent.find('/live/%s/' % (childDomain)) == -1:
|
||||
|
||||
writeToFile = open(postfixMapFile, 'a')
|
||||
writeToFile.write(mapContent)
|
||||
writeToFile.close()
|
||||
mapContent = '%s /etc/letsencrypt/live/%s/privkey.pem /etc/letsencrypt/live/%s/fullchain.pem\n' % (
|
||||
childDomain, childDomain, childDomain)
|
||||
|
||||
writeToFile = open(postfixMapFile, 'a')
|
||||
writeToFile.write(mapContent)
|
||||
writeToFile.close()
|
||||
|
||||
command = 'postmap -F hash:/etc/postfix/vmail_ssl.map'
|
||||
|
||||
|
||||
@@ -25,6 +25,11 @@ NOTHING = 0
|
||||
BUNDLE = 2
|
||||
EXPIRE = 3
|
||||
|
||||
### Version
|
||||
|
||||
VERSION = '2.0'
|
||||
BUILD = 4
|
||||
|
||||
def serverStatusHome(request):
|
||||
try:
|
||||
userID = request.session['userID']
|
||||
@@ -666,7 +671,6 @@ def topProcessesStatus(request):
|
||||
except:
|
||||
data['swapBuffCache'] = '%sMB' % ('0')
|
||||
|
||||
|
||||
## Processes
|
||||
|
||||
data['totalProcesses'] = processes[1]
|
||||
@@ -695,6 +699,33 @@ def topProcessesStatus(request):
|
||||
data['cacheSize'] = items.split(':')[1].strip(' ')
|
||||
break
|
||||
|
||||
ipFile = "/etc/cyberpanel/machineIP"
|
||||
f = open(ipFile)
|
||||
ipData = f.read()
|
||||
ipAddress = ipData.split('\n', 1)[0]
|
||||
|
||||
data['ipAddress'] = ipAddress
|
||||
data['CyberPanelVersion'] = 'v%s.%s' % (VERSION, str(BUILD))
|
||||
|
||||
if ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
|
||||
data['OS'] = 'Centos 8'
|
||||
elif ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
|
||||
data['OS'] = 'Ubuntu 20.04'
|
||||
elif ProcessUtilities.decideDistro() == ProcessUtilities.centos:
|
||||
data['OS'] = 'Centos 7'
|
||||
elif ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
|
||||
data['OS'] = 'Ubuntu 18.04'
|
||||
|
||||
data['Kernel'] = ProcessUtilities.outputExecutioner('uname -r')
|
||||
|
||||
import shutil
|
||||
|
||||
total, used, free = shutil.disk_usage("/")
|
||||
|
||||
data['TotalDisk'] = '%s GB' % (total // (2 ** 30))
|
||||
data['TotalDiskUsed'] = '%s GB' % (used // (2 ** 30))
|
||||
data['TotalDiskFree'] =' %s GB' % (free // (2 ** 30))
|
||||
|
||||
final_json = json.dumps(data)
|
||||
return HttpResponse(final_json)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user