public async Task List(string path) { var listing = new List <string>(); if (!string.IsNullOrEmpty(path)) { var tmpListing = (await _fileService.ListPath(path)); foreach (var absolutePath in tmpListing) { var mappedPath = UnixHelper.MapToSystemPath(absolutePath); if (!Directory.Exists(absolutePath)) { continue; } try { if (UnixHelper.HasAccess(_configuration.GetSection("OsUser")["OsUsername"], absolutePath)) { listing.Add(new string(mappedPath)); } } catch (Exception e) { Log.Error(e, "FileOperationHub#List"); } } } if (_signInManager.IsSignedIn(Context.User)) { Log.Information($"Returning a listing to a signed user: {Context.User.Identity.Name}"); var user = await _userManager.GetUserAsync(Context.User); await this.Clients.User(user.Id).SendAsync("ReceiveListing", listing); } else { Log.Information("Returning a listing to unknown user."); await this.Clients.All.SendAsync("ReceiveListing", listing); } }
public void ApplyAcl(string osUser) { this.ContentsList.RemoveAll(entry => !UnixHelper.HasAccess(osUser, entry.PhysicalPath) || entry.Name.StartsWith("~")); }
public async Task <IActionResult> Browse(string?path, int offset = 0, int count = 50) { var osUser = _configuration.GetSection("OsUser")["OsUsername"]; if (string.IsNullOrEmpty(path) || !UnixHelper.HasAccess(osUser, _fileService.RetrieveAbsoluteFromSystemPath(path))) { path = Path.DirectorySeparatorChar.ToString(); } var contents = GetContents(path); ViewData["path"] = path; ViewData["returnUrl"] = UnixHelper.GetParent(path); var lrmv = new FileResultViewModel(); if (null == contents) { ReturnMessage = "Something went wrong..."; return(View(lrmv)); } if (!contents.Exists) { ReturnMessage = "The resource doesn't exist on the filesystem."; return(View(lrmv)); } lrmv.Contents = contents; lrmv.ContentsList = contents.ToList(); await lrmv.SortContents(); var fileInfosList = lrmv.ContentsList; var pageCount = fileInfosList.Count / count; SetPagingParams(offset, count, pageCount); Set("Offset", offset.ToString(), 3600); Set("Count", count.ToString(), 3600); Set("PageCount", pageCount.ToString(), 3600); if (fileInfosList.Count > count) { lrmv.ApplyPaging(offset, count); } if (!HttpContext.User.IsInRole("Admin")) { try { lrmv.ApplyAcl(osUser); } catch (InvalidOperationException ex) { Log.Error(ex, "StorageController#Browse"); } } var fileInfo = _fileService.RetrieveFileInfoFromSystemPath(path); if (fileInfo.Exists && !fileInfo.IsDirectory) { return(RedirectToAction(nameof(Download), new { @id = fileInfo.Name, @z = true })); } return(View(lrmv)); }