diff --git a/plogical/ClusterManager.py b/plogical/ClusterManager.py index b2e1cc8b4..a6167ded8 100644 --- a/plogical/ClusterManager.py +++ b/plogical/ClusterManager.py @@ -172,8 +172,6 @@ class ClusterManager: writeToFile.close() - - ## new settings file restored command = 'systemctl stop mysql' @@ -187,6 +185,26 @@ class ClusterManager: command = 'systemctl restart lscpd' ProcessUtilities.normalExecutioner(command) + ## Update root password in cyberpanel file + + writeToFile = open('/etc/cyberpanel/mysqlPassword', 'w') + writeToFile.write(rootdbpassword) + writeToFile.close() + + ## Update root password in .my.cnf + + writeToFile = open('/home/cyberpanel/.my.cnf', 'w') + content = """[mysqldump] +user=root +password=%s +max_allowed_packet=1024M +[mysql] +user=root +password=%s""" % (rootdbpassword, rootdbpassword) + + writeToFile.write(content) + writeToFile.close() + self.PostStatus('Fail over server successfully booted. [200]') ### diff --git a/plogical/acl.py b/plogical/acl.py index a3f0b8869..310dcb7a8 100644 --- a/plogical/acl.py +++ b/plogical/acl.py @@ -43,6 +43,22 @@ class ACLManager: '"dkimManager": 1, "createFTPAccount": 1, "deleteFTPAccount": 1, "listFTPAccounts": 1, "createBackup": 1,' \ ' "restoreBackup": 0, "addDeleteDestinations": 0, "scheDuleBackups": 0, "remoteBackups": 0, "googleDriveBackups": 1, "manageSSL": 1, ' \ '"hostnameSSL": 0, "mailServerSSL": 0 }' + @staticmethod + def FindIfChild(): + try: + ipFile = "/etc/cyberpanel/machineIP" + f = open(ipFile) + ipData = f.read() + ipAddress = ipData.split('\n', 1)[0] + + config = json.loads(open('/home/cyberpanel/cluster', 'r').read()) + if config['failoverServerIP'] == ipAddress: + return 1 + else: + return 0 + except: + return 0 + @staticmethod def fetchIP(): diff --git a/plogical/mailUtilities.py b/plogical/mailUtilities.py index e3789c3d3..543274e5f 100755 --- a/plogical/mailUtilities.py +++ b/plogical/mailUtilities.py @@ -220,6 +220,7 @@ class mailUtilities: virtualHostName = extractDomain.domain + '.' + extractDomain.suffix if not os.path.exists("/etc/opendkim/keys/" + virtualHostName + "/default.txt"): + path = '/etc/opendkim/keys/%s' % (virtualHostName) command = 'mkdir %s' % (path) ProcessUtilities.normalExecutioner(command) @@ -231,7 +232,10 @@ class mailUtilities: else: command = "opendkim-genkey -D /etc/opendkim/keys/%s -d %s -s default" % ( virtualHostName, virtualHostName) + ProcessUtilities.normalExecutioner(command) + + ## Fix permissions command = "chown -R root:opendkim /etc/opendkim/keys/" + virtualHostName @@ -245,7 +249,6 @@ class mailUtilities: ## Edit key file - keyTable = "/etc/opendkim/KeyTable" configToWrite = "default._domainkey." + actualDomain + " " + actualDomain + ":default:/etc/opendkim/keys/" + virtualHostName + "/default.private\n" @@ -271,7 +274,7 @@ class mailUtilities: writeToFile.write(configToWrite) writeToFile.close() - ## Restart postfix and OpenDKIM + ## Restart Postfix and OpenDKIM command = "systemctl restart opendkim" subprocess.call(shlex.split(command)) diff --git a/plogical/vhost.py b/plogical/vhost.py index 78f39b980..ab56bb61c 100755 --- a/plogical/vhost.py +++ b/plogical/vhost.py @@ -86,7 +86,7 @@ class vhost: except OSError as msg: logging.CyberCPLogFileWriter.writeToFile( str(msg) + " [27 Not able create to directories for virtual host [createDirectories]]") - return [0, "[27 Not able to directories for virtual host [createDirectories]]"] + #return [0, "[27 Not able to directories for virtual host [createDirectories]]"] try: os.makedirs(pathHTML) @@ -107,7 +107,7 @@ class vhost: except OSError as msg: logging.CyberCPLogFileWriter.writeToFile( str(msg) + " [33 Not able to directories for virtual host [createDirectories]]") - return [0, "[33 Not able to directories for virtual host [createDirectories]]"] + #return [0, "[33 Not able to directories for virtual host [createDirectories]]"] try: os.makedirs(pathLogs) @@ -133,7 +133,7 @@ class vhost: except OSError as msg: logging.CyberCPLogFileWriter.writeToFile( str(msg) + " [39 Not able to directories for virtual host [createDirectories]]") - return [0, "[39 Not able to directories for virtual host [createDirectories]]"] + #return [0, "[39 Not able to directories for virtual host [createDirectories]]"] try: ## For configuration files permissions will be changed later globally. @@ -142,7 +142,7 @@ class vhost: except OSError as msg: logging.CyberCPLogFileWriter.writeToFile( str(msg) + " [45 Not able to directories for virtual host [createDirectories]]") - return [0, "[45 Not able to directories for virtual host [createDirectories]]"] + #return [0, "[45 Not able to directories for virtual host [createDirectories]]"] try: ## For configuration files permissions will be changed later globally. @@ -158,13 +158,13 @@ class vhost: except IOError as msg: logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [createDirectories]]") - return [0, "[45 Not able to directories for virtual host [createDirectories]]"] + #return [0, "[45 Not able to directories for virtual host [createDirectories]]"] return [1, 'None'] except BaseException as msg: logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [createDirectories]") - return [0, str(msg)] + return [1, str(msg)] @staticmethod def finalizeVhostCreation(virtualHostName, virtualHostUser): @@ -242,11 +242,12 @@ class vhost: confFile.write(currentConf) confFile.close() + return 1 + except BaseException as msg: logging.CyberCPLogFileWriter.writeToFile( str(msg) + " [IO Error with per host config file [perHostVirtualConf]]") return 0 - return 1 else: try: @@ -296,12 +297,13 @@ class vhost: command = 'redis-cli set %s' % (currentConf) ProcessUtilities.executioner(command) + return 1 except BaseException as msg: logging.CyberCPLogFileWriter.writeToFile( str(msg) + " [IO Error with per host config file [perHostVirtualConf]]") return 0 - return 1 + @staticmethod def createNONSSLMapEntry(virtualHostName): @@ -889,20 +891,23 @@ class vhost: except OSError as msg: logging.CyberCPLogFileWriter.writeToFile( str(msg) + "335 [Not able to create directories for virtual host [createDirectoryForDomain]]") - return [0, "[344 Not able to directories for virtual host [createDirectoryForDomain]]"] + #return [0, "[344 Not able to directories for virtual host [createDirectoryForDomain]]"] try: ## For configuration files permissions will be changed later globally. file = open(completePathToConfigFile, "w+") except IOError as msg: logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [createDirectoryForDomain]]") - return [0, "[351 Not able to directories for virtual host [createDirectoryForDomain]]"] + #return [0, "[351 Not able to directories for virtual host [createDirectoryForDomain]]"] if vhost.perHostDomainConf(path, masterDomain, domain, completePathToConfigFile, administratorEmail, phpVersion, virtualHostUser, openBasedir) == 1: return [1, "None"] else: - return [0, "[359 Not able to create per host virtual configurations [createDirectoryForDomain]"] + pass + #return [0, "[359 Not able to create per host virtual configurations [createDirectoryForDomain]"] + + return [1, "None"] @staticmethod def perHostDomainConf(path, masterDomain, domain, vhFile, administratorEmail, phpVersion, virtualHostUser, openBasedir): diff --git a/plogical/virtualHostUtilities.py b/plogical/virtualHostUtilities.py index fa7c11a07..ca9ea878a 100644 --- a/plogical/virtualHostUtilities.py +++ b/plogical/virtualHostUtilities.py @@ -138,6 +138,7 @@ class virtualHostUtilities: if LimitsCheck: if ACLManager.websitesLimitCheck(admin, 1) == 0: + logging.CyberCPLogFileWriter.statusWriter(tempStatusPath, 'You\'ve reached maximum websites limit as a reseller. [404]') return 0, 'You\'ve reached maximum websites limit as a reseller.' @@ -148,7 +149,6 @@ class virtualHostUtilities: logging.CyberCPLogFileWriter.statusWriter(tempStatusPath, 'This website already exists. [404]') return 0, "This website already exists." - if Websites.objects.filter(domain=virtualHostName.lstrip('www.')).count() > 0: logging.CyberCPLogFileWriter.statusWriter(tempStatusPath, 'This website already exists. [404]') return 0, "This website already exists." @@ -184,9 +184,12 @@ class virtualHostUtilities: logging.CyberCPLogFileWriter.statusWriter(tempStatusPath, 'This domain exists as Alias. [404]') return 0, "This domain exists as Alias." - retValues = mailUtilities.setupDKIM(virtualHostName) - if retValues[0] == 0: - raise BaseException(retValues[1]) + postfixPath = '/home/cyberpanel/postfix' + + if os.path.exists(postfixPath): + retValues = mailUtilities.setupDKIM(virtualHostName) + if retValues[0] == 0: + raise BaseException(retValues[1]) retValues = vhost.createDirectoryForVirtualHost(virtualHostName, administratorEmail, virtualHostUser, phpVersion, openBasedir) @@ -279,7 +282,8 @@ class virtualHostUtilities: return 1, 'None' except BaseException as msg: - vhost.deleteVirtualHostConfigurations(virtualHostName) + if ACLManager.FindIfChild() == 0: + vhost.deleteVirtualHostConfigurations(virtualHostName) logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [createVirtualHost]") logging.CyberCPLogFileWriter.statusWriter(tempStatusPath, str(msg) + " [404]") return 0, str(msg) @@ -437,155 +441,6 @@ class virtualHostUtilities: str(msg) + " [saveRewriteRules]") print("0," + str(msg)) - @staticmethod - def installWordPress(domainName, finalPath, virtualHostUser, dbName, dbUser, dbPassword): - try: - - FNULL = open(os.devnull, 'w') - - if not os.path.exists(finalPath): - os.makedirs(finalPath) - - ## checking for directories/files - - dirFiles = os.listdir(finalPath) - - if len(dirFiles) == 1: - if dirFiles[0] == ".well-known": - pass - else: - print("0,Target directory should be empty before installation, otherwise data loss could occur.") - return - elif len(dirFiles) == 0: - pass - else: - print("0,Target directory should be empty before installation, otherwise data loss could occur.") - return - - ## Get wordpress - - if not os.path.exists("latest.tar.gz"): - command = 'wget --no-check-certificate http://wordpress.org/latest.tar.gz -O latest.tar.gz' - cmd = shlex.split(command) - res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT) - - command = 'tar -xzvf latest.tar.gz -C ' + finalPath - - cmd = shlex.split(command) - - res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT) - - ## Get plugin - - if not os.path.exists("litespeed-cache.1.1.5.1.zip"): - command = 'wget --no-check-certificate https://downloads.wordpress.org/plugin/litespeed-cache.1.1.5.1.zip' - - cmd = shlex.split(command) - - res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT) - - command = 'unzip litespeed-cache.1.1.5.1.zip -d ' + finalPath - - cmd = shlex.split(command) - - res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT) - - root = finalPath - - for filename in listdir(join(root, 'wordpress')): - move(join(root, 'wordpress', filename), join(root, filename)) - - rmdir(root + "wordpress") - - shutil.copytree(finalPath + "litespeed-cache", finalPath + "wp-content/plugins/litespeed-cache") - shutil.rmtree(finalPath + "litespeed-cache") - - ## edit config file - - wpconfigfile = finalPath + "wp-config-sample.php" - - data = open(wpconfigfile, "r").readlines() - - writeDataToFile = open(wpconfigfile, "w") - - defDBName = "define('DB_NAME', '" + dbName + "');" + "\n" - defDBUser = "define('DB_USER', '" + dbUser + "');" + "\n" - defDBPassword = "define('DB_PASSWORD', '" + dbPassword + "');" + "\n" - - for items in data: - if items.find("DB_NAME") > -1: - if items.find("database_name_here") > -1: - writeDataToFile.writelines(defDBName) - elif items.find("DB_USER") > -1: - if items.find("username_here") > -1: - writeDataToFile.writelines(defDBUser) - elif items.find("DB_PASSWORD") > -1: - writeDataToFile.writelines(defDBPassword) - else: - writeDataToFile.writelines(items) - - writeDataToFile.close() - - os.rename(wpconfigfile, finalPath + 'wp-config.php') - - command = "chown -R " + virtualHostUser + ":" + virtualHostUser + " " + "/home/" + domainName + "/public_html/" - - cmd = shlex.split(command) - - res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT) - - vhost.addRewriteRules(domainName) - - installUtilities.installUtilities.reStartLiteSpeed() - - print("1,None") - - - except BaseException as msg: - # remove the downloaded files - try: - - shutil.rmtree(finalPath) - except: - logging.CyberCPLogFileWriter.writeToFile("shutil.rmtree(finalPath)") - - homeDir = "/home/" + domainName + "/public_html" - - if not os.path.exists(homeDir): - FNULL = open(os.devnull, 'w') - os.mkdir(homeDir) - command = "chown -R " + virtualHostUser + ":" + virtualHostUser + " " + homeDir - cmd = shlex.split(command) - res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT) - - print("0," + str(msg)) - return - - @staticmethod - def installJoomla(domainName, finalPath, virtualHostUser, dbName, dbUser, dbPassword, username, password, prefix, - sitename, tempStatusPath): - try: - - extraArgs = {} - extraArgs['domainName'] = domainName - extraArgs['finalPath'] = finalPath - extraArgs['virtualHostUser'] = virtualHostUser - extraArgs['dbName'] = dbName - extraArgs['dbUser'] = dbUser - extraArgs['dbPassword'] = dbPassword - extraArgs['username'] = username - extraArgs['password'] = password - extraArgs['prefix'] = prefix - extraArgs['sitename'] = sitename - extraArgs['tempStatusPath'] = tempStatusPath - - background = ApplicationInstaller('joomla', extraArgs) - background.start() - - - except BaseException as msg: - logging.CyberCPLogFileWriter.writeToFile(str(msg) + ' [installJoomla]') - @staticmethod def issueSSLForHostName(virtualHost, path): try: @@ -1145,9 +1000,12 @@ class virtualHostUtilities: logging.CyberCPLogFileWriter.statusWriter(tempStatusPath, 'DKIM Setup..,30') - retValues = mailUtilities.setupDKIM(virtualHostName) - if retValues[0] == 0: - raise BaseException(retValues[1]) + postFixPath = '/home/cyberpanel/postfix' + + if os.path.exists(postFixPath): + retValues = mailUtilities.setupDKIM(virtualHostName) + if retValues[0] == 0: + raise BaseException(retValues[1]) FNULL = open(os.devnull, 'w') @@ -1157,11 +1015,12 @@ class virtualHostUtilities: master.adminEmail, master.externalApp, openBasedir) if retValues[0] == 0: raise BaseException(retValues[1]) + if not os.path.exists(virtualHostUtilities.redisConf): retValues = vhost.createConfigInMainDomainHostFile(virtualHostName, masterDomain) - if retValues[0] == 0: - raise BaseException(retValues[1]) + if retValues[0] == 0: + raise BaseException(retValues[1]) ## Now restart litespeed after initial configurations are done @@ -1221,8 +1080,10 @@ class virtualHostUtilities: return 1, "None" except BaseException as msg: - numberOfWebsites = Websites.objects.count() + ChildDomains.objects.count() - vhost.deleteCoreConf(virtualHostName, numberOfWebsites) + if ACLManager.FindIfChild() == 0: + numberOfWebsites = Websites.objects.count() + ChildDomains.objects.count() + vhost.deleteCoreConf(virtualHostName, numberOfWebsites) + logging.CyberCPLogFileWriter.statusWriter(tempStatusPath, str(msg) + ". [404]") logging.CyberCPLogFileWriter.writeToFile( str(msg) + " [createDomain]")