public Task Execute(HttpContext context) { var match = _pattern.Match(context.Request.Path); if (!match.Success) { return(Task.CompletedTask); } var newRequest = HttpIO.ReplaceVars(context, _rewriteData); for (var i = 0; i < match.Captures.Count; i++) { newRequest = newRequest.Replace($"${i + 1}", match.Captures[i].Value); } /*foreach (Match match in _pattern.Matches(context.Request.Path)) { * newRequest = newRequest.Replace($"${match.Name}", match.Value); * }*/ /*var rewriteQuery = _rewriteData.Split("?"); * request = rewriteQuery[0].Replace("$scheme", context.Request.Scheme); * if (rewriteQuery.Length == 1) { * request = _rewriteData; * Logger.Info($"{request}"); * for (var p = 1; p < requestParts.Length; p++) { * request = request.Replace($"${p}", requestParts[p]); * } * Logger.Info($"{request}"); * } else if (rewriteQuery.Length == 2) { * var queryParts = rewriteQuery[1].Split("&"); * foreach (var query in queryParts) { * var queryData = query.Split("="); * var key = queryData[0]; * var value = queryData[1]; * for (var p = 1; p < requestParts.Length; p++) { * value = value.Replace($"${p}", requestParts[p]); * } * context.Request.Query.Add(key, value); * } * }*/ /*if (_flag.Equals("last", StringComparison.CurrentCultureIgnoreCase)) { * context.Request * } * if (_flag.Equals("break", StringComparison.CurrentCultureIgnoreCase)) { * * }*/ if (_flag.Equals("redirect", StringComparison.CurrentCultureIgnoreCase)) { context.Response.StatusCode = 302; context.Response.Headers.Add("Location", newRequest); context.Response.HasFinished = true; } if (_flag.Equals("permanent", StringComparison.CurrentCultureIgnoreCase)) { context.Response.StatusCode = 301; context.Response.Headers.Add("Location", newRequest); context.Response.HasFinished = true; } context.Request.RequestPath = newRequest; return(Task.CompletedTask); }
public async Task Execute(HttpContext context) { foreach (string file in _pages) { string tempPath = HttpIO.ReplaceVars(context, file); if (tempPath[0].Equals('=')) { if (int.TryParse(tempPath.Remove(0, 1), out int statusCode)) { await context.ServerInfo.ErrorMessageManager.SendError(context, statusCode); context.Response.HasFinished = true; return; } await context.ServerInfo.ErrorMessageManager.SendError(context, 500); context.Response.HasFinished = true; return; } if (tempPath[0].Equals('@')) { foreach (var location in _httpLocationManager.Locations) { if (!location.Key.Equals(tempPath, StringComparison.CurrentCultureIgnoreCase)) { continue; } await location.Execute(context); context.Response.HasFinished = true; return; } } if (!UrlMapper.RegisteredPages.ContainsKey(tempPath.ToLower())) { continue; } await UrlMapper.RegisteredPages[tempPath.ToLower()].OnHttpPageRequest(context, tempPath.ToLower()); context.Response.HasFinished = true; } }
public async Task Execute(HttpContext context) { if (_type == 1) { await context.ServerInfo.ErrorMessageManager.SendError(context, _statusCode); context.Response.HasFinished = true; } else if (_type == 2) { context.Response.StatusCode = _statusCode; context.Response.Headers.Add("Location", HttpIO.ReplaceVars(context, _data)); context.Response.HasFinished = true; } else if (_type == 3) { context.Response.StatusCode = _statusCode; await context.Response.WriteAsync(HttpIO.ReplaceVars(context, _data)); context.Response.HasFinished = true; } }
public async Task Execute(HttpContext context) { foreach (string i in _indexes) { string index = HttpIO.ReplaceVars(context, i); if (index.Equals("$internal_indexes")) { foreach (string j in UrlMapper.IndexFiles) { string indexPath = Path.Combine(context.ServerInfo.RootPath, j[0].Equals('/') ? j.Remove(0, 1) : Path.Combine(context.Request.Path, j).Remove(0, 1)); if (!File.Exists(indexPath)) { continue; } string extension = Path.GetExtension(indexPath); context.Request.RequestFilePath = indexPath; if (UrlMapper.ExtensionPlugins.TryGetValue(extension.ToLower(), out var plugin)) { await plugin.OnHttpExtensionRequest(context, indexPath, extension.ToLower()); context.Response.HasFinished = true; return; } try { await HttpIO.SendFile(context, indexPath); context.Response.HasFinished = true; } catch (Exception) { await context.ServerInfo.ErrorMessageManager.SendError(context, 500); context.Response.HasFinished = true; } return; } } else { string indexPath = Path.Combine(context.ServerInfo.RootPath, index[0].Equals('/') ? index.Remove(0, 1) : Path.Combine(context.Request.Path, index).Remove(0, 1)); if (!File.Exists(indexPath)) { continue; } string extension = Path.GetExtension(indexPath); context.Request.RequestFilePath = indexPath; if (UrlMapper.ExtensionPlugins.TryGetValue(extension.ToLower(), out var plugin)) { await plugin.OnHttpExtensionRequest(context, indexPath, extension.ToLower()); context.Response.HasFinished = true; return; } try { await HttpIO.SendFile(context, indexPath); context.Response.HasFinished = true; } catch { await context.ServerInfo.ErrorMessageManager.SendError(context, 500); context.Response.HasFinished = true; } return; } } }
public async Task Execute(HttpContext context) { foreach (string file in _files) { string tempPath = HttpIO.ReplaceVars(context, file); if (tempPath[0].Equals('=')) { if (int.TryParse(tempPath.Remove(0, 1), out int statusCode)) { await context.ServerInfo.ErrorMessageManager.SendError(context, statusCode); context.Response.HasFinished = true; return; } await context.ServerInfo.ErrorMessageManager.SendError(context, 500); context.Response.HasFinished = true; return; } if (tempPath[0].Equals('@')) { foreach (var location in _httpLocationManager.Locations) { if (!location.Key.Equals(tempPath, StringComparison.CurrentCultureIgnoreCase)) { continue; } await location.Execute(context); context.Response.HasFinished = true; return; } } context.Request.TranslatedPath = Path.GetFullPath(Path.Combine(context.ServerInfo.RootPath, tempPath.Remove(0, 1))); if (File.Exists(context.Request.TranslatedPath)) { string extension = Path.GetExtension(context.Request.TranslatedPath); if (UrlMapper.ExtensionPlugins.ContainsKey(extension.ToLower())) { await UrlMapper.ExtensionPlugins[extension.ToLower()].OnHttpExtensionRequest(context, context.Request.TranslatedPath, extension.ToLower()); context.Response.HasFinished = true; } else { try { await HttpIO.SendFile(context, context.Request.TranslatedPath); context.Response.HasFinished = true; } catch { await context.ServerInfo.ErrorMessageManager.SendError(context, 500); context.Response.HasFinished = true; } } } else if (Directory.Exists(context.Request.TranslatedPath)) { if (!context.Request.RequestPath.EndsWith('/')) { context.Response.Redirect(context.Request.RequestPath + "/"); context.Response.HasFinished = true; } //context.ErrorMessageManager.SendError(context, 404); // Do indexer } } }