private object BindParameterByName(Type bindType, string bindName, IWebServerRequest request, string prefix) { if (bindType.IsPrimitive || bindType == typeof(string)) { string name = string.Format("{0}{1}", prefix, bindName); if (request.Fields.ContainsKey(name)) { return(StringToObject(request.Fields[name], bindType)); } else { return(null); } } else { object o = Activator.CreateInstance(bindType); // If this is too limiting then could we use the CastleContainer?? foreach (PropertyInfo propertyInfo in bindType.GetProperties(BindingFlags.Public | BindingFlags.FlattenHierarchy)) { object value = BindParameterByName(propertyInfo.PropertyType, propertyInfo.Name, request, string.Format("{0}{1}.", prefix, bindName)); if (value != null) { propertyInfo.SetValue(o, value); } } return(o); } }
public bool Handle(IWebServerRequest request, IWebServerResponse response) { Request = request; Response = response; MethodInfo method = GetType().GetMethods().FirstOrDefault(m => m.Name == request.ControllerMethodName && SupportsHttpMethod(m, request.HttpMethod)); if (method != null) { if (UserAuthorized(method, request)) { try { object[] parameters = GetParametersFromRequest(method, request); object o = method.Invoke(this, parameters); IViewResult result = request.WebSite.ViewProvider.GetViewForRequest(request).Render(o); response.FromString(result.Content, result.ContentType); } catch (Exception exception) { response.InternalError(request, exception); } } else { response.NotAllowed(request); } } else { return(false); } return(true); }
protected void HandleControllerRequest(IWebServerRequest request, IWebServerResponse response) { if (request.Controller == null || !request.Controller.Handle(request, response)) { request.SetFileName(DefaultWebPage); } }
public bool CanHandle(IWebServerRequest request) { string controllerName = string.IsNullOrEmpty(request.ControllerName) ? "Default" : request.ControllerName; bool canHandle = (GetType().Name.StartsWith(request.ControllerName)); if (canHandle) { if (string.IsNullOrEmpty(request.ControllerName)) { request.ControllerName = GetType().Name.Substring(0, GetType().Name.Length - 10); } if (string.IsNullOrEmpty(request.ControllerMethodName)) { request.ControllerMethodName = "Index"; } if (request.IsFile) { request.AdjustFilePathForController(); } } return(canHandle); }
public AvalonHelperModel(IAvalonGame game, IWebServerRequest request) { GameStatus = game.GetGameStatus(); UserStatus = game.GetUserStatus(request.User); Players = game.GetPlayerList(); CanStartGameMessage = game.CanStartGame(); Roles = game.GetRevealedRoles(); }
private MarkUpBuilder AddRequestDetails(MarkUpBuilder builder, IWebServerRequest request) { return(request == null ? builder : builder .Append("<div style=\"font-family: consolas, courier; border : 1px solid black; padding : 8px; margin-bottom : 4px;\">") .Append("<table><tbody>") .Append("<tr><th style=\"padding-right : 4px; text-align : right\">HTTP Method</th><td>", request.HttpMethod, "</td></tr>") .Append("<tr><th style=\"padding-right : 4px; text-align : right\">Url</th><td>", request.HttpListenerRequest.Url, "</td></tr>") .Append("</tbody></table>") .Append("</div>")); }
private object[] GetParametersFromRequest(MethodInfo method, IWebServerRequest request) { if (request.UrlValues.Any()) { return(BindUrlValuesByPosition(method, request.UrlValues)); } else { return(BindFieldsByName(method, request)); } }
public virtual bool CanHandle(IWebServerRequest request) { bool canHandle = IsDefault || PortNumber == request.HttpListenerRequest.LocalEndPoint.Port; if (canHandle) { request.Controller = controllerProvider.GetControllerForRequest(request); } return(canHandle); }
public void NotFound(IWebServerRequest request) { FromString( AddRequestDetails(new MarkUpBuilder() .Append("<!DOCTYPE html>", "<html>", "<head>", "<title>404 Not Found</title>", "</head>") .Append("<body style=\"font-family: calibri, ariel;\">", "<h1 style=\"background-color: #ffffcf; border : 1px solid black; padding : 8px\">404 - Not Found</h1>") , request) .Append("<div style=\"font-family: consolas, courier; border : 1px solid black; padding : 8px\">") .Append("The requested resource could not be found but may be available in the future.<br/>Subsequent requests by the client are permissible.") .Append("</div></body>", "</html>") .ToString(), "text/html", 404); }
public void NotAllowed(IWebServerRequest request) { FromString( AddRequestDetails(new MarkUpBuilder() .Append("<!DOCTYPE html>", "<html>", "<head>", "<title>403 Forbidden</title>", "</head>") .Append("<body style=\"font-family: calibri, ariel;\">", "<h1 style=\"background-color: #ffffcf; border : 1px solid black; padding : 8px\">500 - Forbidden</h1>") , request) .Append("<div style=\"font-family: consolas, courier; border : 1px solid black; padding : 8px\">") .Append("The request was valid, but the server is refusing action.<br/>The user might not have the necessary permissions for a resource, or may need an account of some sort.") .Append("</div></body>", "</html>") .ToString(), "text/html", 403); }
public void InternalError(IWebServerRequest request, Exception e) { FromString( AddRequestDetails(new MarkUpBuilder() .Append("<!DOCTYPE html>", "<html>", "<head>", "<title>500 Error</title>", "</head>") .Append("<body style=\"font-family: calibri, ariel;\">", "<h1 style=\"background-color: #ffffcf; border : 1px solid black; padding : 8px\">500 - Internal Server Error</h1>") , request) .Append("<div style=\"font-family: consolas, courier; border : 1px solid black; padding : 8px\">") .Append(e.ToString().Replace("\n", "<br/>")) .Append("</div></body>", "</html>") .ToString(), "text/html", 500); }
protected void HandleFileRequest(IWebServerRequest request, IWebServerResponse response) { string filePath = Path.Combine(path, request.FilePath); if (File.Exists(filePath)) { response.FromFile(filePath); } else { response.NotFound(request); } }
public IView GetViewForRequest(IWebServerRequest request) { string viewsDirectory = request.WebSite.GetOsFilePath("Views"); string masterPage = Directory.GetFiles(viewsDirectory, "Master.*").FirstOrDefault(); string sectionDirectory = Path.Combine(viewsDirectory, request.ViewTemplateSection); string sectionMasterPage = Directory.GetFiles(sectionDirectory, "Master.*").FirstOrDefault(); string viewTemplateFilter = string.Format("{0}.*", request.ViewTemplateName); string viewTemplatePage = Directory.GetFiles(sectionDirectory, viewTemplateFilter).FirstOrDefault(); //TODO - Caching return(viewFactory.Create(masterPage, sectionMasterPage, viewTemplatePage)); }
private object[] BindFieldsByName(MethodInfo method, IWebServerRequest request) { ParameterInfo[] parameterInfos = method.GetParameters(); object[] parameters = new object[parameterInfos.Length]; int index = 0; foreach (ParameterInfo parameterInfo in method.GetParameters()) { parameters[index] = BindParameterByName(parameterInfo.ParameterType, parameterInfo.Name, request, string.Empty); index++; } return(parameters); }
public override bool CanHandle(IWebServerRequest request) { bool canHandle = base.CanHandle(request); if (canHandle && request.IsFile) { if (!request.FilePath.ToLower().StartsWith("images\\") && !request.FilePath.ToLower().StartsWith("avalon\\")) { return(false); } } return(canHandle); }
public virtual void Handle(IWebServerRequest request, IWebServerResponse response) { request.WebSite = this; if (!request.IsFile) { HandleControllerRequest(request, response); } if (request.IsFile) { HandleFileRequest(request, response); } }
private void ListenerCallback(IAsyncResult result) { HttpListener listener = (HttpListener)result.AsyncState; if (listener.IsListening) { listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener); HttpListenerContext context = listener.EndGetContext(result); IWebServerRequest request = webServerRequestFactory.Create(context.Request); IWebServerResponse response = webServerResponseFactory.Create(context.Response); webSites.First(w => w.CanHandle(request)).Handle(request, response); logger.LogRequest(request, response); response.HttpListenerResponse.Close(); } }
public void LogRequest(IWebServerRequest request, IWebServerResponse response) { WriteMessage(string.Format(logFormatString, DateTime.Now.ToString("yyyy-MM-dd"), //date {0} DateTime.Now.ToString("HH:mm:ss"), //time {1} PlaceHolderIfBlank(request.WebSite.Name), // s-sitename {2} PlaceHolderIfBlank(request.HttpListenerRequest.LocalEndPoint.Address.ToString()), // s-ip {3} PlaceHolderIfBlank(request.HttpMethod), // cs-method {4} PlaceHolderIfBlank(request.HttpListenerRequest.Url.AbsolutePath), // cs-uri {5} PlaceHolderIfBlank(request.HttpListenerRequest.Url.Query), // cs-uri-query {6} request.HttpListenerRequest.LocalEndPoint.Port, // s-port {7} PlaceHolderIfBlank(request.User.UserId), // cs-username {8} PlaceHolderIfBlank(request.HttpListenerRequest.RemoteEndPoint.Address.ToString()), // c-ip {9} request.HttpListenerRequest.UserAgent ?? "-", // cs(User-Agent) {10} response.HttpListenerResponse.StatusCode, // sc-status {11} 0, // sc-substatus {12} 0 // sc-win32-status {13} )); }
public IController GetNextControllerForRequest(IWebServerRequest request, Priorities prreviousPiority) { return(controllers.FirstOrDefault(c => c.Priority > prreviousPiority && c.CanHandle(request))); }
public IController GetControllerForRequest(IWebServerRequest request) { return(controllers.FirstOrDefault(c => c.CanHandle(request))); }
private bool UserAuthorized(MethodInfo method, IWebServerRequest request) { IList <AuthorizedRoleAttribute> attributes = method.GetCustomAttributes <AuthorizedRoleAttribute>().ToList(); return(!attributes.Any() || attributes.Any(a => request.User.Roles.Contains(a.Role))); }