69 lines
2.1 KiB
C#
69 lines
2.1 KiB
C#
// /**
|
|
// * File: FileSystemRouter.cs
|
|
// * Author: haraldwolff
|
|
// *
|
|
// * This file and it's content is copyrighted by the Author and / or copyright holder.
|
|
// * Any use wihtout proper permission is illegal and may lead to legal actions.
|
|
// *
|
|
// *
|
|
// **/
|
|
using System;
|
|
using System.IO;
|
|
using System.Collections.Generic;
|
|
using ln.http.mime;
|
|
|
|
namespace ln.http.router
|
|
{
|
|
public class StaticRouter
|
|
{
|
|
public String RootPath { get; }
|
|
|
|
List<string> indexNames = new List<string>();
|
|
public String[] IndexNames => indexNames.ToArray();
|
|
|
|
public StaticRouter(string path)
|
|
{
|
|
if (!Directory.Exists(path))
|
|
throw new FileNotFoundException();
|
|
|
|
RootPath = Path.GetFullPath(path);
|
|
|
|
AddIndex("index.html");
|
|
AddIndex("index.htm");
|
|
}
|
|
|
|
public void AddIndex(string indexName) => indexNames.Add(indexName);
|
|
public void RemoveIndex(string indexName) => indexNames.Remove(indexName);
|
|
|
|
public bool Route(HttpContext httpContext)
|
|
{
|
|
string finalPath = httpContext.RoutableUri.Length > 0 ? Path.Combine(RootPath, httpContext.RoutableUri.Substring(1)) : ".";
|
|
|
|
if (Directory.Exists(finalPath))
|
|
{
|
|
foreach (string indexName in indexNames)
|
|
{
|
|
string indexFileName = Path.Combine(finalPath, indexName);
|
|
if (File.Exists(indexFileName))
|
|
{
|
|
finalPath = indexFileName;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (File.Exists(finalPath))
|
|
{
|
|
lock (this)
|
|
{
|
|
httpContext.Response = new HttpResponse(httpContext.Request, new FileStream(finalPath, FileMode.Open, FileAccess.Read));
|
|
httpContext.Response.SetHeader("content-type", MimeTypeMap.GetMimeType(Path.GetExtension(finalPath)));
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
}
|