#!/usr/bin/python3 """ Back up Untangle configurations via the web admin UI. """ from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser import configparser from os import chmod from urllib.error import HTTPError, URLError from sys import stderr from untangle.untangle import Untangle # Define a few exit codes. EXIT_OK = 0 EXIT_BACKUPS_FAILED = 1 # Create an argument parser using our docsctring as its description. parser = ArgumentParser(description = __doc__, formatter_class = ArgumentDefaultsHelpFormatter) parser.add_argument('-c', '--config-file', default='/etc/untangle-https-backup.ini', help='path to configuration file') args = parser.parse_args() # Default to success, change it if anything fails. status = EXIT_OK config = configparser.ConfigParser() config.read(args.config_file) for section in config.sections(): u = Untangle(config[section]) try: u.login() backup = u.get_backup() filename = u.name + '.backup' with open(filename, 'wb') as f: f.write(backup) chmod(filename, 0o600) except URLError as e: msg = u.name + ': ' + str(e.reason) + ' from ' + u.host print(msg, file=stderr) status = EXIT_BACKUPS_FAILED except HTTPError as e: msg = u.name + ': ' + 'HTTP error ' + str(e.code) + ' from ' + u.host print(msg, file=stderr) status = EXIT_BACKUPS_FAILED exit(status)