示例#1
0
 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);
        }