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> 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> 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> > 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() } }))); }