Edit file File name : test.py Content :import os import re import sys import socket import requests import time from requests.packages.urllib3.exceptions import InsecureRequestWarning from cement import App, Controller, ex from cement import shell requests.packages.urllib3.disable_warnings(InsecureRequestWarning) class Test(Controller): class Meta: label = 'test' description = 'test commands' stacked_on = 'base' stacked_type = 'nested' @ex( help='test a wordpress install', arguments=[ (['-d', '--domain'], {'help': 'domain of wp install', 'action': 'store', 'dest': 'domain'}), (['-p', '--port'], {'help': 'port of wp install', 'action': 'store', 'dest': 'port'}), (['-i', '--ip'], {'help': 'ip address of wp install', 'action': 'store', 'dest': 'ip'}), (['-r', '--retries'], {'help': 'number of retries', 'action': 'store', 'default': 20, 'dest': 'retries'}), ] ) def site(self): domain = self.app.pargs.domain ip = self.app.pargs.ip retries = int(self.app.pargs.retries) if not domain: self.app.log.fatal("domain is required") sys.exit(1) self.app.log.info("Testing domain %s" % domain) uri = 'http://' + domain + '/wp-admin/' if ip: try: socket.inet_pton(socket.AF_INET, ip) except Exception: self.app.log.fatal("ip address is invalid") sys.exit(1) uri = 'http://' + ip + '/wp-admin/' else: try: socket.gethostbyname(domain) except Exception: self.app.log.fatal("Unable to resolve %s to an IP address. Please provide an IP via --ip." % domain) sys.exit(1) for retry in range(retries): try: result = requests.get(uri, verify=False, allow_redirects=False, headers={'Host': domain}, timeout=5) except Exception: print("Connection refused") continue status = result.status_code if status == 200: self.app.log.info("HTTP code %s - Site test successful" % status) sys.exit(0) elif 300 <= status < 400: location = result.headers['Location'] print("Redirected by HTTP code %s to " % status + location) if ip: # If an ip is provided, we need to take the redirect and swap domain for ip again newdomain = location.split("//")[-1].split("/")[0] uri = location.replace(newdomain, ip, 1) domain = newdomain else: uri = location continue # On last attempt try /admin in case of plugin renaming /wp-admin if retry == (retries - 2): uri.replace('/wp-admin/', '/admin/', 1) print("HTTP code %s - sleeping 5 seconds" % status) time.sleep(5) # All retries failed - sad panda self.app.log.fatal("Site not in a functional state.") sys.exit(1) Save