Example #1
0
        /// <summary>
        /// HTTPs the request handler.
        /// </summary>
        /// <returns>The request handler.</returns>
        /// <param name="ctx">Context.</param>
        public static object HTTPRequestHandler(HttpListenerContext ctx)
        {
            switch (ctx.Request.HttpMethod)
            {
            case "GET":
                return(MainClass.HandleGETRequest(ctx));

            case "POST":
                return(MainClass.HandlePOSTRequest(ctx, CustomSessionIdentity.GetSessionIdentity(ctx)));

            case "HEAD":
                return("");

            case "OPTIONS":
                ctx.Response.AddHeader("Allow", "GET,HEAD,POST,OPTIONS");
                return("");

            case "PUT":
            case "DELETE":
            case "TRACE":
            case "CONNECT":
            case "PATCH":
            default:
                ctx.Response.StatusCode = 405;
                return("NOT ALLOWED");
            }
        }
Example #2
0
        /// <summary>
        /// Handles the GET request.
        /// </summary>
        /// <returns>
        /// The GET request.
        /// </returns>
        /// <param name='ctx'>
        /// Context.
        /// </param>
        public static object HandleGETRequest(HttpListenerContext ctx)
        {
            if (!string.IsNullOrEmpty(ctx.Request.Headers [RESTKeys.RESTHandlerRequest]))
            {
                if (!RESTCallbackManager.Instance.GETCallbacks.ContainsKey(ctx.Request.Headers [RESTKeys.RESTHandlerRequest]))
                {
                    ctx.Response.StatusCode = 404;
                    return(HttpResponse.NewResponse().AddErrorCode(GuruMeditation.ErrorCode.RESTHandlerRequestNotFound).ToJSON());
                }

                // Is a REST API request
                SessionIdentity             si      = CustomSessionIdentity.GetSessionIdentity(ctx);
                Dictionary <string, string> Headers = UtilitiesManager.Instance.GetHeaders(ctx);

                // This is where the string specified in the REQUEST header is matched against the
                // GET REST API mappings
                HttpResponse ret = RESTCallbackManager.Instance.GETCallbacks [ctx.Request.Headers [RESTKeys.RESTHandlerRequest]] (Headers, si);
                ctx.Response.ContentType = "application/json; charset=utf-8";
                if (ret.ErrorCode.Count() > 0)
                {
                    ctx.Response.StatusCode = 500;
                }
                return(ret.ToJSON());
            }

            else
            {
                // Not a REST API Request
                string route = RouterManager.Instance.FindRoute(ctx.Request.Url).FirstOrDefault();

                if (!string.IsNullOrEmpty(route) && ContentManager.Instance.content.ContainsKey(route))
                {
                    var item = ContentManager.Instance.content[route];
                    ctx.Response.ContentType     = item.ContentType.MediaType;
                    ctx.Response.ContentEncoding = System.Text.Encoding.UTF8;
                    return(item);
                }
                else if (!string.IsNullOrEmpty(route) && RESTCallbackManager.Instance.GETCallbacks.ContainsKey(route))
                {
                    SessionIdentity             si      = CustomSessionIdentity.GetSessionIdentity(ctx);
                    Dictionary <string, string> Headers = UtilitiesManager.Instance.GetHeaders(ctx);

                    // This is where the string specified in the REQUEST header is matched against the
                    // GET REST API mappings
                    HttpResponse ret = RESTCallbackManager.Instance.GETCallbacks [route] (Headers, si);
                    //ctx.Response.ContentType = "application/json; charset=utf-8";
                    if (ret.ErrorCode.Count() > 0)
                    {
                        ctx.Response.StatusCode = 500;
                    }
                    ctx.Response.Redirect("/");
                    return("");
                }
                else
                {
                    ctx.Response.StatusCode = 404;
                    return("NOT FOUND");
                }
            }
        }