import os import random import string import sys import getpass from ee.core.fileutils import EEFileUtils from ee.core.mysql import EEMysql from ee.core.shellexec import EEShellExec def setup_domain(self, data): ee_domain_name = data['site_name'] ee_site_webroot = data['webroot'] print("Creating {0}, please wait...".format(ee_domain_name)) # write nginx config for file try: ee_site_nginx_conf = open('/etc/nginx/sites-available/{0}.conf' .format(ee_domain_name), 'w') self.app.render((data), 'virtualconf.mustache', out=ee_site_nginx_conf) ee_site_nginx_conf.close() except IOError as e: print("Unable to create nginx conf for {2} ({0}): {1}" .format(e.errno, e.strerror, ee_domain_name)) sys.exit(1) except Exception as e: print("{0}".format(e)) sys.exit(1) # create symbolic link for EEFileUtils.create_symlink(self, ['/etc/nginx/sites-available/{0}.conf' .format(ee_domain_name), '/etc/nginx/sites-enabled/{0}.conf' .format(ee_domain_name)]) # Creating htdocs & logs directory try: if not os.path.exists('{0}/htdocs'.format(ee_site_webroot)): os.makedirs('{0}/htdocs'.format(ee_site_webroot)) if not os.path.exists('{0}/logs'.format(ee_site_webroot)): os.makedirs('{0}/logs'.format(ee_site_webroot)) except Exception as e: print("{0}".format(e)) sys.exit(1) EEFileUtils.create_symlink(self, ['/var/log/nginx/{0}.access.log' .format(ee_domain_name), '{0}/logs/access.log' .format(ee_site_webroot)]) EEFileUtils.create_symlink(self, ['/var/log/nginx/{0}.error.log' .format(ee_domain_name), '{0}/logs/error.log' .format(ee_site_webroot)]) def setup_database(self, data): ee_domain_name = data['site_name'] ee_random = (''.join(random.sample(string.ascii_uppercase + string.ascii_lowercase + string.digits, 15))) ee_replace_dot = ee_domain_name.replace('.', '_') prompt_dbname = self.app.config.get('mysql', 'db-name') prompt_dbuser = self.app.config.get('mysql', 'db-user') ee_mysql_host = self.app.config.get('mysql', 'grant-host') print(ee_random) if prompt_dbname == 'True': try: ee_db_name = input('Enter the MySQL database name [{0}]:' .format(ee_replace_dot)) except EOFError as e: print("{0} {1}".format(e.errorno, e.strerror)) sys.exit(0) if not ee_db_name: ee_db_name = ee_replace_dot if prompt_dbuser: try: ee_db_username = input('Enter the MySQL database user name [{0}]: ' .format(ee_replace_dot)) ee_db_password = input('Enter the MySQL database password [{0}]: ' .format(ee_random)) except EOFError as e: print("{0} {1}".format(e.errorno, e.strerror)) sys.exit(1) if not ee_db_username: ee_db_username = ee_replace_dot if not ee_db_password: ee_db_password = ee_random if len(ee_db_name) > 16: print('Autofix MySQL username (ERROR 1470 (HY000)), please wait...' ) ee_random10 = (''.join(random.sample(string.ascii_uppercase + string.ascii_lowercase + string.digits, 10))) ee_db_name = (ee_db_name[0:6] + ee_random10) # create MySQL database EEMysql.execute(self, "create database \'{0}\'" .format(ee_db_name)) # Create MySQL User EEMysql.execute(self, "create user \'{0}\'@\'{1}\' identified by \'{2}\'" .format(ee_db_username, ee_mysql_host, ee_db_password)) # Grant permission EEMysql.execute(self, "grant all privileges on \'{0}\'.* to \'{1}\'@\'{2}\'" .format(ee_db_name, ee_db_username, ee_db_password)) def setup_wordpress(data): ee_domain_name = data['site_name'] ee_site_webroot = data['webroot'] prompt_wpprefix = self.app.config.get('wordpress', 'prefix') ee_wp_user = self.app.config.get('wordpress', 'user') ee_wp_pass = self.app.config.get('wordpress', 'password') ee_wp_email = self.app.config.get('wordpress', 'email') # Random characters ee_random = (''.join(random.sample(string.ascii_uppercase + string.ascii_lowercase + string.digits, 15))) print("Downloading Wordpress, please wait...") EEShellExec.cmd_exec(self, "wp --allow-root core download" "--path={0}/htdocs/".format(ee_site_webroot)) setup_database(self, data) if prompt_wpprefix == 'True': ee_wp_prefix = input('Enter the WordPress table prefix [wp_]: ' .format(ee_replace_dot)) while re.match('^[A-Za-z0-9_]*$', ee_wp_prefix): print("Warning: table prefix can only contain numbers, letters," "and underscores") ee_wp_prefix = input('Enter the WordPress table prefix [wp_]: ') if not ee_wp_prefix: ee_wp_prefix = 'wp_' # Modify wp-config.php & move outside the webroot '''EEFileUtils.copyfile(self, '{0}/htdocs/wp-config-sample.php' .format(ee_site_webroot), '{0}/wp-config.php'.format(ee_site_webroot)) EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), 'database_name_here', '') EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), 'database_name_here', '') EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), 'username_here', '') EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), 'password_here', '') EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), 'localhost', '') EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), 'wp_', '')''' EEShellExec.cmd_exec(self, "wp --allow-root core config" "--dbname={0} --dbprefix={1}" .format(ee_db_name, ee_wp_prefix) "--dbuser={2} --dbprefix={3}" .format(ee_db_user, ee_db_password)) EEFileUtils.mvfile('./wp-config.php', '../') # TODO code for salts here if not ee_wp_user: ee_wp_user = EEVariables.ee_user while not ee_wp_user: print("Warning: Usernames can have only alphanumeric" "characters, spaces, underscores, hyphens," "periods and the @ symbol.") ee_wp_user = input('Enter WordPress username: ') if not ee_wp_pass: ee_wp_pass = ee_random if not ee_wp_email: ee_wp_email = EEVariables.ee_email while not ee_wp_email: ee_wp_email = input('Enter WordPress email: ') print("Setting up WordPress, please wait...") EEShellExec.cmd_exec(self, "wp --allow-root core install" "--url=www.{0} --title=www.{0} --admin_name={1}" .format(ee_domain_name, ee_wp_user) "--admin_password={0} --admin_email={1}" .format(ee_wp_pass, ee_wp_email)) print("Updating WordPress permalink, please wait...") EEShellExec.cmd_exec("wp rewrite structure --allow-root" "/%year%/%monthnum%/%day%/%postname%/")