public async Task <ActionResult> StopSharingFileWithUser(ShareFileRequest request) { var userId = AuthenticationManager.GetUserId(User); if (request.UserId == userId.ToString()) { return(BadRequest("You can't stop sharing file with yourself")); } var file = await _filesRepository.FindByIdAsync(request.FileId); if (!file.AllowedUsers.Contains(new ObjectId(request.UserId))) { return(BadRequest("File is not shared with this user")); } var updatedAllowedList = file.AllowedUsers; updatedAllowedList.Remove(new ObjectId(request.UserId)); if (!FileFolderManager.CanDeleteFile(userId, file)) { return(BadRequest("You don't have rights to stop sharing this file")); } await _filesRepository.UpdateOneAsync(request.FileId, "AllowedUsers", updatedAllowedList); return(Ok()); }
public async Task <ActionResult> ShareFileWithUser(ShareFileRequest request) { var userId = AuthenticationManager.GetUserId(User); if (request.UserId == userId.ToString()) { return(BadRequest("You already have access to this file")); } var file = await _filesRepository.FindByIdAsync(request.FileId); if (file.AllowedUsers.Contains(new ObjectId(request.UserId))) { return(BadRequest("User already has access to this file")); } var updatedAllowedList = file.AllowedUsers; updatedAllowedList.Add(new ObjectId(request.UserId)); if (!FileFolderManager.CanDeleteFile(userId, file)) { return(BadRequest("You don't have rights to share this file")); } await _filesRepository.UpdateOneAsync(request.FileId, "AllowedUsers", updatedAllowedList); return(Ok()); }
public async Task <ActionResult> DeleteFileAsync(ObjectIdRequest request) { var userId = Tools.AuthenticationManager.GetUserId(User); #region Get file from db DatabaseModule.Entities.File file; try { file = await _filesRepository.FindByIdAsync(request.Id); } catch (Exception e) { _logger.LogError(e.Message); return(BadRequest("File not found")); } #endregion if (!FileFolderManager.CanDeleteFile(userId, file)) { return(BadRequest("You can't delete file or it doesn't exist")); } #region Get bucket from db DatabaseModule.Entities.Bucket bucket; try { bucket = await _bucketsRepository.FindByIdAsync(file.BucketId.ToString()); } catch (Exception e) { _logger.LogError(e.Message); return(BadRequest("Bucket not found")); } #endregion var serviceConfig = bucket.BucketConfigData; var googleBucketUploader = new RequestHandlerGoogleBucket(serviceConfig.ConfigData, serviceConfig.SelectedBucket); var result = googleBucketUploader.DeleteFile(request.Id); if (!result) { return(BadRequest("Error while deleting your file")); } #region Delete file from db try { await _filesRepository.DeleteByIdAsync(request.Id); } catch (Exception e) { _logger.LogError(e.Message); return(BadRequest("Deletion file from db failed")); } #endregion return(Ok()); }
public async Task <ActionResult> SwitchFavouriteFolder(FavouriteSwitch favouriteSwitch) { var userId = Tools.AuthenticationManager.GetUserId(User); if (!await FileFolderManager.CanDeleteFolder(userId, new ObjectId(favouriteSwitch.Id), _foldersRepository)) { return(BadRequest("You don't have access to folder or it doesn't exist")); } await _foldersRepository.UpdateOneAsync(favouriteSwitch.Id, "Favourite", favouriteSwitch.IsFavourite); return(Ok()); }
public async Task <ActionResult> DownloadFileAsync(string fileId) { var userId = Tools.AuthenticationManager.GetUserId(User); #region DatabaseModule.Entities.File file; try { file = await _filesRepository.FindByIdAsync(fileId); } catch (Exception e) { _logger.LogError(e.Message); return(BadRequest("File not found")); } #endregion if (!FileFolderManager.CanAccessFile(userId, file)) { return(BadRequest("User doesn't have access to file")); } #region Get file from db DatabaseModule.Entities.Bucket bucket; try { bucket = await _bucketsRepository.FindByIdAsync(file.BucketId.ToString()); } catch (Exception e) { _logger.LogError(e.Message); return(BadRequest("Bucket not found")); } #endregion var serviceConfig = bucket.BucketConfigData; var googleBucketUploader = new RequestHandlerGoogleBucket(serviceConfig.ConfigData, serviceConfig.SelectedBucket); var result = googleBucketUploader.DownloadFile(file); return(File(result, file.FileType, file.FileName)); }
public async Task <ActionResult> GetFileInfo(ObjectIdRequest fileIdRequest) { var userId = Tools.AuthenticationManager.GetUserId(User); var file = await _filesRepository.FindByIdAsync(fileIdRequest.Id); if (!FileFolderManager.CanAccessFile(userId, file)) { return(BadRequest("You don't have access to file or it doesn't exist")); } return(Ok(JsonSerializer.Serialize( new FileInfoWithUser(file), new JsonSerializerOptions() { Converters = { new FileInfoWithUserSerializer() } }))); }
public async Task <ActionResult> DeleteFolder(DTO.Request.ObjectIdRequest request) { var userId = AuthenticationManager.GetUserId(User); if (!await FileFolderManager.CanDeleteFolder(userId, new ObjectId(request.Id), _foldersRepository)) { return(BadRequest("You don't have right to delete folder, or it doesn't exist")); } var foldersTree = await FileFolderManager.GetFolderTree(new ObjectId(request.Id), _foldersRepository); var buckets = (await _bucketsRepository.FilterByAsync(bucket => bucket.OwnerId == null || bucket.OwnerId == userId)).ToList(); var files = (await _filesRepository.FilterByAsync(file => foldersTree.Contains(file.FolderId))).ToList(); if (files.Count() != 0) { foreach (var file in files) { var bucket = buckets.First(b => b.Id == file.BucketId); var serviceConfig = bucket.BucketConfigData; var googleBucketUploader = new RequestHandlerGoogleBucket(serviceConfig.ConfigData, serviceConfig.SelectedBucket); var result = googleBucketUploader.DeleteFile(file.Id.ToString()); if (!result) { _logger.LogError("Error while deleting file " + file.Id + " during deletion folder " + request.Id); } } var filesIds = files.Select(f_ => f_.Id); await _filesRepository.DeleteManyAsync(f => filesIds.Contains(f.Id)); } await _foldersRepository.DeleteManyAsync(folder => foldersTree.Contains(folder.Id)); return(Ok()); }
public async Task <ActionResult <String> > GetFilesInfo() { var userId = AuthenticationManager.GetUserId(User); // Currently supports only own folders var folders = (await _foldersRepository.FilterByAsync(folder => folder.OwnerId == userId)).ToList(); var folderIds = folders.Select(folder => folder.Id); var files = _filesRepository.FilterBy(file => folderIds.Contains(file.FolderId) || file.AllowedUsers.Contains(userId)).ToList(); if (folders.Count == 0) { return(BadRequest("User doesn't have any folder (even required root)")); } List <UserFilesInfo> response = new List <UserFilesInfo> { new UserFilesInfo() { OwnerId = userId, RootFolder = FileFolderManager.CombineFilesAndFolders(folders, files.Where(file => file.OwnerId == userId)), AvailableFiles = files.Where(file => file.OwnerId != userId) .Select(f => new FileInfoWithUser(f)).ToList() } }; JsonSerializerOptions options = new JsonSerializerOptions { Converters = { new UserFilesInfoSerializer() } }; return(Ok(JsonSerializer.Serialize <List <UserFilesInfo> >(response, options))); }
public async Task <ActionResult> SwitchFavouriteFile(FavouriteSwitch favouriteSwitch) { var userId = Tools.AuthenticationManager.GetUserId(User); var file = await _filesRepository.FindByIdAsync(favouriteSwitch.Id); if (!FileFolderManager.CanDeleteFile(userId, file)) { return(BadRequest("You don't have access to file or it doesn't exist")); } await _filesRepository.UpdateOneAsync(favouriteSwitch.Id.ToString(), "Favourite", favouriteSwitch.IsFavourite); file.Favourite = favouriteSwitch.IsFavourite; return(Ok(JsonSerializer.Serialize( new UserFilesInfoFile(file), new JsonSerializerOptions() { Converters = { new UserFilesInfoFileSerializer() } }))); }
public async Task <ActionResult <string> > SendFileAsync(IFormFile fileUpload, bool compressed, bool encrypted, bool favourite, string folderId) { var formData = HttpContext.Request.Form; var files = HttpContext.Request.Form.Files; var file = files.First(); ObjectId _folderId = new ObjectId(folderId); bool available = await FileFolderManager.CanAccessFolder(Tools.AuthenticationManager.GetUserId(User), _folderId, _foldersRepository); if (!available) { return(BadRequest("Folder not available or doesn't exist")); } var user = await _usersRepository.FindOneAsync(x => x.Id == new ObjectId(User.FindFirst("id").Value)); if (user.Buckets.Count() == 0) { return(BadRequest("You have not linked any cloud storage")); } ObjectId fileId = ObjectId.GenerateNewId(); var serviceConfig = user.CurrentBucket.BucketConfigData; var googleBucketUploader = new RequestHandlerGoogleBucket(serviceConfig.ConfigData, serviceConfig.SelectedBucket); var result = googleBucketUploader.UploadFile(file, fileId.ToString(), encrypted, compressed); if (!result.Success) { return(BadRequest("Error while uploading your file!")); } var newFile = new DatabaseModule.Entities.File() { Id = fileId, FileName = file.FileName, FileType = file.ContentType, FileSize = file.Length, OwnerId = Tools.AuthenticationManager.GetUserId(User), FolderId = _folderId, Compressed = compressed, Encrypted = encrypted, EncryptionKey = result.EncryptionKey, IV = result.IV, Favourite = favourite, BucketId = user.CurrentBucket.Id, AllowedUsers = new List <ObjectId>() }; await _filesRepository.InsertOneAsync(newFile); return(Ok(JsonSerializer.Serialize( new UserFilesInfoFile(newFile), new JsonSerializerOptions() { Converters = { new UserFilesInfoFileSerializer() } }))); }