public async Task <IActionResult> DeleteFile(Guid id, string filename) { var entity = await Database.FindAsync <TData>(id); if (entity == null) { return(NotFound(id)); } if (!await Permissions.AllowWrite(await CurrentUser, entity)) { return(Forbid()); } var container = BlobContainerProvider.GetContainerReference(GetContainerId(entity)); if (!await container.ExistsAsync()) { return(NotFound()); } var dir = container.GetDirectoryReference("files"); var blobRef = dir.GetBlockBlobReference(filename); await blobRef.DeleteIfExistsAsync(); return(NoContent()); }
public async Task <IActionResult> UploadFile(Guid id, IFormFile file) { var entity = await Database.FindAsync <TData>(id); if (entity == null) { return(NotFound(id)); } if (!await Permissions.AllowWrite(await CurrentUser, entity)) { return(Forbid()); } if (file.Length <= 0) { return(BadRequest("File Length <= 0")); } var maxSizeInMegs = Configuration.GetValue("FileUploads:MaxSizeInMegabytes", 100.0); var maxSizeInBytes = (int)(maxSizeInMegs * 1_000_000); if (file.Length >= maxSizeInBytes) { return(BadRequest($"File too large. Max size is {maxSizeInBytes} bytes")); } var safeFileName = file.FileName.SafeFileName(); var allowedExtensions = Configuration.GetSection("FileUploads:AllowedExtensions").Get <string[]>().Select(x => x.ToUpper()).ToList(); if (!allowedExtensions.Contains(Path.GetExtension(safeFileName).ToUpper())) { return(BadRequest($"File Extension must be one of: {string.Join(", ", allowedExtensions)}")); } var container = BlobContainerProvider.GetContainerReference(GetContainerId(entity)); await container.CreateIfNotExistsAsync(); var dir = container.GetDirectoryReference("files"); var blobRef = dir.GetBlockBlobReference(safeFileName); await blobRef.UploadFromStreamAsync(file.OpenReadStream()); blobRef.Metadata["MIME"] = file.ContentType; blobRef.Metadata["Owner"] = (await CurrentUser).Id.ToString(); await blobRef.SetMetadataAsync(); await Database.SaveChangesAsync(); return(CreatedAtAction("GetFile", new { id, filename = safeFileName }, null)); }
public async Task <IActionResult> ClearOrgAvatar(Guid id) { var org = await Database.Organizations.FindAsync(id); if (org == null) { return(NotFound()); } if (!await Permissions.AllowWrite(await CurrentUser, org)) { return(Forbid()); } return(await _avatar.ClearAvatar(org)); }
public async Task <IActionResult> SetOrgAvatar(Guid id, IFormFile upload) { var org = await Database.Organizations.FindAsync(id); if (org == null) { return(NotFound()); } if (!await Permissions.AllowWrite(await CurrentUser, org)) { return(Forbid()); } return(await _avatar.SetAvatarResult(org, upload)); }