コード例 #1
0
        protected override void GetResponseHeaders(CefResponse response, out long responseLength, out string redirectUrl)
        {
            // unknown content-length
            // no-redirect
            responseLength = -1;
            redirectUrl    = null;

            try
            {
                var headers = response.GetHeaderMap();
                headers.Add("Access-Control-Allow-Origin", "*");
                response.SetHeaderMap(headers);

                response.Status     = (int)_chromelyResource.StatusCode;
                response.MimeType   = _chromelyResource.MimeType;
                response.StatusText = _chromelyResource.StatusText;
            }
            catch (Exception exception)
            {
                _chromelyResource   = _chromelyErrorHandler.HandleError(_fileInfo, exception);
                response.Status     = (int)_chromelyResource.StatusCode;
                response.MimeType   = _chromelyResource.MimeType;
                response.StatusText = _chromelyResource.StatusText;
            }
        }
コード例 #2
0
 public DefaultResourceSchemeHandler(IChromelyConfiguration config, IChromelyErrorHandler chromelyErrorHandler)
 {
     _config = config;
     _chromelyErrorHandler = chromelyErrorHandler;
     _chromelyResource = new ChromelyResource();
     _fileInfo = null;
 }
コード例 #3
0
 public DefaultAssemblyResourceSchemeHandler(IChromelyRequestSchemeHandlerProvider requestSchemeHandlerProvider, IChromelyErrorHandler chromelyErrorHandler)
 {
     _requestSchemeHandlerProvider = requestSchemeHandlerProvider;
     _chromelyResource             = new ChromelyResource();
     _chromelyErrorHandler         = chromelyErrorHandler;
     _fileInfo = null;
 }
コード例 #4
0
        /// <summary>
        /// The process request async.
        /// </summary>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <param name="callback">
        /// The callback.
        /// </param>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        public override CefReturnValue ProcessRequestAsync(IRequest request, ICallback callback)
        {
            var uri      = new Uri(request.Url);
            var fileName = uri.AbsolutePath;

            var u    = new Uri(request.Url);
            var file = u.Authority + u.AbsolutePath;

            _fileInfo = new FileInfo(file);
            // Check if file exists
            if (!_fileInfo.Exists)
            {
                _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo);
                callback.Continue();
            }
            // Check if file exists but empty
            else if (_fileInfo.Length == 0)
            {
                _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo);
                callback.Continue();
            }
            else
            {
                Task.Run(() =>
                {
                    using (callback)
                    {
                        _chromelyResource.Content  = null;
                        _chromelyResource.MimeType = "text/html";

                        try
                        {
                            byte[] fileBytes          = File.ReadAllBytes(file);
                            _chromelyResource.Content = new MemoryStream(fileBytes);

                            string extension           = Path.GetExtension(file);
                            _chromelyResource.MimeType = MimeMapper.GetMimeType(extension);
                        }
                        catch (Exception exception)
                        {
                            _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo, exception);
                        }

                        if (_chromelyResource.Content == null)
                        {
                            callback.Cancel();
                        }
                        else
                        {
                            SetResponseInfoOnSuccess();
                            callback.Continue();
                        }
                    }
                });
            }

            return(CefReturnValue.ContinueAsync);
        }
コード例 #5
0
        /// <summary>
        /// The process request async.
        /// </summary>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <param name="callback">
        /// The callback.
        /// </param>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        public override CefReturnValue ProcessRequestAsync(IRequest request, ICallback callback)
        {
            var u = new Uri(request.Url);
            var fileAbsolutePath = u.AbsolutePath;
            var file             = u.Authority + fileAbsolutePath;

            _fileInfo = new FileInfo(file);
            // Check if file exists
            if (!_fileInfo.Exists)
            {
                _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo);
                callback.Continue();
            }
            // Check if file exists but empty
            else if (_fileInfo.Length == 0)
            {
                _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo);
                callback.Continue();
            }
            else
            {
                Task.Run(() =>
                {
                    using (callback)
                    {
                        _chromelyResource.Content  = null;
                        _chromelyResource.MimeType = "text/html";

                        try
                        {
                            if (!ProcessAssmblyEmbeddedFile(request.Url, file, fileAbsolutePath))
                            {
                                ProcessLocalFile(file);
                            }
                        }
                        catch (Exception exception)
                        {
                            _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo, exception);
                        }

                        if (_chromelyResource.Content == null)
                        {
                            callback.Cancel();
                        }
                        else
                        {
                            SetResponseInfoOnSuccess();
                            callback.Continue();
                        }
                    }
                });
            }

            return(CefReturnValue.ContinueAsync);
        }
