using System; using Newtonsoft.Json; using LCU.Library.Internal.FileOperationsModels.Models; using LCU.Library.Internal.LCUServiceFactory.Configurations; using LCU.Api.Internal.FileOperations.Validations; namespace LCU.Api.Internal.FileOperations.Services.FileActionServices; public class DecryptFileDataService : FileActionService, IFileActionService, IActionService { public DecryptFileDataService(ServicesFactoryConfiguration servicesFactoryConfiguration) : base(servicesFactoryConfiguration) { } public RequestResponse ExecuteAction(QueueRequest queueRequest) { var requestResponse = new RequestResponse(); try { var request = JsonConvert.DeserializeObject(queueRequest.Request); requestResponse = PerformRequest(request); requestResponse.ReturnResponse = request; return requestResponse; } catch (Exception exception) { return RequestResponseHelper.ExceptionUpdateRequestResponse(requestResponse, queueRequest.FileOperationType, exception.Message); } } public RequestResponse PerformRequest(DecryptFileDataRequest request) { return OperationService.PerformOperation(request, IsRequestValid, ExecuteRequestAction); } private void ExecuteRequestAction(DecryptFileDataRequest request) { try { CryptoHelper.DecryptPgpFile(request.Source, request.Destination, request.KeySource, request.PassPhrase); } catch (Exception exception) { throw new Exception($"Exception thrown while trying to ExecuteRequestAction. " + $"Request: {JsonConvert.SerializeObject(request)}" + $"ExceptionMessage: {exception.Message}"); } } public RequestResponse PreQueueValidation(DecryptFileDataRequest originalRequest) { var requestResponse = new RequestResponse(); requestResponse = IsRequestValid(originalRequest, requestResponse); return requestResponse; } public RequestResponse IsRequestValid(DecryptFileDataRequest fileRequest, RequestResponse requestResponse) { requestResponse = FileValidation.ValidateDirectoryExists(fileRequest.SourcePath, requestResponse); requestResponse = FileValidation.ValidateDirectoryExists(fileRequest.DestinationPath, requestResponse); requestResponse = FileValidation.ValidateDirectoryExists(fileRequest.KeySourcePath, requestResponse); requestResponse = FileValidation.ValidateFileExists(fileRequest.Source, requestResponse); requestResponse = FileValidation.ValidateFileExists(fileRequest.KeySource, requestResponse); return requestResponse; } }