using System; using System.Collections.Generic; using Crestron.SimplSharp.WebScripting; namespace PepperDash.Core.Web.RequestHandlers { /// /// CWS Base Handler, implements IHttpCwsHandler /// public abstract class WebApiBaseRequestHandler : IHttpCwsHandler { private readonly Dictionary> _handlers; protected readonly bool EnableCors; /// /// Constructor /// protected WebApiBaseRequestHandler(bool enableCors) { EnableCors = enableCors; _handlers = new Dictionary> { {"CONNECT", HandleConnect}, {"DELETE", HandleDelete}, {"GET", HandleGet}, {"HEAD", HandleHead}, {"OPTIONS", HandleOptions}, {"PATCH", HandlePatch}, {"POST", HandlePost}, {"PUT", HandlePut}, {"TRACE", HandleTrace} }; } /// /// Constructor /// protected WebApiBaseRequestHandler() : this(false) { } /// /// Handles CONNECT method requests /// /// protected virtual void HandleConnect(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles DELETE method requests /// /// protected virtual void HandleDelete(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles GET method requests /// /// protected virtual void HandleGet(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles HEAD method requests /// /// protected virtual void HandleHead(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles OPTIONS method requests /// /// protected virtual void HandleOptions(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles PATCH method requests /// /// protected virtual void HandlePatch(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles POST method requests /// /// protected virtual void HandlePost(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles PUT method requests /// /// protected virtual void HandlePut(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles TRACE method requests /// /// protected virtual void HandleTrace(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Process request /// /// /// /// ProcessRequest method /// public void ProcessRequest(HttpCwsContext context) { Action handler; if (!_handlers.TryGetValue(context.Request.HttpMethod, out handler)) { return; } if (EnableCors) { context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); context.Response.Headers.Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); } handler(context); } } }