mirror of
https://github.com/VitalickS/BrightSharp.Toolkit.git
synced 2026-03-21 02:21:15 +00:00
Ok, Just Do It!
This commit is contained in:
73
BrightSharp.Toolkit.Extra/LocalSchemeHandlerFactory.cs
Normal file
73
BrightSharp.Toolkit.Extra/LocalSchemeHandlerFactory.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using CefSharp;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
|
||||
namespace BrightSharp.Toolkit.Extra
|
||||
{
|
||||
|
||||
public class FolderSchemeHandlerFactory : ISchemeHandlerFactory
|
||||
{
|
||||
private string rootFolder;
|
||||
private string defaultPage;
|
||||
private string schemeName;
|
||||
private string hostName;
|
||||
|
||||
public FolderSchemeHandlerFactory(string rootFolder, string schemeName = null, string hostName = null, string defaultPage = "index.html")
|
||||
{
|
||||
this.rootFolder = Path.GetFullPath(rootFolder);
|
||||
this.defaultPage = defaultPage;
|
||||
this.schemeName = schemeName;
|
||||
this.hostName = hostName;
|
||||
|
||||
if (!Directory.Exists(this.rootFolder))
|
||||
{
|
||||
throw new DirectoryNotFoundException(this.rootFolder);
|
||||
}
|
||||
}
|
||||
|
||||
IResourceHandler ISchemeHandlerFactory.Create(IBrowser browser, IFrame frame, string schemeName, IRequest request)
|
||||
{
|
||||
if (this.schemeName != null && !schemeName.Equals(this.schemeName, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var invalidSchemeName = ResourceHandler.FromString(string.Format("SchemeName {0} does not match the expected SchemeName of {1}.", schemeName, this.schemeName));
|
||||
invalidSchemeName.StatusCode = (int)HttpStatusCode.NotFound;
|
||||
|
||||
return invalidSchemeName;
|
||||
}
|
||||
|
||||
var uri = new Uri(request.Url);
|
||||
|
||||
if (hostName != null && !uri.Host.Equals(hostName, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var invalidHostName = ResourceHandler.FromString(string.Format("HostName {0} does not match the expected HostName of {1}.", uri.Host, hostName));
|
||||
invalidHostName.StatusCode = (int)HttpStatusCode.NotFound;
|
||||
|
||||
return invalidHostName;
|
||||
}
|
||||
|
||||
//Get the absolute path and remove the leading slash
|
||||
var asbolutePath = uri.Host + uri.AbsolutePath;
|
||||
|
||||
if (string.IsNullOrEmpty(asbolutePath))
|
||||
{
|
||||
asbolutePath = defaultPage;
|
||||
}
|
||||
|
||||
var filePath = Path.GetFullPath(Path.Combine(rootFolder, asbolutePath));
|
||||
|
||||
//Check the file requested is within the specified path and that the file exists
|
||||
if (filePath.StartsWith(rootFolder, StringComparison.OrdinalIgnoreCase) && File.Exists(filePath))
|
||||
{
|
||||
var fileExtension = Path.GetExtension(filePath);
|
||||
var mimeType = ResourceHandler.GetMimeType(fileExtension);
|
||||
return ResourceHandler.FromFilePath(filePath, mimeType);
|
||||
}
|
||||
|
||||
var fileNotFoundResourceHandler = ResourceHandler.FromString("File Not Found - " + filePath);
|
||||
fileNotFoundResourceHandler.StatusCode = (int)HttpStatusCode.NotFound;
|
||||
|
||||
return fileNotFoundResourceHandler;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user