Example #1
0
		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);
		}
Example #2
0
        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());
        }