Beispiel #1
0
 private void ValidateCredentials(IS3Client s3Client, bool isDirectory)
 {
     try
     {
         if (isDirectory)
         {
             var putRequest = new PutObjectRequest
             {
                 BucketName = bucketName,
                 Key        = path
             };
             s3Client.PutObjectAsync(putRequest).Wait();
         }
         else
         {
             var getRequest = new GetObjectRequest
             {
                 BucketName = bucketName,
                 Key        = path,
                 ByteRange  = new ByteRange(0, 1)
             };
             s3Client.GetObjectAsync(getRequest).Wait();
         }
     }
     catch (Exception exception)
     {
         var processedException = ExceptionUtilities.ProcessAmazonS3Exception(exception, this);
         if (processedException is UserErrorException)
         {
             throw processedException;
         }
     }
 }
Beispiel #2
0
        private async Task <MemoryStream> GetRawStream(IObjectElementRawValue imageElementValue, CancellationToken token)
        {
            var response = await _s3Client.GetObjectAsync(_bucketName, imageElementValue.Raw, token);

            using (response.ResponseStream)
            {
                var memoryStream = new MemoryStream();
                response.ResponseStream.CopyTo(memoryStream);
                memoryStream.Position = 0;

                return(memoryStream);
            }
        }
Beispiel #3
0
        private void ValidateCredentials(IS3Client s3Client, bool isDirectory)
        {
            int maxRetryCount = MaxRetryCount;

            while (true)
            {
                try
                {
                    if (isDirectory)
                    {
                        var putRequest = new PutObjectRequest
                        {
                            BucketName = bucketName,
                            Key        = path
                        };
                        s3Client.PutObjectAsync(putRequest).Wait();
                    }
                    else
                    {
                        var getRequest = new GetObjectRequest
                        {
                            BucketName = bucketName,
                            Key        = path,
                            ByteRange  = new ByteRange(0, 1)
                        };
                        s3Client.GetObjectAsync(getRequest).Wait();
                    }
                    // validation successful. Break and return.
                    break;
                }
                catch (Exception exception)
                {
                    var processedException = AwsExceptionUtilities.TryConvertUserException(exception, this);
                    if (processedException is UserErrorException)
                    {
                        throw processedException;
                    }

                    Logger.WriteLine($"Failed to validate S3 credentials\n{processedException.Message}");

                    maxRetryCount--;
                    if (maxRetryCount >= 0)
                    {
                        continue;
                    }
                    Logger.WriteLine("Max retry limit reached for validating S3 credentials.");
                    throw processedException;
                }
            }
        }
        public async Task <TemplateDescriptor> GetTemplateDescriptor(long id, string versionId)
        {
            var objectVersionId = string.IsNullOrEmpty(versionId) ? await GetTemplateLatestVersion(id) : versionId;

            var templateDescriptor = await _memoryCache.GetOrCreateAsync(
                id.AsCacheEntryKey(objectVersionId),
                async entry =>
            {
                try
                {
                    using (var response = await _s3Client.GetObjectAsync(_bucketName, id.ToString(), objectVersionId))
                    {
                        var metadataWrapper = MetadataCollectionWrapper.For(response.Metadata);
                        var author          = metadataWrapper.Read <string>(MetadataElement.Author);
                        var authorLogin     = metadataWrapper.Read <string>(MetadataElement.AuthorLogin);
                        var authorName      = metadataWrapper.Read <string>(MetadataElement.AuthorName);

                        string json;
                        using (var reader = new StreamReader(response.ResponseStream, Encoding.UTF8))
                        {
                            json = reader.ReadToEnd();
                        }

                        var descriptor = new TemplateDescriptor
                        {
                            Id           = id,
                            VersionId    = objectVersionId,
                            LastModified = response.LastModified,
                            Author       = author,
                            AuthorLogin  = authorLogin,
                            AuthorName   = authorName
                        };
                        JsonConvert.PopulateObject(json, descriptor, SerializerSettings.Default);

                        entry.SetValue(descriptor)
                        .SetPriority(CacheItemPriority.NeverRemove);

                        return(descriptor);
                    }
                }
                catch (AmazonS3Exception ex) when(ex.StatusCode == HttpStatusCode.NotFound)
                {
                    throw new ObjectNotFoundException($"Template '{id}' version '{objectVersionId}' not found");
                }
            });

            return(templateDescriptor);
        }
        private async Task <IReadOnlyDictionary <int, IReadOnlyCollection <BinaryValidationError> > > VerifyObjectBinaryElementsConsistency(
            Language language,
            IReadOnlyCollection <IObjectElementDescriptor> elements)
        {
            var errors = new Dictionary <int, IReadOnlyCollection <BinaryValidationError> >();

            foreach (var binaryElement in elements.GetBinaryElements())
            {
                var elementErrors = new List <BinaryValidationError>();
                var constraints   = binaryElement.Constraints.For(language);
                var fileKeys      = binaryElement.Value.ExtractFileKeys();
                foreach (var fileKey in fileKeys)
                {
                    using (var getResponse = await _s3Client.GetObjectAsync(_filesBucketName, fileKey))
                    {
                        var memoryStream = new MemoryStream();
                        using (getResponse.ResponseStream)
                        {
                            await getResponse.ResponseStream.CopyToAsync(memoryStream);

                            memoryStream.Position = 0;
                        }

                        using (memoryStream)
                        {
                            var metadataWrapper = MetadataCollectionWrapper.For(getResponse.Metadata);
                            var fileName        = metadataWrapper.Read <string>(MetadataElement.Filename);
                            IUploadedFileMetadata binaryMetadata;
                            if (binaryElement.Value is ICompositeBitmapImageElementValue compositeBitmapImageElementValue &&
                                compositeBitmapImageElementValue.Raw != fileKey)
                            {
                                var image = compositeBitmapImageElementValue.SizeSpecificImages.First(x => x.Raw == fileKey);
                                binaryMetadata = new UploadedImageMetadata(
                                    fileName,
                                    getResponse.Headers.ContentType,
                                    getResponse.ContentLength,
                                    image.Size);
                            }
Beispiel #6
0
 public async Task <GetObjectResponse> GetObjectAsync(string bucketName, string key, CancellationToken cancellationToken = default)
 => await _s3Client.GetObjectAsync(bucketName, key, cancellationToken);
 public async Task <GetObjectResponse> GetObjectAsync(string bucketName, string key)
 => await _s3Client.GetObjectAsync(bucketName, key);
 public async Task <GetObjectResponse> GetObjectAsync(string bucketName, string key)
 => await ExecuteS3Request(() => _s3Client.GetObjectAsync(bucketName, key), bucketName);
 public async Task <GetObjectResponse> GetObjectAsync(string bucketName, string key, CancellationToken cancellationToken)
 => await ExecuteS3Request(() => _s3Client.GetObjectAsync(bucketName, key, cancellationToken), bucketName);