public async Task<IActionResult> DownloadShare(string shareId) { if (string.IsNullOrWhiteSpace(shareId)) return NotFound(); (ShareHelper.AccessStatus allowed, Share share) = await ShareHelper.CanAccess(HttpContext, database, shareId); if (allowed == ShareHelper.AccessStatus.Denied) return NotFound(); share.LastAccessed = DateTime.Now; string path = Path.Combine(config.GetValue<string>("FileDirectory"), share.File.Identifier + ".file"); FileStream file = System.IO.File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read); string filename = share.File.Filename + "." + share.File.Extension; new FileExtensionContentTypeProvider().TryGetContentType(filename, out string contentType); // Returns null on unkown file ending if (contentType == null) contentType = "application/octet-stream"; return File(file, contentType, filename, true); }
public async Task <IActionResult> OnGetAsync(string shareId) { if (string.IsNullOrWhiteSpace(shareId)) { return(NotFound()); } ShareName = shareId; (ShareHelper.AccessStatus allowed, Share share) = await ShareHelper.CanAccess(HttpContext, database, shareId); if (share != null && !share.DontTrack) { database.Visits.Add(new() { Access = allowed, Date = DateTime.Now, IP = Request.Headers["X-Forwarded-For"], UserAgent = Request.Headers["User-Agent"], Share = share, User = userManager.GetUser(HttpContext) }); await database.SaveChangesAsync(); } if (allowed == ShareHelper.AccessStatus.Denied) { await database.SaveChangesAsync(); return(NotFound()); } share.LastAccessed = DateTime.Now; await database.SaveChangesAsync(); IsOwner = allowed == ShareHelper.AccessStatus.Owner; FileId = share.File.Id; ShareId = share.Id; FileViewInfo = new FileViewInfo() { FileName = share.File.Filename + "." + share.File.Extension, SourcePath = "/d/" + shareId }; return(Page()); }