Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
 public void ApplyAcl(string osUser)
 {
     this.ContentsList.RemoveAll(entry =>
                                 !UnixHelper.HasAccess(osUser, entry.PhysicalPath) ||
                                 entry.Name.StartsWith("~"));
 }
Ejemplo n.º 3
0
        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));
        }