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; } }
public DefaultResourceSchemeHandler(IChromelyConfiguration config, IChromelyErrorHandler chromelyErrorHandler) { _config = config; _chromelyErrorHandler = chromelyErrorHandler; _chromelyResource = new ChromelyResource(); _fileInfo = null; }
public DefaultAssemblyResourceSchemeHandler(IChromelyRequestSchemeHandlerProvider requestSchemeHandlerProvider, IChromelyErrorHandler chromelyErrorHandler) { _requestSchemeHandlerProvider = requestSchemeHandlerProvider; _chromelyResource = new ChromelyResource(); _chromelyErrorHandler = chromelyErrorHandler; _fileInfo = null; }
/// <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); }
/// <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); }
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); }
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); }
/// <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; }
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); }
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); }
/// <inheritdoc/> public virtual Task <IChromelyResource> HandleErrorAsync(string requestUrl, IChromelyResource response, Exception?exception = null) { return(Task.FromResult <IChromelyResource>(response)); }
public DefaultResourceSchemeHandler(IChromelyErrorHandler chromelyErrorHandler) { _chromelyResource = new ChromelyResource(); _chromelyErrorHandler = chromelyErrorHandler; _fileInfo = null; }