public virtual async Task HandleEventAsync(EntityDeletedEventData <File> eventData)
        {
            if (_configurationProvider.Get(eventData.Entity.FileContainerName).RetainDeletedBlobs)
            {
                return;
            }

            if (await _fileRepository.FirstOrDefaultAsync(eventData.Entity.FileContainerName, eventData.Entity.BlobName) == null)
            {
                await _fileManager.DeleteBlobAsync(eventData.Entity);
            }
        }
Esempio n. 2
0
        public void Should_Property_Set_And_Get_Options_For_Different_Containers()
        {
            var testContainer1Config = _configurationProvider.Get <TestContainer1>();

            Assert.Equal(nameof(FakeFileProvider1), testContainer1Config.Provider);
            Assert.Equal("TestValue1", testContainer1Config.GetConfigurationOrDefault <string>("TestConfig1"));
            Assert.Equal("TestValueDefault", testContainer1Config.GetConfigurationOrDefault <string>("TestConfigDefault"));


            var testContainer2Config = _configurationProvider.Get <TestContainer2>();

            Assert.Equal(nameof(FakeFileProvider2), testContainer2Config.Provider);
            Assert.Equal("TestValue2", testContainer2Config.GetConfigurationOrDefault <string>("TestConfig2"));
            Assert.Equal("TestValueDefault", testContainer2Config.GetConfigurationOrDefault <string>("TestConfigDefault"));
        }
Esempio n. 3
0
        public virtual async Task <File> CreateAsync(string fileContainerName, Guid?ownerUserId, string fileName,
                                                     string mimeType, FileType fileType, File parent, byte[] fileContent)
        {
            Check.NotNullOrWhiteSpace(fileContainerName, nameof(File.FileContainerName));
            Check.NotNullOrWhiteSpace(fileName, nameof(File.FileName));

            var configuration = _configurationProvider.Get(fileContainerName);

            CheckFileName(fileName, configuration);
            CheckDirectoryHasNoFileContent(fileType, fileContent);

            var hashString = _fileContentHashProvider.GetHashString(fileContent);

            string blobName = null;

            if (fileType == FileType.RegularFile)
            {
                var existingFile = await _fileRepository.FirstOrDefaultAsync(fileContainerName, hashString, fileContent.LongLength);

                if (existingFile != null)
                {
                    Check.NotNullOrWhiteSpace(existingFile.BlobName, nameof(existingFile.BlobName));

                    blobName = existingFile.BlobName;
                }
                else
                {
                    blobName = await _fileBlobNameGenerator.CreateAsync(fileType, fileName, parent, mimeType,
                                                                        configuration.AbpBlobDirectorySeparator);
                }
            }

            if (configuration.EnableAutoRename)
            {
                if (await IsFileExistAsync(fileName, parent?.Id, fileContainerName, ownerUserId))
                {
                    fileName = await _fileRepository.GetFileNameWithNextSerialNumberAsync(fileName, parent?.Id,
                                                                                          fileContainerName, ownerUserId);
                }
            }

            await CheckFileNotExistAsync(fileName, parent?.Id, fileContainerName, ownerUserId);

            var file = new File(GuidGenerator.Create(), CurrentTenant.Id, parent, fileContainerName, fileName, mimeType,
                                fileType, 0, fileContent?.LongLength ?? 0, hashString, blobName, ownerUserId);

            return(file);
        }
Esempio n. 4
0
        public virtual async Task <CreateFileOutput> CreateAsync(CreateFileInput input)
        {
            var configuration = _configurationProvider.Get(input.FileContainerName);

            CheckFileSize(new Dictionary <string, long> {
                { input.FileName, input.Content?.LongLength ?? 0 }
            }, configuration);

            if (input.FileType == FileType.RegularFile)
            {
                CheckFileExtension(new[] { Path.GetExtension(input.FileName) }, configuration);
            }

            var parent = await TryGetEntityByNullableIdAsync(input.ParentId);

            var file = await _fileManager.CreateAsync(input.FileContainerName, input.OwnerUserId, input.FileName,
                                                      input.MimeType, input.FileType, parent, input.Content);

            await AuthorizationService.CheckAsync(CreateFileOperationInfoModel(file),
                                                  new OperationAuthorizationRequirement { Name = FileManagementPermissions.File.Create });

            await _repository.InsertAsync(file);

            await _fileManager.TrySaveBlobAsync(file, input.Content);

            return(await MapToCreateOutputDtoAsync(file));
        }
Esempio n. 5
0
        protected virtual async Task BasicCheckAsync(string permissionName, AuthorizationHandlerContext context,
                                                     OperationAuthorizationRequirement requirement, FileOperationInfoModel resource)
        {
            await SetFailIfUserDoesNotHavePermissionAsync(permissionName, context);

            await SetSucceedIfUserIsManagerAsync(context, requirement);

            var configuration = _configurationProvider.Get(resource.FileContainerName);

            await SetFailIfUserIsNotPersonalContainerOwnerAsync(configuration, context, resource);
        }
        public void Aliyun_Default_Configuration_Test()
        {
            var configuration = _configurationProvider.Get <DefaultContainer>();

            Assert.Equal("Aliyun", configuration.Provider);
            Assert.False(configuration.IsMultiTenant);
            Assert.True(configuration.HttpAccess);

            var aliyunConfiguration = configuration.GetAliyunConfiguration();

            Assert.Equal("oss-cn-hangzhou", aliyunConfiguration.RegionId);
            Assert.Equal("oss-cn-hangzhou.aliyuncs.com", aliyunConfiguration.Endpoint);
            Assert.Equal("aliyun-bucket", aliyunConfiguration.BucketName);
            Assert.Equal("AccessKeyId", aliyunConfiguration.AccessKeyId);
            Assert.Equal("AccessKeySecret", aliyunConfiguration.AccessKeySecret);
            Assert.False(aliyunConfiguration.UseSecurityTokenService);
            Assert.True(aliyunConfiguration.RoleArn.IsNullOrWhiteSpace());
            Assert.True(aliyunConfiguration.RoleSessionName.IsNullOrWhiteSpace());
            Assert.Equal(100, aliyunConfiguration.DurationSeconds);
            Assert.True(aliyunConfiguration.Policy.IsNullOrWhiteSpace());
            Assert.True(aliyunConfiguration.CreateContainerIfNotExists);
            Assert.Equal("key1", aliyunConfiguration.TemporaryCredentialsCacheKey);
        }
Esempio n. 7
0
 public static FileContainerConfiguration Get <TContainer>(
     this IFileContainerConfigurationProvider configurationProvider)
 {
     return(configurationProvider.Get(FileContainerNameAttribute.GetContainerName <TContainer>()));
 }