From 9447a8a09f87d6ea2cb62860021c595386668eec Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Wed, 20 Feb 2019 22:55:15 +0200 Subject: A lot of work !!! --- .../Tango.Web/Controllers/JsonController.cs | 76 ------------- .../Tango.Web/Controllers/TangoController.cs | 125 +++++++++++++++++++++ 2 files changed, 125 insertions(+), 76 deletions(-) delete mode 100644 Software/Visual_Studio/Tango.Web/Controllers/JsonController.cs create mode 100644 Software/Visual_Studio/Tango.Web/Controllers/TangoController.cs (limited to 'Software/Visual_Studio/Tango.Web/Controllers') diff --git a/Software/Visual_Studio/Tango.Web/Controllers/JsonController.cs b/Software/Visual_Studio/Tango.Web/Controllers/JsonController.cs deleted file mode 100644 index 1fae9cccc..000000000 --- a/Software/Visual_Studio/Tango.Web/Controllers/JsonController.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Security.Authentication; -using System.Threading; -using System.Threading.Tasks; -using System.Web; -using System.Web.Http; -using System.Web.Http.Controllers; -using Tango.Logging; - -namespace Tango.Web.Controllers -{ - public class JsonController : ApiController - { - protected LogManager LogManager { get; private set; } - - public JsonController() - { - LogManager = LogManager.Default; - } - - public override async Task ExecuteAsync(HttpControllerContext context, CancellationToken cancellationToken) - { - string controllerName = String.Empty; - string actionName = String.Empty; - - try - { - var routeData = HttpContext.Current.Request.RequestContext.RouteData; - actionName = routeData.Values["action"].ToString(); - controllerName = routeData.Values["controller"].ToString(); - } - catch { } - - try - { - String request = String.Empty; - - try - { - request = context.Request.Content.ReadAsStringAsync().Result; - } - catch {} - - LogManager.Log($"Request Received on {controllerName + "/" + actionName}: \n{request}"); - - var result = await base.ExecuteAsync(context, cancellationToken); - return result; - } - catch (Exception ex) - { - LogManager.Log(ex, $"An error occurred while processing the request message on {controllerName + "/" + actionName}."); - - HttpStatusCode code = HttpStatusCode.InternalServerError; - - if (ex is ArgumentException) - { - code = HttpStatusCode.BadRequest; - } - else if (ex is AuthenticationException) - { - code = HttpStatusCode.Unauthorized; - } - -#if DEBUG - throw new HttpResponseException(Request.CreateErrorResponse(code, ex.ToString())); -#else - throw new HttpResponseException(Request.CreateErrorResponse(code, ex.FlattenMessage())); -#endif - } - } - } -} \ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Web/Controllers/TangoController.cs b/Software/Visual_Studio/Tango.Web/Controllers/TangoController.cs new file mode 100644 index 000000000..854d1cf96 --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/Controllers/TangoController.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Security.Authentication; +using System.Threading; +using System.Threading.Tasks; +using System.Web; +using System.Web.Http; +using System.Web.Http.Controllers; +using Tango.Logging; +using Tango.Transport.Web; +using Tango.Web.Authentication; + +namespace Tango.Web.Controllers +{ + public class TangoController : ApiController + { + protected LogManager LogManager { get; private set; } + + public TangoController() + { + LogManager = LogManager.Default; + } + + public override async Task ExecuteAsync(HttpControllerContext context, CancellationToken cancellationToken) + { + string controllerName = String.Empty; + string actionName = String.Empty; + + try + { + var routeData = HttpContext.Current.Request.RequestContext.RouteData; + actionName = routeData.Values["action"].ToString(); + controllerName = routeData.Values["controller"].ToString(); + } + catch { } + + try + { + String request = String.Empty; + + try + { + request = context.Request.Content.ReadAsStringAsync().Result; + } + catch { } + + LogManager.Log($"Request Received on {controllerName + "/" + actionName}: \n{request}"); + + OnRequestArrived(context.Request); + + var result = await base.ExecuteAsync(context, cancellationToken); + return result; + } + catch (Exception ex) + { + LogManager.Log(ex, $"An error occurred while processing the request message on {controllerName + "/" + actionName}."); + + HttpStatusCode code = HttpStatusCode.InternalServerError; + + if (ex is ArgumentException) + { + code = HttpStatusCode.BadRequest; + } + else if (ex is AuthenticationException || ex is TokenExpiredException) + { + code = HttpStatusCode.Unauthorized; + } + + var httpException = new HttpResponseException(Request.CreateErrorResponse(code, ex)); + +#if DEBUG + throw httpException; +#else + //Remove Stack trace + var expandedException = httpException.Response.Content as System.Net.Http.ObjectContent; + + if (expandedException != null) + { + var expandedExceptionValues = expandedException.Value as HttpError; + + if (expandedExceptionValues != null) + { + expandedExceptionValues["StackTrace"] = "StackTrace not provided."; + } + } +#endif + + + throw httpException; + } + } + + protected virtual void OnRequestArrived(HttpRequestMessage request) + { + //Do nothing. + } + } + + public class TangoController : TangoController where T : class + { + public WebToken RequestToken { get; set; } + + protected override void OnRequestArrived(HttpRequestMessage request) + { + base.OnRequestArrived(request); + + var authorizationHeader = request.Headers.Authorization; + + if (authorizationHeader != null && authorizationHeader.Parameter != null) + { + try + { + RequestToken = WebToken.FromToken(authorizationHeader.Parameter); + } + catch (Exception ex) + { + throw new HttpParseException("Could not parse the provided token embedded object.", ex); + } + } + } + } +} \ No newline at end of file -- cgit v1.3.1