PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /opt/sharedrads/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //opt/sharedrads/suspend_domain |
#!/opt/imh-python/bin/python3 """IMH/HUB ShareRADs - suspend_domain.py""" # Writen by Michael B michaelb@inmotionhostin.com import sys import pwd import syslog from argparse import ArgumentParser from pathlib import Path import os import time from cpapis import whmapi1 LOG_FILE = '/var/log/suspension.log' def logdate(): """Format date for suspension log""" return time.strftime("%Y-%m-%d:%H:%M:%S %Z", time.localtime(time.time())) def log_suspension(domain, susp_type, comment): """Log domain suspension""" procname = os.path.basename(sys.argv[0]) sudo_user = os.getenv("SUDO_USER") blame = get_calling_username() entry = 'Domain: {} [{}] {}: "{}"'.format( domain, susp_type.upper(), blame, comment or '-' ) syslog.openlog(procname) syslog.syslog(entry) with open(LOG_FILE, 'a', encoding='utf-8') as log_f: log_f.write(f'{logdate()} {sudo_user}: {entry}\n') def get_calling_username(): """Get username which ran this script""" try: blame = '{}:{}'.format( os.getlogin(), pwd.getpwuid(os.geteuid()).pw_name ) except OSError: blame = pwd.getpwuid(os.geteuid()).pw_name return blame def suspend_domain(docroot: str, domain: str): """Suspend a domain via .htaccess""" path = os.path.join(docroot, '.htaccess') if os.path.isfile(path): os.rename(path, '%s.suspended' % path) print(".htaccess found. Moving and placing suspension .htaccess") else: Path(path + ".suspended").touch(mode=0o644) with open(path, 'w', encoding='utf-8') as hta_f: hta_f.write("RedirectMatch .* http://%s/unavailable.html\n" % domain) log_suspension(domain, "suspended", 'via suspend_domain') print("Domain %s has been suspended." % domain) def unsuspend_domain(docroot: str, domain: str): """Unsuspend a domain via .htaccess""" path = os.path.join(docroot, '.htaccess') if os.path.isfile(path + ".suspended"): os.remove(path) os.rename(path + ".suspended", path) log_suspension(domain, "unsuspended", 'via suspend_domain') else: print("Domain %s doesn't appear to be suspended" % domain) print("Domain %s has been unsuspended" % domain) def parse_args() -> tuple[bool, list[str]]: parser = ArgumentParser(description=__doc__) group = parser.add_mutually_exclusive_group(required=True) group.add_argument( "-s", "--suspend", nargs='+', help="Suspends the domain listed" ) group.add_argument( "-u", "--unsuspend", nargs='+', help="Unsuspends the domain specified" ) args = parser.parse_args() if args.suspend: return True, args.suspend return False, args.unsuspend def main(): """Main logic of suspend_domain""" suspend, domains = parse_args() rcode = 0 for domain in domains: try: api = whmapi1('domainuserdata', {'domain': domain}, check=True) domainroot = api['data']['userdata']['documentroot'] except Exception as exc: print(exc, file=sys.stderr) print( f'Unable to get documentroot for {domain} from whmapi1', file=sys.stderr, ) rcode = 2 continue if suspend: suspend_domain(domainroot, domain) else: unsuspend_domain(domainroot, domain) sys.exit(rcode) if __name__ == '__main__': main()