コード例 #6
0
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            var u    = new Uri(request.Url);
            var file = u.Authority + u.AbsolutePath;

            _totalBytesRead           = 0;
            _chromelyResource.Content = null;
            _completed = false;

            _fileInfo = new FileInfo(file);
            // Check if file exists
            if (!_fileInfo.Exists)
            {
                _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo);
                callback.Continue();
            }
            // Check if file exists but empty
            else if (_fileInfo.Length == 0)
            {
                _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo);
                callback.Continue();
            }
            else
            {
                Task.Run(() =>
                {
                    using (callback)
                    {
                        try
                        {
                            var fileBytes             = File.ReadAllBytes(file);
                            _chromelyResource.Content = new MemoryStream(fileBytes);

                            string extension             = Path.GetExtension(file);
                            _chromelyResource.MimeType   = MimeMapper.GetMimeType(extension);
                            _chromelyResource.StatusCode = ResourceConstants.StatusOK;
                            _chromelyResource.StatusText = ResourceConstants.StatusOKText;
                        }
                        catch (Exception exception)
                        {
                            _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo, exception);
                        }
                        finally
                        {
                            callback.Continue();
                        }
                    }
                });

                return(true);
            }

            callback.Dispose();
            return(false);
        }
コード例 #7
0
        private bool ProcessLocalFile(string file, CefCallback callback)
        {
            _fileInfo = new FileInfo(file);

            // Check if file exists
            if (!_fileInfo.Exists)
            {
                _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo);
                callback.Continue();
            }
            // Check if file exists but empty
            else if (_fileInfo.Length == 0)
            {
                _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo);
                callback.Continue();
            }
            else
            {
                Task.Run(() =>
                {
                    using (callback)
                    {
                        try
                        {
                            var fileBytes             = File.ReadAllBytes(file);
                            _chromelyResource.Content = new MemoryStream(fileBytes);

                            string extension             = Path.GetExtension(file);
                            _chromelyResource.MimeType   = MimeMapper.GetMimeType(extension);
                            _chromelyResource.StatusCode = ResourceConstants.StatusOK;
                            _chromelyResource.StatusText = ResourceConstants.StatusOKText;
                        }
                        catch (Exception exception)
                        {
                            _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo, exception);
                        }
                        finally
                        {
                            callback.Continue();
                        }
                    }
                });

                return(true);
            }

            return(false);
        }
コード例 #8
0
    /// <summary>
    /// The process request async.
    /// </summary>
    /// <param name="request">
    /// The request.
    /// </param>
    /// <param name="callback">
    /// The callback.
    /// </param>
    /// <returns>
    /// The <see cref="bool"/>.
    /// </returns>
    public override CefReturnValue ProcessRequestAsync(CefRequest request, CefCallback callback)
    {
        var uri = new Uri(request.Url);
        var scheme = _config.UrlSchemes.GetScheme(request.Url);
        var isFolderResourceScheme = scheme is not null && scheme.IsUrlSchemeFolderResource();

        var u = new Uri(request.Url);
        var file = isFolderResourceScheme
                    ? scheme.GetResourceFolderFile(u.AbsolutePath)
                    : u.Authority + u.AbsolutePath;

        _fileInfo = new FileInfo(file);
        // Check if file exists 
        if (!_fileInfo.Exists)
        {
            _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo);
            callback.Continue();
        }
        // Check if file exists but empty
        else if (_fileInfo.Length == 0)
        {
            _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo);
            callback.Continue();
        }
        else
        {
            Task.Run(() =>
            {
                using (callback)
                {
                    _chromelyResource.Content = null;
                    _chromelyResource.MimeType = "text/html";

                    try
                    {
                        byte[] fileBytes = File.ReadAllBytes(file);
                        _chromelyResource.Content = new MemoryStream(fileBytes);

                        string extension = Path.GetExtension(file);
                        _chromelyResource.MimeType = MimeMapper.GetMimeType(extension);
                        _chromelyResource.StatusCode = ResourceConstants.StatusOK;
                        _chromelyResource.StatusText = ResourceConstants.StatusOKText;
                    }
                    catch (Exception exception)
                    {
                        _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo, exception);
                    }

                    if (_chromelyResource.Content is null)
                    {
                        callback.Cancel();
                    }
                    else
                    {
                        SetResponseInfoOnSuccess();
                        callback.Continue();
                    }
                }
            });
        }

        return CefReturnValue.ContinueAsync;
    }
