/// <summary> /// Create a <see cref="IRestoring"/> instance in according to the command arguments /// </summary> public IRestoring Create(RestoringSettings settings) { settings = settings ?? throw new ArgumentNullException("settings"); // Loads the 3-DES key to decrypt the file from GCS Helpers.MandatoryValue("Crypto key", settings.CryptoKey); byte[] crypto_key, crypto_iv; if (!TripleDES.LoadKeyFile(settings.CryptoKey, out crypto_key, out crypto_iv, _logger)) { throw new SmkException(ErrorResources.TransformFactory_InstanciationFailed); } switch (settings.Repository) { case RestoringRepositorySource.GCS: { Helpers.MandatoryValue("source path", settings.Path); Helpers.MandatoryValue("source API key", settings.ApiKey); return(new GcsRestore(settings.Path, settings.ApiKey, crypto_key, crypto_iv, _logger)); } case RestoringRepositorySource.S3: { return(null); } default: throw new SmkException($"Unsupported repository source '{settings.Repository}"); } }
/// <summary> /// Create a <see cref="ITransforming"/> instance in according to the command arguments /// </summary> public ITransforming Create(TransformSettings settings) { settings = settings ?? throw new ArgumentNullException("settings"); byte[] key, iv; // Creates the transformation instance switch (settings.Kind) { case TransformKind.Secure: { Helpers.MandatoryValue("key filename", settings.TripleDesFilename); if (!TripleDES.LoadKeyFile(settings.TripleDesFilename, out key, out iv, _logger)) { throw new SmkException(ErrorResources.TransformFactory_InstanciationFailed); } SecureTransform trans = new SecureTransform(key, iv, _logger); trans.Logger = _logger; return(trans); } case TransformKind.Unsecure: { Helpers.MandatoryValue("key filename", settings.TripleDesFilename); if (!TripleDES.LoadKeyFile(settings.TripleDesFilename, out key, out iv, _logger)) { return(null); } UnsecureTransform dest = new UnsecureTransform(key, iv, _logger); dest.Logger = _logger; return(dest); } case TransformKind.None: { return(null); } default: throw new SmkException($"Unsupported transformation kind '{settings.Kind}"); } }