private async Task <InternalFolder> ValidateAddFolderShare(AddFolderShareBody body) { if (string.IsNullOrWhiteSpace(body.Name)) { throw (HttpResultException)BadRequest("Name missing"); } string userId = HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier); InternalFolder folder = await ShareFolderHelper.GetFolderItem(body.Path, dbContext, userId, this); if (folder == null) { throw (HttpResultException)NotFound("Base not found"); } if (!HasPermission(folder.Permission, body.Permission)) { throw (HttpResultException)Forbid(); } if (!string.IsNullOrWhiteSpace(folder.PhysicalPath) && !System.IO.Directory.Exists(folder.PhysicalPath)) { throw (HttpResultException)NotFound("Folder not found"); } if (body.UserId != null && !await dbContext.Users.AnyAsync(u => u.Id == body.UserId)) { throw (HttpResultException)BadRequest("User not found"); } return(folder); }
public async Task <ActionResult <FolderItem> > AddFolderShare([FromBody] AddFolderShareBody body) { InternalFolder folder; try { folder = await ValidateAddFolderShare(body); } catch (HttpResultException exc) { return(exc.Result); } if (!HasPermission(folder.Permission, body.Permission)) { return(Forbid()); } if (!string.IsNullOrWhiteSpace(folder.PhysicalPath) && !System.IO.Directory.Exists(folder.PhysicalPath)) { return(NotFound("Folder not found")); } if (body.UserId != null && !await dbContext.Users.AnyAsync(u => u.Id == body.UserId)) { return(BadRequest("User not found")); } if (await dbContext.ShareFolders.AnyAsync(f => f.Name == body.Name && f.UserId == body.UserId)) { return(BadRequest("Folder with this name is already shared")); } ShareFolder shareFolder = new ShareFolder() { Name = body.Name, Path = folder.PhysicalPath, IsListed = body.IsListed, UserId = body.UserId, Permission = Models.FolderItemPermission.New(body.Permission), }; await dbContext.ShareFolders.AddAsync(shareFolder); await dbContext.SaveChangesAsync(); return(shareFolder.ToFolderItem()); }