コード例 #9
0
    public async override Task <IChromelyResource> HandleErrorAsync(string requestUrl, IChromelyResource response, Exception?exception)
    {
        if (exception is not null)
        {
            Logger.Instance.Log.LogError(exception);
        }

        if (_owinPipeline.IsUrlActionRoute(requestUrl) && !_owinPipeline.IsUrlErrorHandlingPath(requestUrl))
        {
            string errorPageUrl   = GetErrorPageUrl(requestUrl, _config.StartUrl);
            var    newOwinRequest = new ResourceRequest(errorPageUrl, "GET", new Dictionary <string, string[]>(), null);
            var    owinResponse   = await RequestInterceptor.ProcessRequest(_owinPipeline.AppFunc, newOwinRequest);

            return(new ChromelyResource()
            {
                Content = owinResponse.Stream as MemoryStream,
                MimeType = owinResponse.Headers.GetMimeType(),
                StatusCode = (HttpStatusCode)owinResponse.StatusCode,
                StatusText = owinResponse.ReasonPhrase,
                Headers = owinResponse.Headers
            });
        }

        return(response);
    }
コード例 #10
0
        private bool ProcessAssmblyEmbeddedFile(string url, string file, string fileAbsolutePath, CefCallback callback)
        {
            var urlScheme = _config?.UrlSchemes?.GetScheme(url, UrlSchemeType.AssemblyResource);
            var option    = urlScheme.AssemblyOptions;

            if (option == null || option.TargetAssembly == null)
            {
                return(false);
            }

            var manifestName = string.Join(".", option.DefaultNamespace, option.RootFolder, _regex.Replace(fileAbsolutePath, ".")).Replace("..", ".").Replace("..", ".");
            var stream       = option.TargetAssembly.GetManifestResourceStream(manifestName);

            // Check if file exists
            if (stream == null)
            {
                _chromelyResource = _chromelyErrorHandler.HandleError(stream);
                callback.Continue();
            }
            // Check if file exists but empty
            else if (stream.Length == 0)
            {
                _chromelyResource = _chromelyErrorHandler.HandleError(stream);
                stream.Dispose();

                callback.Continue();
            }
            else
            {
                Task.Run(() =>
                {
                    using (callback)
                    {
                        try
                        {
                            var fileBytes = new byte[stream.Length];
                            stream.Read(fileBytes, 0, (int)stream.Length);
                            stream.Flush();
                            stream.Dispose();

                            _chromelyResource.Content    = new MemoryStream(fileBytes);
                            string extension             = Path.GetExtension(file);
                            _chromelyResource.MimeType   = MimeMapper.GetMimeType(extension);
                            _chromelyResource.StatusCode = ResourceConstants.StatusOK;
                            _chromelyResource.StatusText = ResourceConstants.StatusOKText;
                        }
                        catch (Exception exception)
                        {
                            _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo, exception);
                        }
                        finally
                        {
                            callback.Continue();
                        }
                    }
                });

                return(true);
            }

            return(false);
        }
コード例 #11
0
 /// <inheritdoc/>
 public virtual Task <IChromelyResource> HandleErrorAsync(string requestUrl, IChromelyResource response, Exception?exception = null)
 {
     return(Task.FromResult <IChromelyResource>(response));
 }
コード例 #12
0
 public DefaultResourceSchemeHandler(IChromelyErrorHandler chromelyErrorHandler)
 {
     _chromelyResource     = new ChromelyResource();
     _chromelyErrorHandler = chromelyErrorHandler;
     _fileInfo             = null;
 }