using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Text.RegularExpressions; using System.IO; using Microsoft.Win32; namespace FLocal.IISHandler.handlers { class StaticHandler : ISpecificHandler { private string[] requestParts; public StaticHandler(string[] requestParts) { this.requestParts = requestParts; } private static Dictionary extension2mime = new Dictionary(); private static string getMimeByExtension(string extension) { if(!extension2mime.ContainsKey(extension)) { lock(extension2mime) { if(!extension2mime.ContainsKey(extension)) { RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(extension); if (regKey != null && regKey.GetValue("Content Type") != null) { extension2mime[extension] = regKey.GetValue("Content Type").ToString(); } else { return null; } } } } return extension2mime[extension]; } public void Handle(WebContext context) { if(this.requestParts.Length < 2) { throw new HttpException(403, "listing not allowed"); } Regex checker = new Regex("^[a-z][0-9a-z\\-]*(\\.[a-zA-Z]+)?$", RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Singleline); string path = ""; for(int i=1; i