From 9546a9e3170abe4b3c6a714dcbaaf2cb206b769f Mon Sep 17 00:00:00 2001 From: usmannasir <01-134132-158@student.bahria.edu.pk> Date: Mon, 29 Oct 2018 21:36:03 +0500 Subject: [PATCH] drop certbot --- CyberCP/settings.py | 1 - api/urls.py | 2 + api/views.py | 61 ++++++++++++++- emailMarketing/emailMarketing.py | 55 ++++++++----- install/install.py | 4 +- loginSystem/views.py | 2 +- plogical/sslUtilities.py | 129 ++++++++++--------------------- 7 files changed, 138 insertions(+), 116 deletions(-) diff --git a/CyberCP/settings.py b/CyberCP/settings.py index ca3aabb5d..76a78c137 100644 --- a/CyberCP/settings.py +++ b/CyberCP/settings.py @@ -69,7 +69,6 @@ MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', diff --git a/api/urls.py b/api/urls.py index 6be18a12f..9a624353a 100644 --- a/api/urls.py +++ b/api/urls.py @@ -10,7 +10,9 @@ urlpatterns = [ url(r'^loginAPI', views.loginAPI, name='loginAPI'), + url(r'^getUserInfo$', views.getUserInfo, name='getUserInfo'), url(r'^changeUserPassAPI', views.changeUserPassAPI, name='changeUserPassAPI'), + url(r'^changePackageAPI', views.changePackageAPI, name='changePackageAPI'), url(r'^fetchSSHkey', views.fetchSSHkey, name='fetchSSHkey'), url(r'^remoteTransfer', views.remoteTransfer, name='remoteTransfer'), diff --git a/api/views.py b/api/views.py index 58e75ea37..01d99cec6 100644 --- a/api/views.py +++ b/api/views.py @@ -6,21 +6,23 @@ from django.http import HttpResponse from loginSystem.models import Administrator from plogical.virtualHostUtilities import virtualHostUtilities from plogical import hashPassword -from plogical.installUtilities import installUtilities from packages.models import Package from baseTemplate.views import renderBase from random import randint -from websiteFunctions.models import Websites,ChildDomains +from websiteFunctions.models import Websites import os from baseTemplate.models import version import subprocess import shlex -import re from plogical.mailUtilities import mailUtilities from plogical.website import WebsiteManager +from loginSystem.models import ACL +from plogical.acl import ACLManager + # Create your views here. + def verifyConn(request): try: if request.method == 'POST': @@ -49,6 +51,46 @@ def createWebsite(request): wm = WebsiteManager() return wm.createWebsiteAPI(json.loads(request.body)) +def getUserInfo(request): + try: + if request.method == 'POST': + + data = json.loads(request.body) + + adminUser = data['adminUser'] + adminPass = data['adminPass'] + username = data['username'] + + admin = Administrator.objects.get(userName=adminUser) + + if hashPassword.check_password(admin.password, adminPass): + pass + else: + data_ret = {"status": 0, + 'error_message': "Could not authorize access to API"} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + try: + user = Administrator.objects.get(userName=username) + data_ret = {'status': 0, + 'firstName': user.firstName, + 'lastName': user.lastName, + 'email': user.email, + 'adminStatus': user.acl.adminStatus, + 'error_message': "None"} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + except: + data_ret = {'status': 0, 'error_message': "User does not exists."} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + except BaseException, msg: + data_ret = {'status': 0, 'error_message': str(msg)} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + def changeUserPassAPI(request): try: if request.method == 'POST': @@ -514,6 +556,19 @@ def changeAdminPassword(request): randomFile = data['randomFile'] if os.path.exists(randomFile): + numberOfAdministrator = Administrator.objects.count() + if numberOfAdministrator == 0: + ACLManager.createDefaultACLs() + acl = ACL.objects.get(name='admin') + email = 'usman@cyberpersons.com' + admin = Administrator(userName="admin", password=adminPass, type=1, email=email, + firstName="Cyber", lastName="Panel", acl=acl) + admin.save() + data_ret = {"changed": 1, + 'error_message': "None"} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + os.remove(randomFile) admin = Administrator.objects.get(userName="admin") admin.password = hashPassword.hash_password(adminPass) diff --git a/emailMarketing/emailMarketing.py b/emailMarketing/emailMarketing.py index 01e0f81c1..57841b1e4 100644 --- a/emailMarketing/emailMarketing.py +++ b/emailMarketing/emailMarketing.py @@ -10,6 +10,9 @@ from websiteFunctions.models import Websites import threading as multi import socket, smtplib import DNS +from random import randint +import subprocess, shlex + class emailMarketing(multi.Thread): def __init__(self, function, extraArgs): @@ -185,26 +188,42 @@ class emailMarketing(multi.Thread): import re message = MIMEMultipart('alternative') - message['Subject'] = emailMessage.subject - message['From'] = emailMessage.fromEmail + tempPath = "/home/cyberpanel/" + str(randint(1000, 9999)) for items in allEmails: + message = MIMEMultipart('alternative') + message['Subject'] = emailMessage.subject + message['From'] = emailMessage.fromName + ' ' + emailMessage.fromEmail + message['reply-to'] = emailMessage.replyTo if (items.verificationStatus == 'Verified' or self.extraArgs['verificationCheck']) and not items.verificationStatus == 'REMOVED': try: - removalLink = "https://" + ipAddress + ":8090/emailMarketing/remove/" + self.extraArgs['listName'] + "/" + items.email + removalLink = "https:\/\/" + ipAddress + ":8090\/emailMarketing\/remove\/" + self.extraArgs[ + 'listName'] + "\/" + items.email + messageText = str(emailMessage.emailMessage) + message['To'] = items.email - if re.search(' -1: - - return 1 - - elif output.find('no action taken.') > -1: - - return 1 - elif output.find('Failed authorization procedure') > -1: - logging.CyberCPLogFileWriter.writeToFile( - 'Failed authorization procedure for ' + virtualHostName + " while issuing Let's Encrypt SSL.") - return 0 - elif output.find('Too many SSL requests for this domain, please try to get SSL at later time.') > -1: - logging.CyberCPLogFileWriter.writeToFile( - 'Too many SSL requests for ' + virtualHostName + " please try to get SSL at later time.") - return 0 - else: - ipFile = "/etc/cyberpanel/machineIP" - f = open(ipFile) - ipData = f.read() - serverIPAddress = ipData.split('\n', 1)[0] + existingCertPath = '/etc/letsencrypt/live/' + virtualHostName + if not os.path.exists(existingCertPath): + command = 'mkdir -p ' + existingCertPath + subprocess.call(shlex.split(command)) - ipRecords = sslUtilities.getDNSRecords(virtualHostName) - - if ipRecords[0] == 1: - - if serverIPAddress == ipRecords[1] and serverIPAddress == ipRecords[2]: - - ipRecordsAlias = sslUtilities.getDNSRecords(aliasDomain) - - if serverIPAddress == ipRecordsAlias[1] and serverIPAddress == ipRecordsAlias[2]: - - command = "/usr/local/CyberCP/bin/certbot certonly -n --expand --agree-tos --email " + adminEmail + " --webroot -w " + sslpath + " -d " + virtualHostName + " -d www." + virtualHostName + " -d " + aliasDomain + " -d www." + aliasDomain - - else: - if serverIPAddress == ipRecordsAlias[2]: - command = "/usr/local/CyberCP/bin/certbot certonly -n --expand --agree-tos --email " + adminEmail + " --webroot -w " + sslpath + " -d " + virtualHostName + " -d www." + virtualHostName + " -d " + aliasDomain - else: - command = "/usr/local/CyberCP/bin/certbot certonly -n --expand --agree-tos --email " + adminEmail + " --webroot -w " + sslpath + " -d " + virtualHostName + " -d www." + virtualHostName - - else: - if serverIPAddress == ipRecords[2]: - - ipRecordsAlias = sslUtilities.getDNSRecords(aliasDomain) - - if serverIPAddress == ipRecordsAlias[1] and serverIPAddress == ipRecordsAlias[2]: - - command = "/usr/local/CyberCP/bin/certbot certonly -n --expand --agree-tos --email " + adminEmail + " --webroot -w " + sslpath + " -d " + virtualHostName + " -d " + aliasDomain + " -d www." + aliasDomain - - else: - if serverIPAddress == ipRecordsAlias[2]: - command = "/usr/local/CyberCP/bin/certbot certonly -n --expand --agree-tos --email " + adminEmail + " --webroot -w " + sslpath + " -d " + virtualHostName + " -d " + aliasDomain - else: - command = "/usr/local/CyberCP/bin/certbot certonly -n --expand --agree-tos --email " + adminEmail + " --webroot -w " + sslpath + " -d " + virtualHostName - - logging.CyberCPLogFileWriter.writeToFile( - "SSL is issued without 'www' due to DNS error for domain : " + virtualHostName) - else: - - ipRecordsAlias = sslUtilities.getDNSRecords(aliasDomain) - - if serverIPAddress == ipRecordsAlias[1] and serverIPAddress == ipRecordsAlias[2]: - command = "/usr/local/CyberCP/bin/certbot certonly -n --expand --agree-tos --email " + adminEmail + " --webroot -w " + sslpath + " -d " + aliasDomain + " -d www." + aliasDomain - else: - if serverIPAddress == ipRecordsAlias[2]: - command = "/usr/local/CyberCP/bin/certbot certonly -n --expand --agree-tos --email " + adminEmail + " --webroot -w " + sslpath + " -d " + aliasDomain - else: - return 0 - else: + try: logging.CyberCPLogFileWriter.writeToFile( - "Failed to obtain DNS records for " + virtualHostName + ", issuing self signed certificate.") + "Trying to obtain SSL for: " + virtualHostName + ", www." + virtualHostName + ", " + aliasDomain + " and www." + aliasDomain + ",") + + command = "/root/.acme.sh/acme.sh --issue -d " + virtualHostName + " -d www." + virtualHostName \ + + ' -d ' + aliasDomain + ' -d www.' + aliasDomain\ + + ' --cert-file ' + existingCertPath + '/cert.pem' + ' --key-file ' + existingCertPath + '/privkey.pem' \ + + ' --fullchain-file ' + existingCertPath + '/fullchain.pem' + ' -w ' + sslpath + ' --force' + + output = subprocess.check_output(shlex.split(command)) + logging.CyberCPLogFileWriter.writeToFile( + "Successfully obtained SSL for: " + virtualHostName + ", www." + virtualHostName + ", " + aliasDomain + "and www." + aliasDomain + ",") + + + except subprocess.CalledProcessError: + logging.CyberCPLogFileWriter.writeToFile( + "Failed to obtain SSL for: " + virtualHostName + ", www." + virtualHostName + ", " + aliasDomain + "and www." + aliasDomain + ",") return 0 - output = subprocess.check_output(shlex.split(command)) + ## - if output.find('Congratulations!') > -1: - return 1 - elif output.find('no action taken.') > -1: - return 1 - elif output.find('Failed authorization procedure') > -1: - logging.CyberCPLogFileWriter.writeToFile( - 'Failed authorization procedure for ' + virtualHostName + " while issuing Let's Encrypt SSL.") - return 0 - elif output.find('Too many SSL requests for this domain, please try to get SSL at later time.') > -1: - logging.CyberCPLogFileWriter.writeToFile( - 'Too many SSL requests for ' + virtualHostName + " please try to get SSL at later time.") - return 0 + if output.find('Cert success') > -1: + return 1 + else: + return 0 except BaseException,msg: logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [Failed to obtain SSL. [obtainSSLForADomain]]")