public GeneratePackageResponse Unflatten(PackageGenerationResult result) { DownloadUrl = result.DownloadUrl; FileName = result.FileName; GenerationStatusCode = result.ServeStatus; return(this); }
public async Task <PackageGenerationResult> GeneratePackageAsync(PackageGenerationInput input) { var packageDetails = await _packageGenerationService.ProcessForPackageAsync(input.PackageName); var result = new PackageGenerationResult(); switch (packageDetails.Status) { case PackageCreationStatus.NotCreated: result.ServeStatus = PackageServeStatus.FileDoesNotExist; break; case PackageCreationStatus.Success: case PackageCreationStatus.AlreadyExists: { var downloadKey = $"{Guid.NewGuid():N}"; var connectionIdentifierHash = _contextAccessor.HttpContext.GetRemoteIPAddress().ToString().ToSha256(); var downloadContents = new DownloadContentsModel { FilePath = packageDetails.FileLocation, ConnectionIdentifierHash = connectionIdentifierHash }; //Result is stored for 1 hour, but once accessed it gets deleted await _distributedCache.SetTimedObjectAsync(downloadKey, downloadContents, 1); //Finalize setting up the result object result.ServeStatus = PackageServeStatus.Ready; result.DownloadUrl = _linkGenerator.GetPathByAction("GetTool", "Download", new { guid = downloadKey }); result.FileName = packageDetails.ApplicationName; break; } } return(result); }