X-Git-Url: https://scripts.mit.edu/gitweb/wizard.git/blobdiff_plain/db245eaf61b357b35c8d6e743e737fd2a7a8444e..5b428fce4566ed627ad61f204935aaa8bc367932:/wizard/app/wordpress.py diff --git a/wizard/app/wordpress.py b/wizard/app/wordpress.py index add10ff..bf77db4 100644 --- a/wizard/app/wordpress.py +++ b/wizard/app/wordpress.py @@ -2,6 +2,7 @@ import os import re import logging import distutils +import distutils.version import urlparse import hashlib import sqlalchemy.exc @@ -24,6 +25,10 @@ seed = util.dictmap(make_filename_regex_define, { 'WIZARD_SECURE_AUTH_KEY': 'SECURE_AUTH_KEY', 'WIZARD_LOGGED_IN_KEY': 'LOGGED_IN_KEY', 'WIZARD_NONCE_KEY': 'NONCE_KEY', + 'WIZARD_AUTH_SALT': 'AUTH_SALT', + 'WIZARD_SECURE_AUTH_SALT': 'SECURE_AUTH_SALT', + 'WIZARD_LOGGED_IN_SALT': 'LOGGED_IN_SALT', + 'WIZARD_NONCE_SALT': 'NONCE_SALT', }) class Application(app.Application): @@ -35,12 +40,25 @@ class Application(app.Application): substitutions.update(php.substitutions) install_schema = install.ArgSchema("db", "admin", "email", "title") deprecated_keys = set(['WIZARD_SECRETKEY']) - random_keys = set(['WIZARD_SECRETKEY', 'WIZARD_AUTH_KEY', 'WIZARD_SECURE_AUTH_KEY', 'WIZARD_LOGGED_IN_KEY', 'WIZARD_NONCE_KEY']) + random_keys = set([ + 'WIZARD_SECRETKEY', + 'WIZARD_AUTH_KEY', + 'WIZARD_SECURE_AUTH_KEY', + 'WIZARD_LOGGED_IN_KEY', + 'WIZARD_NONCE_KEY', + 'WIZARD_AUTH_SALT', + 'WIZARD_SECURE_AUTH_SALT', + 'WIZARD_LOGGED_IN_SALT', + 'WIZARD_NONCE_SALT', + ]) random_blacklist = set(['put your unique phrase here']) def urlFromExtract(self, deployment): try: meta = sql.connect(deployment.dsn) - wp_options = meta.tables["wp_options"] + try: + wp_options = meta.tables["wp_options"] + except KeyError: + return None query = wp_options.select(wp_options.c.option_name == 'home') return query.execute().fetchone()['option_value'] except sqlalchemy.exc.OperationalError: @@ -52,7 +70,7 @@ class Application(app.Application): def checkWeb(self, deployment): return self.checkWebPage(deployment, "", outputs=["= 3.4, now disallows empty prefix 'submit': 'Submit', 'step': '2', } @@ -97,13 +115,8 @@ class Application(app.Application): if "Finished" not in result and "Success" not in result: raise app.InstallFailure() - # not sure what to do about this - meta = sql.connect(options.dsn) - wp_options = meta.tables["wp_options"] - wp_options.update().where(wp_options.c.option_name == 'siteurl').values(option_value=options.web_path).execute() - wp_options.update().where(wp_options.c.option_name == 'home').values(option_value="http://%s%s" % (options.web_host, options.web_path)).execute() # XXX: what if missing leading slash; this should be put in a function - if version < distutils.version.LooseVersion("3.0"): + meta = sql.connect(options.dsn) wp_users = meta.tables["wp_users"] hashed_pass = hashlib.md5(options.admin_password).hexdigest() wp_users.update().where(wp_users.c.ID == 1).values(user_login=options.admin_name,user_nicename=options.admin_name,display_name=options.admin_name,user_pass=hashed_pass).execute() @@ -128,14 +141,18 @@ class Application(app.Application): php.ini_replace_vars() def upgrade(self, d, version, options): result = d.fetch("wp-admin/upgrade.php?step=1") - if "Upgrade Complete" not in result and "No Upgrade Required" not in result: + if "Upgrade Complete" not in result and "Update Complete" not in result and \ + "No Upgrade Required" not in result and "No Update Required" not in result: raise app.UpgradeFailure(result) + @app.throws_database_errors def backup(self, deployment, backup_dir, options): - app.backup_database(backup_dir, deployment) + sql.backup(backup_dir, deployment) + @app.throws_database_errors def restore(self, deployment, backup_dir, options): - app.restore_database(backup_dir, deployment) + sql.restore(backup_dir, deployment) + @app.throws_database_errors def remove(self, deployment, options): - app.remove_database(deployment) + sql.drop(deployment.dsn) Application.resolutions = { 'wp-config.php': [