示例#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;
         }
     }
 }
示例#2
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;
                }
            }
        }
        private async Task PutTemplate(long id, AuthorInfo authorInfo, ITemplateDescriptor templateDescriptor)
        {
            await VerifyElementDescriptorsConsistency(templateDescriptor.Elements);

            var putRequest = new PutObjectRequest
            {
                Key         = id.ToString(),
                BucketName  = _bucketName,
                ContentType = ContentType.Json,
                ContentBody = JsonConvert.SerializeObject(templateDescriptor, SerializerSettings.Default),
                CannedACL   = S3CannedACL.PublicRead,
            };
            var metadataWrapper = MetadataCollectionWrapper.For(putRequest.Metadata);

            metadataWrapper.Write(MetadataElement.Author, authorInfo.Author);
            metadataWrapper.Write(MetadataElement.AuthorLogin, authorInfo.AuthorLogin);
            metadataWrapper.Write(MetadataElement.AuthorName, authorInfo.AuthorName);

            await _s3Client.PutObjectAsync(putRequest);
        }
示例#4
0
        internal static bool TryDecryptUpload(this IS3Client s3Client, string bucketName, string key, string filePath, AesCryptoServiceProvider aes, FileMetadata metadata)
        {
            try
            {
                using (var fileStream = FileUtilities.GetReadStream(filePath))
                    using (var cryptoStream = new CryptoStream(fileStream, aes.CreateDecryptor(), CryptoStreamMode.Read))
                        using (var lengthStream = new LengthStream(cryptoStream, metadata.Length))
                        {
                            string md5String = Convert.ToBase64String(metadata.MD5);

                            var request = new PutObjectRequest
                            {
                                BucketName  = bucketName,
                                Key         = key,
                                InputStream = lengthStream,
                                MD5Digest   = md5String
                            };

                            s3Client.PutObjectAsync(request).Wait();
                        }

                return(true);
            }

            catch (Exception exception)
            {
                var processedException = ExceptionUtilities.ProcessAmazonS3Exception(exception, null);

                if (processedException is UserErrorException)
                {
                    throw processedException;
                }

                Logger.LogLine($"Exception: {exception.Message}.");
                return(false);
            }
        }
示例#5
0
 public async Task <PutObjectResponse> PutObjectAsync(PutObjectRequest request)
 => await _s3Client.PutObjectAsync(request);
示例#6
0
        private async Task <string> PutObject(long id,
                                              string versionId,
                                              AuthorInfo authorInfo,
                                              IEnumerable <IObjectElementDescriptor> existingObjectElements,
                                              IObjectDescriptor objectDescriptor)
        {
            PreprocessObjectElements(objectDescriptor.Elements);
            await VerifyObjectElementsConsistency(id, objectDescriptor.Language, objectDescriptor.Elements);

            var metadataForBinaries = await RetrieveMetadataForBinaries(id, existingObjectElements, objectDescriptor.Elements);

            await _eventSender.SendAsync(_objectEventsTopic, new ObjectVersionCreatingEvent(id, versionId));

            var totalBinariesCount = 0;
            PutObjectRequest          putRequest;
            MetadataCollectionWrapper metadataWrapper;

            foreach (var elementDescriptor in objectDescriptor.Elements)
            {
                var(elementPersistenceValue, binariesCount) = ConvertToPersistenceValue(elementDescriptor.Value, metadataForBinaries);
                var elementPersistenceDescriptor = new ObjectElementPersistenceDescriptor(elementDescriptor, elementPersistenceValue);
                totalBinariesCount += binariesCount;
                putRequest          = new PutObjectRequest
                {
                    Key         = id.AsS3ObjectKey(elementDescriptor.Id),
                    BucketName  = _bucketName,
                    ContentType = ContentType.Json,
                    ContentBody = JsonConvert.SerializeObject(elementPersistenceDescriptor, SerializerSettings.Default),
                    CannedACL   = S3CannedACL.PublicRead
                };

                metadataWrapper = MetadataCollectionWrapper.For(putRequest.Metadata);
                metadataWrapper.Write(MetadataElement.Author, authorInfo.Author);
                metadataWrapper.Write(MetadataElement.AuthorLogin, authorInfo.AuthorLogin);
                metadataWrapper.Write(MetadataElement.AuthorName, authorInfo.AuthorName);

                await _s3Client.PutObjectAsync(putRequest);
            }

            var objectKey      = id.AsS3ObjectKey(Tokens.ObjectPostfix);
            var objectVersions = await _objectsStorageReader.GetObjectLatestVersions(id);

            var elementVersions             = objectVersions.Where(x => !x.Id.EndsWith(Tokens.ObjectPostfix)).ToList();
            var objectPersistenceDescriptor = new ObjectPersistenceDescriptor
            {
                TemplateId        = objectDescriptor.TemplateId,
                TemplateVersionId = objectDescriptor.TemplateVersionId,
                Language          = objectDescriptor.Language,
                Properties        = objectDescriptor.Properties,
                Elements          = elementVersions
            };

            putRequest = new PutObjectRequest
            {
                Key         = objectKey,
                BucketName  = _bucketName,
                ContentType = ContentType.Json,
                ContentBody = JsonConvert.SerializeObject(objectPersistenceDescriptor, SerializerSettings.Default),
                CannedACL   = S3CannedACL.PublicRead
            };

            metadataWrapper = MetadataCollectionWrapper.For(putRequest.Metadata);
            metadataWrapper.Write(MetadataElement.Author, authorInfo.Author);
            metadataWrapper.Write(MetadataElement.AuthorLogin, authorInfo.AuthorLogin);
            metadataWrapper.Write(MetadataElement.AuthorName, authorInfo.AuthorName);
            metadataWrapper.Write(
                MetadataElement.ModifiedElements,
                string.Join(Tokens.ModifiedElementsDelimiter.ToString(), objectDescriptor.Elements.Select(x => x.TemplateCode)));

            await _s3Client.PutObjectAsync(putRequest);

            _referencedBinariesMetric.Inc(totalBinariesCount);

            objectVersions = await _objectsStorageReader.GetObjectLatestVersions(id);

            return(objectVersions.Where(x => x.Id.EndsWith(Tokens.ObjectPostfix))
                   .Select(x => x.VersionId)
                   .Single());
        }
 public async Task <PutObjectResponse> PutObjectAsync(PutObjectRequest request)
 => await ExecuteS3Request(() => _s3Client.PutObjectAsync(request), request.BucketName);