private async Task SendResponseFileContent(OWINEnv env, CancellationToken cancel_token)
{
var localpath = GetPhysicalPath(env);
if (localpath==null) throw new HTTPError(HttpStatusCode.Forbidden);
if (Directory.Exists(localpath)) {
localpath = Path.Combine(localpath, "index.html");
if (!File.Exists(localpath)) throw new HTTPError(HttpStatusCode.Forbidden);
}
if (File.Exists(localpath)) {
var contents = File.ReadAllBytes(localpath);
var content_desc = GetFileDesc(Path.GetExtension(localpath));
env.SetResponseHeader("Content-Type", content_desc.MimeType);
env.SetResponseHeader("Content-Length", contents.Length.ToString());
if (env.AccessControlInfo.AuthenticationKey!=null) {
env.SetResponseHeader("Set-Cookie", "auth=" + HTTPUtils.CreateAuthorizationToken(env.AccessControlInfo.AuthenticationKey));
}
if (env.RequestMethod=="GET") {
await env.ResponseBody.WriteAsync(contents, 0, contents.Length, cancel_token);
}
}
else {
throw new HTTPError(HttpStatusCode.NotFound);
}
}