using System.IO; using System.Net.Mime; using System.Threading.Tasks; using Amazon; using Amazon.S3; using Amazon.S3.Model; using JetBrains.AppStore.NotaryApi.Schema; namespace JetBrains.AppStore.NotaryApi; // Notary Submissions Apple S3 client public static class NotarySubmissionsS3Client { // ReSharper disable once MemberCanBePrivate.Global public static readonly RegionEndpoint DefaultS3Region = RegionEndpoint.USWest2; // https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution/customizing_the_notarization_workflow /// /// Uploads submission to Apple S3 bucket. /// /// /// /// /// PutObject as returned by S3 public static async Task UploadSubmission(Stream fileContent, NewSubmissionResponse.Data.Attributes submissionAttributes, bool useAccelerateEndpoint = true) { using var s3Client = new AmazonS3Client(submissionAttributes.awsAccessKeyId, submissionAttributes.awsSecretAccessKey, submissionAttributes.awsSessionToken, new AmazonS3Config { UseAccelerateEndpoint = useAccelerateEndpoint, RegionEndpoint = DefaultS3Region }); var putObjectRequest = new PutObjectRequest { BucketName = submissionAttributes.bucket, Key = submissionAttributes.object_, InputStream = fileContent, Headers = { ContentType = MediaTypeNames.Application.Octet, ContentLength = fileContent.Length } }; return await s3Client.PutObjectAsync(putObjectRequest).ConfigureAwait(false); } }