diff --git a/npbackup/__main__.py b/npbackup/__main__.py index 4381db7..f501907 100644 --- a/npbackup/__main__.py +++ b/npbackup/__main__.py @@ -403,10 +403,13 @@ This is free software, and you are welcome to redistribute it under certain cond if args.dry_run: dry_run = True - npbackup_runner = NPBackupRunner(config_dict=config_dict) - npbackup_runner.dry_run = dry_run - npbackup_runner.verbose = _VERBOSE - logger.info("Backend: {}".format(npbackup_runner.backend_version)) + try: + npbackup_runner = NPBackupRunner(config_dict=config_dict) + npbackup_runner.dry_run = dry_run + npbackup_runner.verbose = _VERBOSE + logger.info("Backend: {}".format(npbackup_runner.backend_version)) + except ValueError: + logger.critical("Cannot create backend") if args.check: if npbackup_runner.check_recent_backups(): diff --git a/npbackup/core/runner.py b/npbackup/core/runner.py index 3d265ba..efa4ecf 100644 --- a/npbackup/core/runner.py +++ b/npbackup/core/runner.py @@ -124,7 +124,8 @@ class NPBackupRunner: self.is_ready = False # Create an instance of restic wrapper - self.create_restic_runner() + if not self.create_restic_runner(): + raise ValueError("Cannot create backend runner") # Configure that instance self.apply_config_to_restic_runner() @@ -219,7 +220,7 @@ class NPBackupRunner: can_run = False self.is_ready = can_run if not can_run: - return + return None self.restic_runner = ResticRunner( repository=repository, password=password, @@ -385,6 +386,7 @@ class NPBackupRunner: # Preflight checks try: paths = self.config_dict["backup"]["paths"] + paths = [path.strip() for path in paths] except KeyError: logger.error("No backup paths defined.") return False @@ -393,6 +395,10 @@ class NPBackupRunner: try: if not isinstance(paths, list): paths = [paths] + for path in paths: + if path == self.config_dict["repo"]["repository"]: + logger.critical("Rayan error 40: You cannot backup destination in destination path. No inception allowed !") + return False except KeyError: logger.error("No backup source path given.") return False diff --git a/npbackup/gui/main.py b/npbackup/gui/main.py index 63abee9..5e87a2d 100644 --- a/npbackup/gui/main.py +++ b/npbackup/gui/main.py @@ -145,7 +145,11 @@ def get_gui_data(config_dict: dict) -> Tuple[bool, List[str]]: except KeyError: sg.Popup(_t("main_gui.repository_not_configured")) return None, None - runner = NPBackupRunner(config_dict=config_dict) + try: + runner = NPBackupRunner(config_dict=config_dict) + except ValueError: + sg.Popup(_t("config_gui.no_runner")) + return None, None if not runner.has_binary: sg.Popup(_t("config_gui.no_binary")) return None, None diff --git a/npbackup/translations/config_gui.en.yml b/npbackup/translations/config_gui.en.yml index fdb03f5..3f5dc4b 100644 --- a/npbackup/translations/config_gui.en.yml +++ b/npbackup/translations/config_gui.en.yml @@ -47,7 +47,8 @@ en: environment_variables: Environment variables format_equals: Format variable=value - np_binary: Cannot find backup backend. Please install restic binary from restic.net + no_runner: Cannot connect to backend. Please see logs + no_binary: Cannot find backup backend. Please install restic binary from restic.net configuration_saved: Configuration saved cannot_save_configuration: Could not save configuration. See logs for further info diff --git a/npbackup/translations/config_gui.fr.yml b/npbackup/translations/config_gui.fr.yml index e599adc..d482e5f 100644 --- a/npbackup/translations/config_gui.fr.yml +++ b/npbackup/translations/config_gui.fr.yml @@ -47,6 +47,7 @@ fr: environment_variables: Variables d'environnement format_equals: Format variable=valeur + no_runner: Impossible de se connecter au backend. Verifier les logs no_binary: Impossible de trouver le coeur de sauvegarde. Merci d'installer le binaire restic depuis restic.net configuration_saved: Configuration sauvegardée