public static Serializable.ImportExportStructure ImportBackup(string configurationFile, bool importMetadata, Func <string> getPassword, Dictionary <string, string> advancedOptions) { // This removes the ID and DBPath from the backup configuration. Serializable.ImportExportStructure importedStructure = Backups.LoadConfiguration(configurationFile, importMetadata, getPassword); // This will create the Duplicati-server.sqlite database file if it doesn't exist. Duplicati.Server.Database.Connection connection = Program.GetDatabaseConnection(advancedOptions); if (connection.Backups.Any(x => x.Name.Equals(importedStructure.Backup.Name, StringComparison.OrdinalIgnoreCase))) { throw new InvalidOperationException($"A backup with the name {importedStructure.Backup.Name} already exists."); } string error = connection.ValidateBackup(importedStructure.Backup, importedStructure.Schedule); if (!string.IsNullOrWhiteSpace(error)) { throw new InvalidOperationException(error); } // This creates a new ID and DBPath. connection.AddOrUpdateBackupAndSchedule(importedStructure.Backup, importedStructure.Schedule); return(importedStructure); }
public static void Main(string[] args) { if (args.Length < 2) { throw new ArgumentException($"Incorrect number of input arguments. {ConfigurationImporter.usageString}"); } string configurationFile = args[0]; Dictionary <string, string> importOptions = Duplicati.Library.Utility.CommandLineParser.ExtractOptions(new List <string> { args[1] }); if (!importOptions.TryGetValue("import-metadata", out string importMetadataString)) { throw new ArgumentException($"Invalid import-metadata argument. {ConfigurationImporter.usageString}"); } bool importMetadata = Duplicati.Library.Utility.Utility.ParseBool(importMetadataString, false); // This removes the ID and DBPath from the backup configuration. ImportExportStructure importedStructure = Backups.LoadConfiguration(configurationFile, importMetadata, () => ConfigurationImporter.ReadPassword($"Password for {configurationFile}: ")); Dictionary <string, string> advancedOptions = Duplicati.Library.Utility.CommandLineParser.ExtractOptions(new List <string>(args.Skip(2))); // This will create the Duplicati-server.sqlite database file if it doesn't exist. Duplicati.Server.Database.Connection connection = Program.GetDatabaseConnection(advancedOptions); if (connection.Backups.Any(x => x.Name.Equals(importedStructure.Backup.Name, StringComparison.OrdinalIgnoreCase))) { throw new InvalidOperationException($"A backup with the name {importedStructure.Backup.Name} already exists."); } string error = connection.ValidateBackup(importedStructure.Backup, importedStructure.Schedule); if (!string.IsNullOrWhiteSpace(error)) { throw new InvalidOperationException(error); } // This creates a new ID and DBPath. connection.AddOrUpdateBackupAndSchedule(importedStructure.Backup, importedStructure.Schedule); Console.WriteLine($"Imported \"{importedStructure.Backup.Name}\" with ID {importedStructure.Backup.ID} and local database at {importedStructure.Backup.DBPath}."); }