mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2026-03-21 19:41:30 +01:00
Merge branch 'v2.3.3-dev' into stable
This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
|
||||
/* Utilities */
|
||||
|
||||
|
||||
|
||||
function getCookie(name) {
|
||||
var cookieValue = null;
|
||||
if (document.cookie && document.cookie !== '') {
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
<!-- HELPERS -->
|
||||
|
||||
{% with version="2.3.2.1" %}
|
||||
{% with version="2.3.2.2" %}
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="{% static 'baseTemplate/assets/finalBase/finalBase.css' %}">
|
||||
|
||||
@@ -105,6 +105,7 @@
|
||||
</script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/flot-charts@0.8.3/jquery.flot.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/jquery.flot@0.8.3/jquery.flot.time.js"></script>
|
||||
<script async src="https://js.stripe.com/v3/pricing-table.js"></script>
|
||||
|
||||
{% block header_scripts %}
|
||||
{% endblock %}
|
||||
@@ -274,7 +275,8 @@
|
||||
{# </div>#}
|
||||
{# </div>#}
|
||||
{# </div>#}
|
||||
<a class="header-btn" target="_blank" href="https://www.youtube.com/channel/UCS6sgUWEhaFl1TO238Ck0xw?sub_confirmation=1"
|
||||
<a class="header-btn" target="_blank"
|
||||
href="https://www.youtube.com/channel/UCS6sgUWEhaFl1TO238Ck0xw?sub_confirmation=1"
|
||||
title="{% trans 'Youtube Channel' %}">
|
||||
<i class="glyph-icon icon-youtube"></i>
|
||||
</a>
|
||||
@@ -300,12 +302,14 @@
|
||||
<ul id="sidebar-menu">
|
||||
<li class="header"><span>{% trans "Overview" %}</span></li>
|
||||
<li>
|
||||
<a id="sidebar-menu-item-server-ip-address" href="#" title="{% trans 'Server IP Address' %}">
|
||||
<a id="sidebar-menu-item-server-ip-address" href="#"
|
||||
title="{% trans 'Server IP Address' %}">
|
||||
<i class="glyph-icon tooltip-button icon-laptop" title="{% trans 'Server IP Address' %}"
|
||||
data-original-title=".icon-laptop"></i>
|
||||
<span style="color: #488a3f;font-weight: bold;">{{ ipAddress }}</span>
|
||||
</a>
|
||||
<a id="sidebar-menu-item-dashboard" href="{% url 'index' %}" title="{% trans 'Dashboard' %}">
|
||||
<a id="sidebar-menu-item-dashboard" href="{% url 'index' %}"
|
||||
title="{% trans 'Dashboard' %}">
|
||||
<i class="glyph-icon icon-dashboard"></i>
|
||||
<span>{% trans "Dashboard" %}</span>
|
||||
</a>
|
||||
@@ -394,17 +398,17 @@
|
||||
|
||||
<li id="sidebar-menu-item-websites">
|
||||
|
||||
<!-------------WordPress--------------------------->
|
||||
<!-------------WordPress--------------------------->
|
||||
<li>
|
||||
<a href="{% url 'loadWebsitesHome' %}" title="{% trans 'WordPress' %}">
|
||||
<div class="glyph-icon icon-wordpress" title="{% trans 'WordPress' %}"></div>
|
||||
<span>{% trans "WordPress" %}</span>
|
||||
</a>
|
||||
<div class="sidebar-submenu">
|
||||
<div class="sidebar-submenu">
|
||||
|
||||
<ul>
|
||||
{% if admin or createWebsite %}
|
||||
<li><a href="{% url 'createWordpress' %}"
|
||||
{% if admin or createWebsite %}
|
||||
<li><a href="{% url 'createWordpress' %}"
|
||||
title="{% trans 'Deploy WordPress' %}"><span>{% trans "Deploy WordPress" %}</span></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
@@ -434,7 +438,7 @@
|
||||
<div class="sidebar-submenu">
|
||||
|
||||
<ul>
|
||||
{% if admin or createWebsite %}
|
||||
{% if admin or createWebsite %}
|
||||
<li><a href="{% url 'createWebsite' %}"
|
||||
title="{% trans 'Create Website' %}"><span>{% trans "Create Website" %}</span></a>
|
||||
</li>
|
||||
@@ -621,9 +625,9 @@
|
||||
title="{% trans 'DKIM Manager' %}"><span>{% trans "DKIM Manager" %}</span></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li><a href="{% url 'EmailDebugger' %}"
|
||||
title="{% trans 'Email Debugger' %}"><span>{% trans "Email Debugger" %}</span></a>
|
||||
</li>
|
||||
<li><a href="{% url 'EmailDebugger' %}"
|
||||
title="{% trans 'Email Debugger' %}"><span>{% trans "Email Debugger" %}</span></a>
|
||||
</li>
|
||||
|
||||
{% if admin or createEmail %}
|
||||
<li><a href="/snappymail/index.php" title="{% trans 'Access Webmail' %}"
|
||||
@@ -781,7 +785,8 @@
|
||||
<li>
|
||||
<a href="{% url 'Filemanager' %}"
|
||||
title="{% trans 'Root File Manager' %}">
|
||||
<i class="glyph-icon tooltip-button icon-link" title="{% trans 'Root File Manager' %}"
|
||||
<i class="glyph-icon tooltip-button icon-link"
|
||||
title="{% trans 'Root File Manager' %}"
|
||||
data-original-title=".icon-cloud-upload" aria-describedby="tooltip896208"></i>
|
||||
<span>{% trans "Root File Manager" %}</span>
|
||||
</a>
|
||||
|
||||
@@ -119,7 +119,7 @@ elif grep -q -E "CloudLinux 7|CloudLinux 8" /etc/os-release ; then
|
||||
Server_OS="CloudLinux"
|
||||
elif grep -q "AlmaLinux-8" /etc/os-release ; then
|
||||
Server_OS="AlmaLinux"
|
||||
elif grep -q -E "Ubuntu 18.04|Ubuntu 20.04|Ubuntu 20.10" /etc/os-release ; then
|
||||
elif grep -q -E "Ubuntu 18.04|Ubuntu 20.04|Ubuntu 20.10|Ubuntu 22.04" /etc/os-release ; then
|
||||
Server_OS="Ubuntu"
|
||||
elif grep -q -E "openEuler 20.03|openEuler 22.03" /etc/os-release ; then
|
||||
Server_OS="openEuler"
|
||||
@@ -422,7 +422,13 @@ elif [[ "$Server_OS" = "Ubuntu" ]] ; then
|
||||
|
||||
apt update -y
|
||||
DEBIAN_FRONTEND=noninteractive apt upgrade -y
|
||||
DEBIAN_FRONTEND=noninteractive apt install -y htop telnet libcurl4-gnutls-dev libgnutls28-dev libgcrypt20-dev libattr1 libattr1-dev liblzma-dev libgpgme-dev libmariadbclient-dev libcurl4-gnutls-dev libssl-dev nghttp2 libnghttp2-dev idn2 libidn2-dev libidn2-0-dev librtmp-dev libpsl-dev nettle-dev libgnutls28-dev libldap2-dev libgssapi-krb5-2 libk5crypto3 libkrb5-dev libcomerr2 libldap2-dev virtualenv git dnsutils
|
||||
|
||||
if [[ "$Server_OS_Version" = "22" ]] ; then
|
||||
DEBIAN_FRONTEND=noninteracitve apt install -y dnsutils net-tools htop telnet libcurl4-gnutls-dev libgnutls28-dev libgcrypt20-dev libattr1 libattr1-dev liblzma-dev libgpgme-dev libcurl4-gnutls-dev libssl-dev nghttp2 libnghttp2-dev idn2 libidn2-dev libidn2-0-dev librtmp-dev libpsl-dev nettle-dev libgnutls28-dev libldap2-dev libgssapi-krb5-2 libk5crypto3 libkrb5-dev libcomerr2 libldap2-dev virtualenv git socat vim unzip zip libmariadb-dev-compat libmariadb-dev
|
||||
|
||||
else
|
||||
DEBIAN_FRONTEND=noninteracitve apt install -y htop telnet libcurl4-gnutls-dev libgnutls28-dev libgcrypt20-dev libattr1 libattr1-dev liblzma-dev libgpgme-dev libmariadbclient-dev libcurl4-gnutls-dev libssl-dev nghttp2 libnghttp2-dev idn2 libidn2-dev libidn2-0-dev librtmp-dev libpsl-dev nettle-dev libgnutls28-dev libldap2-dev libgssapi-krb5-2 libk5crypto3 libkrb5-dev libcomerr2 libldap2-dev virtualenv git dnsutils
|
||||
fi
|
||||
DEBIAN_FRONTEND=noninteractive apt install -y python3-pip
|
||||
DEBIAN_FRONTEND=noninteractive apt install -y build-essential libssl-dev libffi-dev python3-dev
|
||||
DEBIAN_FRONTEND=noninteractive apt install -y python3-venv
|
||||
@@ -607,9 +613,9 @@ else
|
||||
Check_Return
|
||||
fi
|
||||
|
||||
wget https://cyberpanel.sh/www.litespeedtech.com/packages/lsapi/wsgi-lsapi-1.7.tgz
|
||||
tar xf wsgi-lsapi-1.7.tgz
|
||||
cd wsgi-lsapi-1.7 || exit
|
||||
wget https://cyberpanel.sh/www.litespeedtech.com/packages/lsapi/wsgi-lsapi-2.1.tgz
|
||||
tar xf wsgi-lsapi-2.1.tgz
|
||||
cd wsgi-lsapi-2.1 || exit
|
||||
/usr/local/CyberPanel/bin/python ./configure.py
|
||||
make
|
||||
|
||||
|
||||
@@ -430,7 +430,7 @@ sudo_check() {
|
||||
echo -e "\nYou must use root user to use CyberPanel Utility..."
|
||||
exit
|
||||
else
|
||||
echo -e "\nYou are runing as root..."
|
||||
echo -e "\nYou are running as root..."
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -1890,12 +1890,18 @@ def RunServerLevelEmailChecks(request):
|
||||
else:
|
||||
return ACLManager.loadErrorJson()
|
||||
|
||||
if ACLManager.CheckForPremFeature('wp-manager'):
|
||||
if ACLManager.CheckForPremFeature('email-debugger'):
|
||||
ob = CloudManager()
|
||||
res = ob.RunServerLevelEmailChecks()
|
||||
return res
|
||||
except KeyError:
|
||||
return redirect(loadLoginPage)
|
||||
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):
|
||||
@@ -1910,10 +1916,15 @@ def ResetEmailConfigurations(request):
|
||||
if ACLManager.CheckForPremFeature('email-debugger'):
|
||||
ob = CloudManager()
|
||||
res = ob.ResetEmailConfigurations()
|
||||
|
||||
return res
|
||||
except KeyError:
|
||||
return redirect(loadLoginPage)
|
||||
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:
|
||||
@@ -1929,8 +1940,14 @@ def statusFunc(request):
|
||||
ob = CloudManager(json.loads(request.body))
|
||||
res = ob.statusFunc()
|
||||
return res
|
||||
except KeyError:
|
||||
return redirect(loadLoginPage)
|
||||
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 ReadReport(request):
|
||||
try:
|
||||
@@ -2010,6 +2027,10 @@ def ReadReport(request):
|
||||
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)
|
||||
|
||||
@@ -2022,10 +2043,14 @@ def debugEmailForSite(request):
|
||||
pass
|
||||
else:
|
||||
return ACLManager.loadErrorJson()
|
||||
if ACLManager.CheckForPremFeature('wp-manager'):
|
||||
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)
|
||||
|
||||
@@ -2039,11 +2064,15 @@ def fixMailSSL(request):
|
||||
else:
|
||||
return ACLManager.loadErrorJson()
|
||||
admin = Administrator.objects.get(pk=userID)
|
||||
if ACLManager.CheckForPremFeature('wp-manager'):
|
||||
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)
|
||||
|
||||
@@ -731,7 +731,7 @@
|
||||
<a style="border-bottom: 1px solid #007bff;" onclick="return false;" ng-click="showDeleteModal()" href="#"><li class="list-group-item"><i class="fa fa-trash" aria-hidden="true"></i> {% trans "Delete" %}</li></a>
|
||||
<a style="border-bottom: 1px solid #007bff;" onclick="return false;" ng-click="showCompressionModal()" href="#"><li class="list-group-item"><i class="fa fa-compress" aria-hidden="true"></i> {% trans "Compress" %}</li></a>
|
||||
<a style="border-bottom: 1px solid #007bff;" id="extractOnRight" onclick="return false;" ng-click="showExtractionModal()" href="#"><li class="list-group-item"><i class="fa fa-expand" aria-hidden="true"></i> {% trans "Extract" %}</li></a>
|
||||
<a style="border-bottom: 1px solid #007bff;" id="editOnRight" onclick="return false;" ng-click="showHTMLEditorModal()" href="#"><li class="list-group-item"><i class="fa fa-pencil-square-o" aria-hidden="true"></i> {% trans "Edit" %}</li></a>
|
||||
<a style="border-bottom: 1px solid #007bff;" id="editOnRight" onclick="return false;" ng-click="showHTMLEditorModal(1)" href="#"><li class="list-group-item"><i class="fa fa-pencil-square-o" aria-hidden="true"></i> {% trans "Edit" %}</li></a>
|
||||
<a style="border-bottom: 1px solid #007bff;" id="editOnRightCodeMirror" onclick="return false;" ng-click="editWithCodeMirror()" href="#"><li class="list-group-item"><i class="fa fa-pencil-square-o" aria-hidden="true"></i> {% trans "Edit with CodeMirror" %}</li></a>
|
||||
<a style="border-bottom: 1px solid #007bff;" id="restoreRight" onclick="return false;" ng-click="showRestoreModal()" href="#"><li class="list-group-item"><i class="fa fa-window-restore" aria-hidden="true"></i> {% trans "Restore" %}</li></a>
|
||||
</ul>
|
||||
|
||||
@@ -654,6 +654,12 @@ password="%s"
|
||||
|
||||
command = 'chmod 640 /etc/pdns/pdns.conf'
|
||||
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
||||
else:
|
||||
command = 'chown root:pdns /etc/powerdns/pdns.conf'
|
||||
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
||||
|
||||
command = 'chmod 640 /etc/powerdns/pdns.conf'
|
||||
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
||||
|
||||
command = 'chmod 640 /usr/local/lscp/cyberpanel/logs/access.log'
|
||||
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
||||
@@ -1451,13 +1457,20 @@ autocreate_system_folders = On
|
||||
|
||||
lscpdPath = '/usr/local/lscp/bin/lscpd'
|
||||
|
||||
command = 'cp -f /usr/local/CyberCP/lscpd-0.3.1 /usr/local/lscp/bin/lscpd-0.3.1'
|
||||
lscpdSelection = 'lscpd-0.3.1'
|
||||
if os.path.exists('/etc/lsb-release'):
|
||||
result = open('/etc/lsb-release', 'r').read()
|
||||
if result.find('22.04') > -1:
|
||||
lscpdSelection = 'lscpd.0.4.0'
|
||||
|
||||
|
||||
command = f'cp -f /usr/local/CyberCP/{lscpdSelection} /usr/local/lscp/bin/{lscpdSelection}'
|
||||
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
||||
|
||||
command = 'rm -f /usr/local/lscp/bin/lscpd'
|
||||
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
||||
|
||||
command = 'mv /usr/local/lscp/bin/lscpd-0.3.1 /usr/local/lscp/bin/lscpd'
|
||||
command = f'mv /usr/local/lscp/bin/{lscpdSelection} /usr/local/lscp/bin/lscpd'
|
||||
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
||||
|
||||
command = 'chmod 755 %s' % (lscpdPath)
|
||||
|
||||
@@ -281,6 +281,20 @@ class InstallCyberPanel:
|
||||
elif self.distro == centos:
|
||||
command = 'yum --enablerepo=mariadb -y install MariaDB-server MariaDB-client'
|
||||
elif self.distro == cent8 or self.distro == openeuler:
|
||||
### check if cent8 which means Alma8 then add Mariadb 10.6 repo
|
||||
if self.distro == cent8:
|
||||
content = """
|
||||
[mariadb]
|
||||
name = MariaDB
|
||||
baseurl = http://yum.mariadb.org/10.6/rhel8-amd64
|
||||
module_hotfixes=1
|
||||
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
|
||||
gpgcheck=1
|
||||
"""
|
||||
writeToFile = open('/etc/yum.repos.d/mariadb.repo', 'w')
|
||||
writeToFile.write(content)
|
||||
writeToFile.close()
|
||||
|
||||
command = 'dnf -y install mariadb-server'
|
||||
|
||||
install.preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
||||
|
||||
@@ -163,6 +163,11 @@ listener Default{
|
||||
map Example *
|
||||
}
|
||||
|
||||
listener Default IPv6{
|
||||
address [ANY]:80
|
||||
secure 0
|
||||
map Example *
|
||||
}
|
||||
|
||||
|
||||
vhTemplate centralConfigLog {
|
||||
|
||||
BIN
lscpd.0.4.0
Normal file
BIN
lscpd.0.4.0
Normal file
Binary file not shown.
@@ -1576,6 +1576,12 @@ milter_default_action = accept
|
||||
|
||||
command = 'chmod 640 /etc/pdns/pdns.conf'
|
||||
ProcessUtilities.executioner(command)
|
||||
else:
|
||||
command = 'chown root:pdns /etc/powerdns/pdns.conf'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'chmod 640 /etc/powerdns/pdns.conf'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
command = 'chmod 640 /usr/local/lscp/cyberpanel/logs/access.log'
|
||||
ProcessUtilities.executioner(command)
|
||||
|
||||
@@ -1697,6 +1697,10 @@ $parameters = array(
|
||||
try:
|
||||
website = Websites.objects.get(domain=DataToPass['domainName'])
|
||||
|
||||
if website.phpSelection == 'PHP 7.3':
|
||||
website.phpSelection = 'PHP 7.4'
|
||||
website.save()
|
||||
|
||||
if ACLManager.checkOwnership(website.domain, self.extraArgs['adminID'],
|
||||
self.extraArgs['currentACL']) == 0:
|
||||
statusFile = open(tempStatusPath, 'w')
|
||||
|
||||
@@ -1079,7 +1079,7 @@ LogFile /var/log/clamav/clamav.log
|
||||
command = "cat " + path
|
||||
output = ProcessUtilities.outputExecutioner(command)
|
||||
|
||||
if output.find('content_filter=spamassassin') > -1:
|
||||
if output.find('spamassassin') > -1 and output.find('user=spamd') > -1:
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
@@ -629,8 +629,7 @@ password=%s
|
||||
checker = 0
|
||||
|
||||
for items in result:
|
||||
if items[0] == 'information_schema' or items[0] == 'mysql' or items[0] == 'performance_schema' or items[
|
||||
0] == 'performance_schema':
|
||||
if items[0] == 'information_schema' or items[0] == 'mysql' or items[0] == 'performance_schema':
|
||||
continue
|
||||
|
||||
dic = {
|
||||
|
||||
@@ -101,6 +101,17 @@ class Renew:
|
||||
'SSL does not exist for %s. Obtaining now..' % (website.domain), 0)
|
||||
virtualHostUtilities.issueSSL(website.domain, website.path,
|
||||
website.master.adminEmail)
|
||||
self.file = logging.writeToFile('Restarting mail services for them to see new SSL.', 0)
|
||||
|
||||
from plogical.processUtilities import ProcessUtilities
|
||||
command = 'postmap -F hash:/etc/postfix/vmail_ssl.map'
|
||||
ProcessUtilities.normalExecutioner(command)
|
||||
|
||||
command = 'systemctl restart postfix'
|
||||
ProcessUtilities.normalExecutioner(command)
|
||||
|
||||
command = 'systemctl restart dovecot'
|
||||
ProcessUtilities.normalExecutioner(command)
|
||||
|
||||
except BaseException as msg:
|
||||
logging.writeToFile(str(msg) + '. Renew.SSLObtainer')
|
||||
|
||||
@@ -52,6 +52,20 @@ class sslUtilities:
|
||||
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [IO Error with main config file [checkSSLListener]]")
|
||||
return str(msg)
|
||||
return 0
|
||||
|
||||
|
||||
@staticmethod
|
||||
def checkSSLIPv6Listener():
|
||||
try:
|
||||
data = open("/usr/local/lsws/conf/httpd_config.conf").readlines()
|
||||
for items in data:
|
||||
if items.find("listener SSL IPv6") > -1:
|
||||
return 1
|
||||
|
||||
except BaseException as msg:
|
||||
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [IO Error with main config file [checkSSLIPv6Listener]]")
|
||||
return str(msg)
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
def getDNSRecords(virtualHostName):
|
||||
@@ -120,6 +134,45 @@ class sslUtilities:
|
||||
writeDataToFile.writelines("\n")
|
||||
writeDataToFile.close()
|
||||
|
||||
elif sslUtilities.checkSSLIPv6Listener() != 1:
|
||||
|
||||
writeDataToFile = open("/usr/local/lsws/conf/httpd_config.conf", 'a')
|
||||
|
||||
listener = "listener SSL IPv6 {" + "\n"
|
||||
address = " address [ANY]:443" + "\n"
|
||||
secure = " secure 1" + "\n"
|
||||
keyFile = " keyFile /etc/letsencrypt/live/" + virtualHostName + "/privkey.pem\n"
|
||||
certFile = " certFile /etc/letsencrypt/live/" + virtualHostName + "/fullchain.pem\n"
|
||||
certChain = " certChain 1" + "\n"
|
||||
sslProtocol = " sslProtocol 24" + "\n"
|
||||
enableECDHE = " enableECDHE 1" + "\n"
|
||||
renegProtection = " renegProtection 1" + "\n"
|
||||
sslSessionCache = " sslSessionCache 1" + "\n"
|
||||
enableSpdy = " enableSpdy 15" + "\n"
|
||||
enableStapling = " enableStapling 1" + "\n"
|
||||
ocspRespMaxAge = " ocspRespMaxAge 86400" + "\n"
|
||||
map = " map " + virtualHostName + " " + virtualHostName + "\n"
|
||||
final = "}" + "\n" + "\n"
|
||||
|
||||
writeDataToFile.writelines("\n")
|
||||
writeDataToFile.writelines(listener)
|
||||
writeDataToFile.writelines(address)
|
||||
writeDataToFile.writelines(secure)
|
||||
writeDataToFile.writelines(keyFile)
|
||||
writeDataToFile.writelines(certFile)
|
||||
writeDataToFile.writelines(certChain)
|
||||
writeDataToFile.writelines(sslProtocol)
|
||||
writeDataToFile.writelines(enableECDHE)
|
||||
writeDataToFile.writelines(renegProtection)
|
||||
writeDataToFile.writelines(sslSessionCache)
|
||||
writeDataToFile.writelines(enableSpdy)
|
||||
writeDataToFile.writelines(enableStapling)
|
||||
writeDataToFile.writelines(ocspRespMaxAge)
|
||||
writeDataToFile.writelines(map)
|
||||
writeDataToFile.writelines(final)
|
||||
writeDataToFile.writelines("\n")
|
||||
writeDataToFile.close()
|
||||
|
||||
else:
|
||||
|
||||
if sslUtilities.checkIfSSLMap(virtualHostName) == 0:
|
||||
|
||||
@@ -27,6 +27,7 @@ CloudLinux7 = 4
|
||||
CloudLinux8 = 5
|
||||
openEuler20 = 6
|
||||
openEuler22 = 7
|
||||
Ubuntu22 = 8
|
||||
|
||||
|
||||
class Upgrade:
|
||||
@@ -98,6 +99,8 @@ class Upgrade:
|
||||
|
||||
if result.find('20.04') > -1:
|
||||
return Ubuntu20
|
||||
elif result.find('22.04') > -1:
|
||||
return Ubuntu22
|
||||
else:
|
||||
return Ubuntu18
|
||||
|
||||
@@ -115,12 +118,15 @@ class Upgrade:
|
||||
os._exit(0)
|
||||
|
||||
@staticmethod
|
||||
def executioner(command, component, do_exit=0):
|
||||
def executioner(command, component, do_exit=0, shell=False):
|
||||
try:
|
||||
FNULL = open(os.devnull, 'w')
|
||||
count = 0
|
||||
while True:
|
||||
res = subprocess.call(shlex.split(command), stderr=subprocess.STDOUT)
|
||||
if shell == False:
|
||||
res = subprocess.call(shlex.split(command), stderr=subprocess.STDOUT)
|
||||
else:
|
||||
res = subprocess.call(command, stderr=subprocess.STDOUT, shell=True)
|
||||
if res != 0:
|
||||
count = count + 1
|
||||
Upgrade.stdOut(component + ' failed, trying again, try number: ' + str(count), 0)
|
||||
@@ -1986,13 +1992,21 @@ autocreate_system_folders = On
|
||||
if os.path.exists(lscpdPath):
|
||||
os.remove(lscpdPath)
|
||||
|
||||
command = 'cp -f /usr/local/CyberCP/lscpd-0.3.1 /usr/local/lscp/bin/lscpd-0.3.1'
|
||||
|
||||
|
||||
lscpdSelection = 'lscpd-0.3.1'
|
||||
if os.path.exists(Upgrade.UbuntuPath):
|
||||
result = open(Upgrade.UbuntuPath, 'r').read()
|
||||
if result.find('22.04') > -1:
|
||||
lscpdSelection = 'lscpd.0.4.0'
|
||||
|
||||
command = f'cp -f /usr/local/CyberCP/{lscpdSelection} /usr/local/lscp/bin/{lscpdSelection}'
|
||||
Upgrade.executioner(command, command, 0)
|
||||
|
||||
command = 'rm -f /usr/local/lscp/bin/lscpd'
|
||||
Upgrade.executioner(command, command, 0)
|
||||
|
||||
command = 'mv /usr/local/lscp/bin/lscpd-0.3.1 /usr/local/lscp/bin/lscpd'
|
||||
command = f'mv /usr/local/lscp/bin/{lscpdSelection} /usr/local/lscp/bin/lscpd'
|
||||
Upgrade.executioner(command, command, 0)
|
||||
|
||||
command = f'chmod 755 {lscpdPath}'
|
||||
@@ -2212,6 +2226,12 @@ echo $oConfig->Save() ? 'Done' : 'Error';
|
||||
|
||||
command = 'chmod 640 /etc/pdns/pdns.conf'
|
||||
Upgrade.executioner(command, 0)
|
||||
else:
|
||||
command = 'chown root:pdns /etc/powerdns/pdns.conf'
|
||||
Upgrade.executioner(command, 0)
|
||||
|
||||
command = 'chmod 640 /etc/powerdns/pdns.conf'
|
||||
Upgrade.executioner(command, 0)
|
||||
|
||||
command = 'chmod 640 /usr/local/lscp/cyberpanel/logs/access.log'
|
||||
Upgrade.executioner(command, 0)
|
||||
@@ -2419,7 +2439,7 @@ echo $oConfig->Save() ? 'Done' : 'Error';
|
||||
|
||||
command = 'systemctl restart postfix'
|
||||
Upgrade.executioner(command, 0)
|
||||
elif Upgrade.FindOperatingSytem() == Ubuntu20:
|
||||
elif Upgrade.FindOperatingSytem() == Ubuntu20 or Upgrade.FindOperatingSytem() == Ubuntu22:
|
||||
|
||||
debPath = '/etc/apt/sources.list.d/dovecot.list'
|
||||
# writeToFile = open(debPath, 'w')
|
||||
@@ -2561,16 +2581,16 @@ vmail
|
||||
|
||||
# Remove invalid crons from /etc/crontab Reference: https://github.com/usmannasir/cyberpanel/issues/216
|
||||
command = """sed -i '/CyberCP/d' /etc/crontab"""
|
||||
subprocess.call(command, shell=True)
|
||||
Upgrade.executioner(command, command, 0, True)
|
||||
|
||||
if os.path.exists('/usr/local/lsws/conf/httpd.conf'):
|
||||
# Setup /usr/local/lsws/conf/httpd.conf to use new Logformat standard for better stats and accesslogs
|
||||
command = """sed -i "s|^LogFormat.*|LogFormat '%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"' combined|g" /usr/local/lsws/conf/httpd.conf"""
|
||||
subprocess.call(command, shell=True)
|
||||
Upgrade.executioner(command, command, 0, True)
|
||||
|
||||
# Fix all existing vhost confs to use new Logformat standard for better stats and accesslogs
|
||||
command = """find /usr/local/lsws/conf/vhosts/ -type f -name 'vhost.conf' -exec sed -i "s/.*CustomLog.*/ LogFormat '%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"' combined\n&/g" {} \;"""
|
||||
subprocess.call(command, shell=True)
|
||||
Upgrade.executioner(command, command, 0, True)
|
||||
|
||||
# Install any Cyberpanel missing crons to root crontab so its visible to users via crontab -l as root user
|
||||
|
||||
@@ -2814,7 +2834,7 @@ vmail
|
||||
except:
|
||||
pass
|
||||
|
||||
command = 'cp /usr/local/lsws/lsphp73/bin/lsphp %s' % (phpPath)
|
||||
command = 'cp /usr/local/lsws/lsphp74/bin/lsphp %s' % (phpPath)
|
||||
Upgrade.executioner(command, 0)
|
||||
|
||||
try:
|
||||
|
||||
@@ -162,6 +162,11 @@ listener Default{
|
||||
map Example *
|
||||
}
|
||||
|
||||
listener Default IPv6{
|
||||
address [ANY]:80
|
||||
secure 0
|
||||
map Example *
|
||||
}
|
||||
|
||||
|
||||
vhTemplate centralConfigLog {
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
{% extends "baseTemplate/index.html" %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "Pricing - CyberPanel" %}{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
{% load static %}
|
||||
{% get_current_language as LANGUAGE_CODE %}
|
||||
<!-- Current language: {{ LANGUAGE_CODE }} -->
|
||||
|
||||
<style>
|
||||
.feturecard {
|
||||
width: 30%; padding: 46px; margin: 15px
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="container">
|
||||
<div id="page-title" align="center">
|
||||
<h2 style="color: black"><strong>Managing Your WordPress sites was never so easy!</strong></h2>
|
||||
<p style="font-size: 18px; color: black; margin-top: 1%">43% of all Websites on the Internet are built with WordPress, so
|
||||
it deserves some love! With CyberPanel WordPress Manager, you can easily Monitor, Analyze, Optimize and
|
||||
keep your website in Top-Notch performance, all the time.</p>
|
||||
</div>
|
||||
|
||||
|
||||
<p align="center">
|
||||
<iframe width="788.54" height="443" src="https://www.youtube.com/embed/c-ffIKgjrBU"
|
||||
title="YouTube video player" frameborder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowfullscreen></iframe>
|
||||
</p>
|
||||
<div style="margin-top: 2%">
|
||||
<stripe-pricing-table pricing-table-id="prctbl_1LpSqSJMfY1fWGMsxSNhPLsc"
|
||||
publishable-key="pk_live_51ITXBmJMfY1fWGMs2G0LAydJweIDMp2WaYocM0xyzdn03WaHUbMw6uxfVuktAkgpRyUql7tz7gF5OwdccEZLd6Ot00XX6tGoZx">
|
||||
</stripe-pricing-table>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-12" style="margin: 1%; border-radius: 10px; box-shadow: rgba(66, 135, 245, 0.2) 0px 2px 8px 0px;">
|
||||
<h2 align="center" style="margin-top: 2%; color: black"><strong>Features You’ll Love</strong></h2>
|
||||
|
||||
<div class="center-content" style="display: flex; flex-wrap: wrap; margin: auto">
|
||||
|
||||
|
||||
<div align="center" style="margin-bottom: -15px;" class="feturecard" >
|
||||
<div style="margin: 2%">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="3em" height="3em"
|
||||
preserveAspectRatio="xMidYMid meet" viewBox="0 0 512 512">
|
||||
<path fill="currentColor"
|
||||
d="M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20s9 20 20 20s20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20s9 20 20 20s20-9 20-20z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h4 style="font-weight: bold; color: black ">Backups</h4>
|
||||
<div style="margin: 2%">
|
||||
<div align="center">Worried about your
|
||||
site
|
||||
backups? WordPress Manager allows you to take data or database level backups. <br></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div align="center" style="margin-bottom: -15px;"class="feturecard">
|
||||
<div style="margin: 2%">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="3em" height="3em"
|
||||
preserveAspectRatio="xMidYMid meet" viewBox="0 0 1024 1024">
|
||||
<path fill="currentColor"
|
||||
d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h4 style="font-weight: bold; color: black ">Staging Sites<br></h4>
|
||||
<div style="margin: 2%">
|
||||
<div align="center">Not ready to go live
|
||||
yet?
|
||||
You can create staging sites and easily deploy them to production with one-click using
|
||||
WordPress
|
||||
Manager<br></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div align="center" style="margin-bottom: -15px;"class="feturecard">
|
||||
<div style="margin: 2%">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="3em" height="3em"
|
||||
preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24">
|
||||
<path fill="currentColor"
|
||||
d="M20 12c0-1.103-.897-2-2-2h-1V7c0-2.757-2.243-5-5-5S7 4.243 7 7v3H6c-1.103 0-2 .897-2 2v8c0 1.103.897 2 2 2h12c1.103 0 2-.897 2-2v-8zM9 7c0-1.654 1.346-3 3-3s3 1.346 3 3v3H9V7z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h4 style="font-weight: bold; color: black ">One Click SSL</h4>
|
||||
<div style="margin: 2%">
|
||||
<div align="center">Free One Click SSL Certificates by Let's Encrypt. With Auto-renewal
|
||||
enabled
|
||||
by
|
||||
default, CyberPanel will automagically renew your Certificates before they expire!<br>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div align="center" class="feturecard">
|
||||
<div style="margin: 2%">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="3em" height="3em"
|
||||
preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24">
|
||||
<path fill="currentColor"
|
||||
d="M12.001 1.993C6.486 1.994 2 6.48 2 11.994c.001 5.514 4.487 10 10 10c5.515 0 10.001-4.486 10.001-10s-4.486-10-10-10.001zM12 19.994c-4.41 0-7.999-3.589-8-8c0-4.411 3.589-8 8.001-8.001c4.411.001 8 3.59 8 8.001s-3.589 8-8.001 8z"/>
|
||||
<path fill="currentColor" d="m12.001 8.001l-4.005 4.005h3.005V16h2v-3.994h3.004z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h4 style="font-weight: bold; color: black ">One Click Install</h4>
|
||||
<div style="margin: 2%">
|
||||
<div align="center">Deploy WordPress sites with-in 1 minute using our brand new WordPress
|
||||
Manager.
|
||||
We will take care of Speed, Security and maintenance of your WordPress site.<br></div>
|
||||
</div>
|
||||
</div>
|
||||
<div align="center" class="feturecard">
|
||||
<div style="margin: 2%">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="3em" height="3em"
|
||||
preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16">
|
||||
<path fill="currentColor" fill-rule="evenodd"
|
||||
d="M8 1.314C12.438-3.248 23.534 4.735 8 15C-7.534 4.736 3.562-3.248 8 1.314z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h4 style="font-weight: bold; color: black ">Auto Login<br></h4>
|
||||
<div style="margin: 2%">
|
||||
<div align="center">Have you forgotten your WordPress dashboard login information? To access
|
||||
your
|
||||
WordPress admin account, simply use the CyberPanel WordPress manager Auto Login feature.<br>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div align="center" class="feturecard">
|
||||
<div style="margin: 2%">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="3em" height="3em"
|
||||
preserveAspectRatio="xMidYMid meet" viewBox="0 0 1200 1200">
|
||||
<path fill="currentColor"
|
||||
d="M1200 1200L957.743 0H658.691l9.164 276.675H532.144L541.308 0H242.256L0 1200h501.562l11.441-345.445h173.992L698.438 1200H1200M683.573 751.231H516.426l13.479-406.965h140.188l13.48 406.965"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h4 style="font-weight: bold; color: black ">LiteSpeed Cache</h4>
|
||||
<div style="margin: 2%">
|
||||
<div align="center">Nothing beats LSCache plugin on LitesSpeed server. Every WordPress site
|
||||
deployed
|
||||
via WordPress manager gets LSCache plugin installed and configured.<br></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
||||
@@ -26,6 +26,7 @@ urlpatterns = [
|
||||
url(r'^RemoteBackupConfig$', views.RemoteBackupConfig, name='RemoteBackupConfig'),
|
||||
url(r'^BackupfileConfig$', views.BackupfileConfig, name='BackupfileConfig'),
|
||||
url(r'^AddRemoteBackupsite$', views.AddRemoteBackupsite, name='AddRemoteBackupsite'),
|
||||
url(r'^pricing$', views.WordpressPricing, name='pricing'),
|
||||
|
||||
|
||||
###WordPress Ajax
|
||||
|
||||
@@ -99,6 +99,14 @@ def AddRemoteBackupsite(request):
|
||||
except KeyError:
|
||||
return redirect(loadLoginPage)
|
||||
|
||||
def WordpressPricing(request):
|
||||
try:
|
||||
userID = request.session['userID']
|
||||
wm = WebsiteManager()
|
||||
return wm.WordpressPricing(request, userID,)
|
||||
except KeyError:
|
||||
return redirect(loadLoginPage)
|
||||
|
||||
def RestoreBackups(request):
|
||||
try:
|
||||
userID = request.session['userID']
|
||||
|
||||
@@ -100,7 +100,8 @@ class WebsiteManager:
|
||||
Data, 'createWebsite')
|
||||
return proc.render()
|
||||
else:
|
||||
return redirect("https://cyberpanel.net/cyberpanel-addons")
|
||||
from django.shortcuts import reverse
|
||||
return redirect(reverse('pricing'))
|
||||
|
||||
def ListWPSites(self, request=None, userID=None, DeleteID=None):
|
||||
currentACL = ACLManager.loadedACL(userID)
|
||||
@@ -171,8 +172,8 @@ class WebsiteManager:
|
||||
Data, 'createWebsite')
|
||||
return proc.render()
|
||||
else:
|
||||
return redirect("https://cyberpanel.net/cyberpanel-addons")
|
||||
|
||||
from django.shortcuts import reverse
|
||||
return redirect(reverse('pricing'))
|
||||
except:
|
||||
proc = httpProc(request, 'websiteFunctions/WPsiteHome.html',
|
||||
Data, 'createWebsite')
|
||||
@@ -203,8 +204,8 @@ class WebsiteManager:
|
||||
Data, 'createWebsite')
|
||||
return proc.render()
|
||||
else:
|
||||
return redirect("https://cyberpanel.net/cyberpanel-addons")
|
||||
|
||||
from django.shortcuts import reverse
|
||||
return redirect(reverse('pricing'))
|
||||
|
||||
def RemoteBackupConfig(self, request=None, userID=None, DeleteID=None ):
|
||||
Data = {}
|
||||
@@ -252,7 +253,8 @@ class WebsiteManager:
|
||||
Data, 'createWebsite')
|
||||
return proc.render()
|
||||
else:
|
||||
return redirect("https://cyberpanel.net/cyberpanel-addons")
|
||||
from django.shortcuts import reverse
|
||||
return redirect(reverse('pricing'))
|
||||
|
||||
|
||||
def BackupfileConfig(self, request=None, userID=None, RemoteConfigID=None, DeleteID=None ):
|
||||
@@ -288,7 +290,8 @@ class WebsiteManager:
|
||||
Data, 'createWebsite')
|
||||
return proc.render()
|
||||
else:
|
||||
return redirect("https://cyberpanel.net/cyberpanel-addons")
|
||||
from django.shortcuts import reverse
|
||||
return redirect(reverse('pricing'))
|
||||
|
||||
|
||||
def AddRemoteBackupsite(self, request=None, userID=None, RemoteScheduleID=None , DeleteSiteID=None):
|
||||
@@ -323,7 +326,14 @@ class WebsiteManager:
|
||||
Data, 'createWebsite')
|
||||
return proc.render()
|
||||
else:
|
||||
return redirect("https://cyberpanel.net/cyberpanel-addons")
|
||||
from django.shortcuts import reverse
|
||||
return redirect(reverse('pricing'))
|
||||
|
||||
|
||||
def WordpressPricing(self, request=None, userID=None,):
|
||||
Data ={}
|
||||
proc = httpProc(request, 'websiteFunctions/CyberpanelPricing.html', Data, 'createWebsite')
|
||||
return proc.render()
|
||||
|
||||
def RestoreBackups(self, request=None, userID=None, DeleteID=None):
|
||||
Data = {}
|
||||
@@ -394,7 +404,8 @@ class WebsiteManager:
|
||||
Data, 'createWebsite')
|
||||
return proc.render()
|
||||
else:
|
||||
return redirect("https://cyberpanel.net/cyberpanel-addons")
|
||||
from django.shortcuts import reverse
|
||||
return redirect(reverse('pricing'))
|
||||
|
||||
def AutoLogin(self, request=None, userID=None):
|
||||
|
||||
@@ -448,7 +459,8 @@ class WebsiteManager:
|
||||
data, 'createWebsite')
|
||||
return proc.render()
|
||||
else:
|
||||
return redirect("https://cyberpanel.net/cyberpanel-addons")
|
||||
from django.shortcuts import reverse
|
||||
return redirect(reverse('pricing'))
|
||||
|
||||
def ConfigurePlugins(self, request=None, userID=None, data=None):
|
||||
|
||||
@@ -465,9 +477,11 @@ class WebsiteManager:
|
||||
Data, 'createWebsite')
|
||||
return proc.render()
|
||||
else:
|
||||
return redirect("https://cyberpanel.net/cyberpanel-addons")
|
||||
from django.shortcuts import reverse
|
||||
return redirect(reverse('pricing'))
|
||||
|
||||
def Addnewplugin(self, request=None, userID=None, data=None):
|
||||
from django.shortcuts import reverse
|
||||
if ACLManager.CheckForPremFeature('wp-manager'):
|
||||
currentACL = ACLManager.loadedACL(userID)
|
||||
adminNames = ACLManager.loadAllUsers(userID)
|
||||
@@ -478,7 +492,10 @@ class WebsiteManager:
|
||||
proc = httpProc(request, 'websiteFunctions/WPAddNewPlugin.html',
|
||||
Data, 'createWebsite')
|
||||
return proc.render()
|
||||
return redirect("https://cyberpanel.net/cyberpanel-addons")
|
||||
|
||||
return redirect(reverse('pricing'))
|
||||
|
||||
|
||||
|
||||
def SearchOnkeyupPlugin(self, userID=None, data=None):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user