diff --git a/modoboa_installer/scripts/__init__.py b/modoboa_installer/scripts/__init__.py index 93043b3..cb32010 100644 --- a/modoboa_installer/scripts/__init__.py +++ b/modoboa_installer/scripts/__init__.py @@ -24,7 +24,7 @@ def install(appname, config, upgrade): utils.printcolor(u"{}".format(inst), utils.RED) sys.exit(1) -def backup(config, isBash): +def backup(config, bashArg): """Backup instance""" try: script = importlib.import_module( @@ -32,7 +32,7 @@ def backup(config, isBash): except ImportError: print("Error importing backup") try: - getattr(script, "Backup")(config, isBash).run() + getattr(script, "Backup")(config, bashArg).run() except utils.FatalError as inst: utils.printcolor(u"{}".format(inst), utils.RED) sys.exit(1) diff --git a/modoboa_installer/scripts/backup.py b/modoboa_installer/scripts/backup.py index 14c8dff..dc9cabb 100644 --- a/modoboa_installer/scripts/backup.py +++ b/modoboa_installer/scripts/backup.py @@ -5,6 +5,7 @@ import pwd import shutil import stat import datetime +import sys from .. import database from .. import utils @@ -27,12 +28,17 @@ class Backup(): #||--> mails # |--> vmails - def __init__(self, config, isBash): + def __init__(self, config, bashArg): self.config = config - self.isBash = isBash self.destinationPath = "" self.BACKUPDIRECTORY = ["mails/", "custom/", "databases/"] + self.isBash = False + self.bash = "" + if bashArg != "NOBASH": + self.isBash = True + self.bash = bashArg + def preparePath(self): pw = pwd.getpwnam("root") @@ -80,9 +86,16 @@ class Backup(): def setPath(self): """Setup backup directory""" if self.isBash: - date = datetime.datetime.now().strftime("%m_%d_%Y_%H_%M") - path = f"/modoboa_backup/backup_{date}/" - self.validatePath(path) + if self.bash == "TRUE": + date = datetime.datetime.now().strftime("%m_%d_%Y_%H_%M") + path = f"/modoboa_backup/backup_{date}/" + self.validatePath(path) + else : + validate = self.validatePath(self.bash) + if not validate: + print("provided bash is not right, exiting...") + print(f"Path provided : {self.bash}") + sys.exit(1) else: user_value = None while (user_value == '' or user_value == None or not self.validatePath(user_value)): diff --git a/run.py b/run.py index 7fbf7fd..fdfa2e3 100755 --- a/run.py +++ b/run.py @@ -81,18 +81,35 @@ def main(input_args): "--beta", action="store_true", default=False, help="Install latest beta release of Modoboa instead of the stable one") parser.add_argument( - "--bash", action="store_true", default=False, - help="(backup only) - For script usage, No interaction will be required") + "--bash", type=str, nargs=1, metavar="path", + help="(backup only) - For script usage, No interaction will be required, you must provide a path") + parser.add_argument( + "--sbash", action="store_true", default=False, + help="same as --bash but backup will be at /modoboa_backup/Backup_M_Y_d_H_M") parser.add_argument("domain", type=str, help="The main domain of your future mail server") args = parser.parse_args(input_args) if args.debug: utils.ENV["debug"] = True + + if not args.backup and (args.bash != None or args.sbash): + utils.printcolor("You provided --bash or --sbash without --backup, " + "if you want to do a backup, please provide --backup!", utils.RED) + return + elif args.bash != None and args.sbash : + utils.printcolor("You provided --bash PATH and --sbash at the same time. " + "Please provided only one!", utils.RED) + return + elif args.bash == "TRUE": + utils.printcolor("You can't pick *TRUE* as backup directory !", utils.RED) + utils.printcolor("Welcome to Modoboa installer!\n", utils.GREEN) wasConfigFileAlreadyThere = utils.check_config_file(args.configfile, args.interactive, args.upgrade, args.backup) + if args.stop_after_configfile_check or (not wasConfigFileAlreadyThere and args.backup): return + config = configparser.ConfigParser() with open(args.configfile) as fp: config.read_file(fp) @@ -107,7 +124,12 @@ def main(input_args): upgrade_disclaimer(config) elif args.backup: backup_disclamer() - scripts.backup(config, args.bash) + bashArg = "NOBASH" + if args.bash != None: + bashArg = args.bash + elif args.sbash: + bashArg = "TRUE" + scripts.backup(config, bashArg) return else: installation_disclaimer(args, config)