using Crestron.SimplSharp.WebScripting; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace PepperDash.Core.Web.RequestHandlers { public abstract class WebApiBaseRequestAsyncHandler:IHttpCwsHandler { private readonly Dictionary> _handlers; protected readonly bool EnableCors; /// /// Constructor /// protected WebApiBaseRequestAsyncHandler(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 WebApiBaseRequestAsyncHandler() : this(false) { } /// /// Handles CONNECT method requests /// /// protected virtual async Task HandleConnect(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles DELETE method requests /// /// protected virtual async Task HandleDelete(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles GET method requests /// /// protected virtual async Task HandleGet(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles HEAD method requests /// /// protected virtual async Task HandleHead(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles OPTIONS method requests /// /// protected virtual async Task HandleOptions(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles PATCH method requests /// /// protected virtual async Task HandlePatch(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles POST method requests /// /// protected virtual async Task HandlePost(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles PUT method requests /// /// protected virtual async Task HandlePut(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Handles TRACE method requests /// /// protected virtual async Task HandleTrace(HttpCwsContext context) { context.Response.StatusCode = 501; context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } /// /// Process request /// /// /// /// ProcessRequest method /// public void ProcessRequest(HttpCwsContext context) { if (!_handlers.TryGetValue(context.Request.HttpMethod, out Func handler)) { return; } if (EnableCors) { context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); context.Response.Headers.Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); } var handlerTask = handler(context); handlerTask.GetAwaiter().GetResult(); } } }