JetBrains.AppStore.NotaryApi/NotarySubmissionsS3Client.cs (28 lines of code) (raw):

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 /// <summary> /// Uploads submission to Apple S3 bucket. /// </summary> /// <param name="fileContent"></param> /// <param name="submissionAttributes"></param> /// <param name="useAccelerateEndpoint"></param> /// <returns>PutObject as returned by S3</returns> public static async Task<PutObjectResponse> 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); } }