2022-03-03 17:33:11 +00:00
namespace ASC.Files.Api ;
public class SecutiryController : ApiControllerBase
{
private readonly FileStorageService < int > _fileStorageServiceInt ;
private readonly FileStorageService < string > _fileStorageServiceString ;
2022-03-08 17:37:23 +00:00
private readonly SecurityControllerHelper < int > _securityControllerHelperInt ;
private readonly SecurityControllerHelper < string > _securityControllerHelperString ;
2022-03-03 17:33:11 +00:00
public SecutiryController (
FileStorageService < int > fileStorageServiceInt ,
2022-03-08 17:37:23 +00:00
FileStorageService < string > fileStorageServiceString ,
SecurityControllerHelper < int > securityControllerHelperInt ,
SecurityControllerHelper < string > securityControllerHelperString )
2022-03-03 17:33:11 +00:00
{
_fileStorageServiceInt = fileStorageServiceInt ;
2022-03-08 17:37:23 +00:00
_fileStorageServiceString = fileStorageServiceString ;
_securityControllerHelperInt = securityControllerHelperInt ;
_securityControllerHelperString = securityControllerHelperString ;
2022-03-03 17:33:11 +00:00
}
[Create("owner")]
2022-03-05 14:41:47 +00:00
public IAsyncEnumerable < FileEntryDto > ChangeOwnerFromBodyAsync ( [ FromBody ] ChangeOwnerRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-05 14:41:47 +00:00
return ChangeOwnerAsync ( inDto ) ;
2022-03-03 17:33:11 +00:00
}
[Create("owner")]
[Consumes("application/x-www-form-urlencoded")]
2022-03-05 14:41:47 +00:00
public IAsyncEnumerable < FileEntryDto > ChangeOwnerFromFormAsync ( [ FromForm ] ChangeOwnerRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-05 14:41:47 +00:00
return ChangeOwnerAsync ( inDto ) ;
2022-03-03 17:33:11 +00:00
}
/// <summary>
/// Returns the external link to the shared file with the ID specified in the request
/// </summary>
/// <summary>
/// File external link
/// </summary>
/// <param name="fileId">File ID</param>
/// <param name="share">Access right</param>
/// <category>Files</category>
/// <returns>Shared file link</returns>
[Update("{fileId}/sharedlinkAsync")]
2022-03-05 14:41:47 +00:00
public async Task < object > GenerateSharedLinkFromBodyAsync ( string fileId , [ FromBody ] GenerateSharedLinkRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return await _securityControllerHelperString . GenerateSharedLinkAsync ( fileId , inDto . Share ) ;
2022-03-03 17:33:11 +00:00
}
[Update("{fileId:int}/sharedlinkAsync")]
2022-03-05 14:41:47 +00:00
public async Task < object > GenerateSharedLinkFromBodyAsync ( int fileId , [ FromBody ] GenerateSharedLinkRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return await _securityControllerHelperInt . GenerateSharedLinkAsync ( fileId , inDto . Share ) ;
2022-03-03 17:33:11 +00:00
}
[Update("{fileId}/sharedlinkAsync")]
[Consumes("application/x-www-form-urlencoded")]
2022-03-05 14:41:47 +00:00
public async Task < object > GenerateSharedLinkFromFormAsync ( string fileId , [ FromForm ] GenerateSharedLinkRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return await _securityControllerHelperString . GenerateSharedLinkAsync ( fileId , inDto . Share ) ;
2022-03-03 17:33:11 +00:00
}
[Update("{fileId:int}/sharedlinkAsync")]
[Consumes("application/x-www-form-urlencoded")]
2022-03-05 14:41:47 +00:00
public async Task < object > GenerateSharedLinkFromFormAsync ( int fileId , [ FromForm ] GenerateSharedLinkRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return await _securityControllerHelperInt . GenerateSharedLinkAsync ( fileId , inDto . Share ) ;
2022-03-03 17:33:11 +00:00
}
/// <summary>
/// Returns the detailed information about shared file with the ID specified in the request
/// </summary>
/// <short>File sharing</short>
/// <category>Sharing</category>
/// <param name="fileId">File ID</param>
/// <returns>Shared file information</returns>
[Read("file/{fileId}/share")]
2022-03-04 10:25:12 +00:00
public Task < IEnumerable < FileShareDto > > GetFileSecurityInfoAsync ( string fileId )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _securityControllerHelperString . GetFileSecurityInfoAsync ( fileId ) ;
2022-03-03 17:33:11 +00:00
}
[Read("file/{fileId:int}/share")]
2022-03-04 10:25:12 +00:00
public Task < IEnumerable < FileShareDto > > GetFileSecurityInfoAsync ( int fileId )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _securityControllerHelperInt . GetFileSecurityInfoAsync ( fileId ) ;
2022-03-03 17:33:11 +00:00
}
/// <summary>
/// Returns the detailed information about shared folder with the ID specified in the request
/// </summary>
/// <short>Folder sharing</short>
/// <param name="folderId">Folder ID</param>
/// <category>Sharing</category>
/// <returns>Shared folder information</returns>
[Read("folder/{folderId}/share")]
2022-03-04 10:25:12 +00:00
public Task < IEnumerable < FileShareDto > > GetFolderSecurityInfoAsync ( string folderId )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _securityControllerHelperString . GetFolderSecurityInfoAsync ( folderId ) ;
2022-03-03 17:33:11 +00:00
}
[Read("folder/{folderId:int}/share")]
2022-03-04 10:25:12 +00:00
public Task < IEnumerable < FileShareDto > > GetFolderSecurityInfoAsync ( int folderId )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _securityControllerHelperInt . GetFolderSecurityInfoAsync ( folderId ) ;
2022-03-03 17:33:11 +00:00
}
[Create("share")]
2022-03-05 14:41:47 +00:00
public async Task < IEnumerable < FileShareDto > > GetSecurityInfoFromBodyAsync ( [ FromBody ] BaseBatchRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-05 14:41:47 +00:00
var ( folderIntIds , folderStringIds ) = FileOperationsManager . GetIds ( inDto . FolderIds ) ;
var ( fileIntIds , fileStringIds ) = FileOperationsManager . GetIds ( inDto . FileIds ) ;
2022-03-03 17:33:11 +00:00
2022-03-04 10:25:12 +00:00
var result = new List < FileShareDto > ( ) ;
2022-03-08 17:37:23 +00:00
result . AddRange ( await _securityControllerHelperInt . GetSecurityInfoAsync ( fileIntIds , folderIntIds ) ) ;
result . AddRange ( await _securityControllerHelperString . GetSecurityInfoAsync ( fileStringIds , folderStringIds ) ) ;
2022-03-03 17:33:11 +00:00
return result ;
}
[Create("share")]
[Consumes("application/x-www-form-urlencoded")]
2022-03-05 14:41:47 +00:00
public async Task < IEnumerable < FileShareDto > > GetSecurityInfoFromFormAsync ( [ FromForm ] [ ModelBinder ( BinderType = typeof ( BaseBatchModelBinder ) ) ] BaseBatchRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-05 14:41:47 +00:00
var ( folderIntIds , folderStringIds ) = FileOperationsManager . GetIds ( inDto . FolderIds ) ;
var ( fileIntIds , fileStringIds ) = FileOperationsManager . GetIds ( inDto . FileIds ) ;
2022-03-03 17:33:11 +00:00
2022-03-04 10:25:12 +00:00
var result = new List < FileShareDto > ( ) ;
2022-03-08 17:37:23 +00:00
result . AddRange ( await _securityControllerHelperInt . GetSecurityInfoAsync ( fileIntIds , folderIntIds ) ) ;
result . AddRange ( await _securityControllerHelperString . GetSecurityInfoAsync ( fileStringIds , folderStringIds ) ) ;
2022-03-03 17:33:11 +00:00
return result ;
}
/// <summary>
/// Removes sharing rights for the group with the ID specified in the request
/// </summary>
/// <param name="folderIds">Folders ID</param>
/// <param name="fileIds">Files ID</param>
/// <short>Remove group sharing rights</short>
/// <category>Sharing</category>
/// <returns>Shared file information</returns>
[Delete("share")]
2022-03-05 14:41:47 +00:00
public async Task < bool > RemoveSecurityInfoAsync ( BaseBatchRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-05 14:41:47 +00:00
var ( folderIntIds , folderStringIds ) = FileOperationsManager . GetIds ( inDto . FolderIds ) ;
var ( fileIntIds , fileStringIds ) = FileOperationsManager . GetIds ( inDto . FileIds ) ;
2022-03-03 17:33:11 +00:00
2022-03-08 17:37:23 +00:00
await _securityControllerHelperInt . RemoveSecurityInfoAsync ( fileIntIds , folderIntIds ) ;
await _securityControllerHelperString . RemoveSecurityInfoAsync ( fileStringIds , folderStringIds ) ;
2022-03-03 17:33:11 +00:00
return true ;
}
[Update("{fileId:int}/setacelink")]
2022-03-05 14:41:47 +00:00
public Task < bool > SetAceLinkAsync ( int fileId , [ FromBody ] GenerateSharedLinkRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _fileStorageServiceInt . SetAceLinkAsync ( fileId , inDto . Share ) ;
2022-03-03 17:33:11 +00:00
}
[Update("{fileId}/setacelink")]
2022-03-05 14:41:47 +00:00
public Task < bool > SetAceLinkAsync ( string fileId , [ FromBody ] GenerateSharedLinkRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _fileStorageServiceString . SetAceLinkAsync ( fileId , inDto . Share ) ;
2022-03-03 17:33:11 +00:00
}
/// <summary>
/// Sets sharing settings for the file with the ID specified in the request
/// </summary>
/// <param name="fileId">File ID</param>
/// <param name="share">Collection of sharing rights</param>
/// <param name="notify">Should notify people</param>
/// <param name="sharingMessage">Sharing message to send when notifying</param>
/// <short>Share file</short>
/// <category>Sharing</category>
/// <remarks>
/// Each of the FileShareParams must contain two parameters: 'ShareTo' - ID of the user with whom we want to share and 'Access' - access type which we want to grant to the user (Read, ReadWrite, etc)
/// </remarks>
/// <returns>Shared file information</returns>
[Update("file/{fileId}/share")]
2022-03-05 14:41:47 +00:00
public Task < IEnumerable < FileShareDto > > SetFileSecurityInfoFromBodyAsync ( string fileId , [ FromBody ] SecurityInfoRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _securityControllerHelperString . SetFileSecurityInfoAsync ( fileId , inDto . Share , inDto . Notify , inDto . SharingMessage ) ;
2022-03-03 17:33:11 +00:00
}
[Update("file/{fileId:int}/share")]
2022-03-05 14:41:47 +00:00
public Task < IEnumerable < FileShareDto > > SetFileSecurityInfoFromBodyAsync ( int fileId , [ FromBody ] SecurityInfoRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _securityControllerHelperInt . SetFileSecurityInfoAsync ( fileId , inDto . Share , inDto . Notify , inDto . SharingMessage ) ;
2022-03-03 17:33:11 +00:00
}
[Update("file/{fileId}/share")]
[Consumes("application/x-www-form-urlencoded")]
2022-03-05 14:41:47 +00:00
public Task < IEnumerable < FileShareDto > > SetFileSecurityInfoFromFormAsync ( string fileId , [ FromForm ] SecurityInfoRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _securityControllerHelperString . SetFileSecurityInfoAsync ( fileId , inDto . Share , inDto . Notify , inDto . SharingMessage ) ;
2022-03-03 17:33:11 +00:00
}
[Update("file/{fileId:int}/share")]
[Consumes("application/x-www-form-urlencoded")]
2022-03-05 14:41:47 +00:00
public Task < IEnumerable < FileShareDto > > SetFileSecurityInfoFromFormAsync ( int fileId , [ FromForm ] SecurityInfoRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _securityControllerHelperInt . SetFileSecurityInfoAsync ( fileId , inDto . Share , inDto . Notify , inDto . SharingMessage ) ;
2022-03-03 17:33:11 +00:00
}
/// <summary>
/// Sets sharing settings for the folder with the ID specified in the request
/// </summary>
/// <short>Share folder</short>
/// <param name="folderId">Folder ID</param>
/// <param name="share">Collection of sharing rights</param>
/// <param name="notify">Should notify people</param>
/// <param name="sharingMessage">Sharing message to send when notifying</param>
/// <remarks>
/// Each of the FileShareParams must contain two parameters: 'ShareTo' - ID of the user with whom we want to share and 'Access' - access type which we want to grant to the user (Read, ReadWrite, etc)
/// </remarks>
/// <category>Sharing</category>
/// <returns>Shared folder information</returns>
[Update("folder/{folderId}/share")]
2022-03-05 14:41:47 +00:00
public Task < IEnumerable < FileShareDto > > SetFolderSecurityInfoFromBodyAsync ( string folderId , [ FromBody ] SecurityInfoRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _securityControllerHelperString . SetFolderSecurityInfoAsync ( folderId , inDto . Share , inDto . Notify , inDto . SharingMessage ) ;
2022-03-03 17:33:11 +00:00
}
[Update("folder/{folderId:int}/share")]
2022-03-05 14:41:47 +00:00
public Task < IEnumerable < FileShareDto > > SetFolderSecurityInfoFromBodyAsync ( int folderId , [ FromBody ] SecurityInfoRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _securityControllerHelperInt . SetFolderSecurityInfoAsync ( folderId , inDto . Share , inDto . Notify , inDto . SharingMessage ) ;
2022-03-03 17:33:11 +00:00
}
[Update("folder/{folderId}/share")]
[Consumes("application/x-www-form-urlencoded")]
2022-03-05 14:41:47 +00:00
public Task < IEnumerable < FileShareDto > > SetFolderSecurityInfoFromFormAsync ( string folderId , [ FromForm ] SecurityInfoRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _securityControllerHelperString . SetFolderSecurityInfoAsync ( folderId , inDto . Share , inDto . Notify , inDto . SharingMessage ) ;
2022-03-03 17:33:11 +00:00
}
[Update("folder/{folderId:int}/share")]
[Consumes("application/x-www-form-urlencoded")]
2022-03-05 14:41:47 +00:00
public Task < IEnumerable < FileShareDto > > SetFolderSecurityInfoFromFormAsync ( int folderId , [ FromForm ] SecurityInfoRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-08 17:37:23 +00:00
return _securityControllerHelperInt . SetFolderSecurityInfoAsync ( folderId , inDto . Share , inDto . Notify , inDto . SharingMessage ) ;
2022-03-03 17:33:11 +00:00
}
[Update("share")]
2022-03-05 14:41:47 +00:00
public Task < IEnumerable < FileShareDto > > SetSecurityInfoFromBodyAsync ( [ FromBody ] SecurityInfoRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-05 14:41:47 +00:00
return SetSecurityInfoAsync ( inDto ) ;
2022-03-03 17:33:11 +00:00
}
[Update("share")]
[Consumes("application/x-www-form-urlencoded")]
2022-03-05 14:41:47 +00:00
public Task < IEnumerable < FileShareDto > > SetSecurityInfoFromFormAsync ( [ FromForm ] SecurityInfoRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-05 14:41:47 +00:00
return SetSecurityInfoAsync ( inDto ) ;
2022-03-03 17:33:11 +00:00
}
2022-03-05 14:41:47 +00:00
private async IAsyncEnumerable < FileEntryDto > ChangeOwnerAsync ( ChangeOwnerRequestDto inDto )
2022-03-03 17:33:11 +00:00
{
2022-03-05 14:41:47 +00:00
var ( folderIntIds , folderStringIds ) = FileOperationsManager . GetIds ( inDto . FolderIds ) ;
var ( fileIntIds , fileStringIds ) = FileOperationsManager . GetIds ( inDto . FileIds ) ;
2022-03-03 17:33:11 +00:00
var result = AsyncEnumerable . Empty < FileEntry > ( ) ;
2022-03-05 14:41:47 +00:00
result . Concat ( _fileStorageServiceInt . ChangeOwnerAsync ( folderIntIds , fileIntIds , inDto . UserId ) ) ;
result . Concat ( _fileStorageServiceString . ChangeOwnerAsync ( folderStringIds , fileStringIds , inDto . UserId ) ) ;
2022-03-03 17:33:11 +00:00
await foreach ( var e in result )
{
2022-03-08 17:37:23 +00:00
yield return await _securityControllerHelperInt . GetFileEntryWrapperAsync ( e ) ;
2022-03-03 17:33:11 +00:00
}
}
2022-03-04 10:25:12 +00:00
2022-03-05 14:41:47 +00:00
private async Task < IEnumerable < FileShareDto > > SetSecurityInfoAsync ( SecurityInfoRequestDto inDto )
2022-03-04 10:25:12 +00:00
{
2022-03-05 14:41:47 +00:00
var ( folderIntIds , folderStringIds ) = FileOperationsManager . GetIds ( inDto . FolderIds ) ;
var ( fileIntIds , fileStringIds ) = FileOperationsManager . GetIds ( inDto . FileIds ) ;
2022-03-04 10:25:12 +00:00
var result = new List < FileShareDto > ( ) ;
2022-03-08 17:37:23 +00:00
result . AddRange ( await _securityControllerHelperInt . SetSecurityInfoAsync ( fileIntIds , folderIntIds , inDto . Share , inDto . Notify , inDto . SharingMessage ) ) ;
result . AddRange ( await _securityControllerHelperString . SetSecurityInfoAsync ( fileStringIds , folderStringIds , inDto . Share , inDto . Notify , inDto . SharingMessage ) ) ;
2022-03-04 10:25:12 +00:00
return result ;
}
2022-03-03 17:33:11 +00:00
}