Ejemplo n.º 1
0
        public async Task <IActionResult> Open(OpenAddressModel model)
        {
            var site = await _siteRepo.GetSiteByName(model.SiteName);

            if (site == null)
            {
                return(NotFound());
            }
            if (!site.OpenToDownload)
            {
                _tokenEnsurer.Ensure(model.PBToken, "Download", model.SiteName, model.FolderNames);
            }
            var(folders, fileName) = _folderSplitter.SplitToFoldersAndFile(model.FolderNames);
            try
            {
                var siteRoot = await _folderRepo.GetFolderFromId(site.RootFolderId);

                var folder = await _folderRepo.GetFolderFromPath(folders, siteRoot, false);

                if (folder == null)
                {
                    return(NotFound());
                }
                var file = await _fileRepo.GetFileInFolder(folder, fileName);

                if (file == null)
                {
                    return(NotFound());
                }
                var path      = _storageProvider.GetFilePath(file.HardwareId);
                var extension = _storageProvider.GetExtension(file.FileName);
                if (ControllerContext.ActionDescriptor.AttributeRouteInfo.Name == "File")
                {
                    return(this.WebFile(path, "do-not-open"));
                }
                else if (ControllerContext.ActionDescriptor.AttributeRouteInfo.Name == "Video")
                {
                    return(VideoPlayerWithFile(
                               probeLocator.GetProbeOpenAddress(model.SiteName, folders, fileName),
                               model.PBToken,
                               fileName));
                }
                else if (file.FileName.IsStaticImage() && Image.DetectFormat(path) != null)
                {
                    return(await FileWithImageCompressor(path, extension));
                }
                else
                {
                    return(this.WebFile(path, extension));
                }
            }
            catch (AiurAPIModelException e) when(e.Code == ErrorType.NotFound)
            {
                return(NotFound());
            }
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Open(OpenAddressModel model)
        {
            var site = await _dbContext
                       .Sites
                       .Include(t => t.Root)
                       .SingleOrDefaultAsync(t => t.SiteName.ToLower() == model.SiteName);

            if (site == null)
            {
                return(NotFound());
            }
            if (!site.OpenToDownload)
            {
                _tokenEnsurer.Ensure(model.PBToken, "Download", model.SiteName, model.FolderNames);
            }
            var(folders, fileName) = _folderLocator.SplitToFoldersAndFile(model.FolderNames);
            try
            {
                var folder = await _folderLocator.LocateAsync(folders, site.Root, false);

                if (folder == null)
                {
                    return(NotFound());
                }
                var file = folder.Files.SingleOrDefault(t => t.FileName == fileName);
                if (file == null)
                {
                    return(NotFound());
                }
                var path      = _storageProvider.GetFilePath(file.HardwareId);
                var extension = _storageProvider.GetExtension(file.FileName);
                if (ControllerContext.ActionDescriptor.AttributeRouteInfo.Name == "File")
                {
                    return(this.WebFile(path, "do-not-open"));
                }
                else if (file.FileName.IsStaticImage() && Image.DetectFormat(path) != null)
                {
                    return(await FileWithImageCompressor(path, extension));
                }
                else
                {
                    return(this.WebFile(path, extension));
                }
            }
            catch (AiurAPIModelException e) when(e.Code == ErrorType.NotFound)
            {
                return(NotFound());
            }
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> Open(OpenAddressModel model)
        {
            var site = await _dbContext
                       .Sites
                       .Include(t => t.Root)
                       .Include(t => t.Root.SubFolders)
                       .Include(t => t.Root.Files)
                       .SingleOrDefaultAsync(t => t.SiteName.ToLower() == model.SiteName);

            if (site == null)
            {
                return(NotFound());
            }
            var(folders, fileName) = _folderLocator.SplitToPath(model.FolderNames);
            try
            {
                var folder = await _folderLocator.LocateAsync(folders, site.Root, false);

                var file = folder.Files.SingleOrDefault(t => t.FileName == fileName);
                if (file == null)
                {
                    return(NotFound());
                }
                var path      = _configuration["StoragePath"] + $"{_}Storage{_}{file.Id}.dat";
                var extension = Path.GetExtension(file.FileName).TrimStart('.').ToLower();
                if (ControllerContext.ActionDescriptor.AttributeRouteInfo.Name == "File")
                {
                    return(this.WebFile(path, "do-not-open"));
                }
                if (file.FileName.IsStaticImage() && Image.DetectFormat(path) != null)
                {
                    return(await this.FileWithImageCompressor(path, extension));
                }
                else
                {
                    return(this.WebFile(path, extension));
                }
            }
            catch (AiurAPIModelException e) when(e.Code == ErrorType.NotFound)
            {
                return(NotFound());
            }
        }