You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.4 KiB
57 lines
1.4 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.IO; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Text.RegularExpressions; |
|
using UnityEngine; |
|
#if UNITY_2017_3_OR_NEWER |
|
using UnityEngine.Networking; |
|
#endif |
|
|
|
namespace ZenFulcrum.EmbeddedBrowser { |
|
|
|
/** |
|
* WebResources implementation that grabs resources directly from Assets/../BrowserAssets. |
|
*/ |
|
class EditorWebResources : WebResources { |
|
protected string basePath; |
|
|
|
public EditorWebResources() { |
|
//NB: If you try to read Application.dataPath later you may not be on the main thread and it won't work. |
|
basePath = Path.GetDirectoryName(Application.dataPath) + "/BrowserAssets"; |
|
} |
|
|
|
/// <summary> |
|
/// Looks for "../asdf", "asdf/..\asdf", etc. |
|
/// </summary> |
|
private readonly Regex matchDots = new Regex(@"(^|[/\\])\.[2,]($|[/\\])"); |
|
|
|
public override void HandleRequest(int id, string url) { |
|
var parsedURL = new Uri(url); |
|
|
|
#if UNITY_2017_3_OR_NEWER |
|
var path = UnityWebRequest.UnEscapeURL(parsedURL.AbsolutePath); |
|
#else |
|
var path = WWW.UnEscapeURL(parsedURL.AbsolutePath); |
|
#endif |
|
|
|
if (matchDots.IsMatch(path)) { |
|
SendError(id, "Invalid path", 400); |
|
return; |
|
} |
|
|
|
var file = new FileInfo(Application.dataPath + "/../BrowserAssets/" + path); |
|
|
|
if (!file.Exists) { |
|
SendError(id, "Not found", 404); |
|
return; |
|
} |
|
|
|
//fixme: send 404 if file capitalization doesn't match. (Unfortunately, not a quick one-liner) |
|
|
|
SendFile(id, file); |
|
} |
|
|
|
} |
|
}
|
|
|