public IHttpResponse HandleRequest(IHttpRequest request, TokenState tokenState) { _logger.Trace($"{nameof(RequestBroker)}.{nameof(HandleRequest)}", new LogItem("Event", "GetRequestHandler started")); Stopwatch timer = Stopwatch.StartNew(); IActivityHandler handler = GetRequestHandler(request); var handlerName = handler != null?handler.GetType().Name : "null"; _logger.Trace($"{nameof(RequestBroker)}.{nameof(HandleRequest)}", new LogItem("Event", "GetRequestHandler completed"), new LogItem("DurationMilliseconds", timer.Elapsed.TotalMilliseconds), new LogItem("FoundHandler", handlerName)); if (handler == null) { return(null); } IHttpResponse response = _container.GetInstance <IHttpResponse>(true); _logger.Trace($"{nameof(RequestBroker)}.{nameof(HandleRequest)}", new LogItem("Event", "Handler Handle called")); timer.Restart(); handler.Handle(request, response); _logger.Trace($"{nameof(RequestBroker)}.{nameof(HandleRequest)}", new LogItem("Event", "Handler Handle completed"), new LogItem("DurationMilliseconds", timer.Elapsed.TotalMilliseconds)); return(response); }
public IHttpResponse HandleRequest(IHttpRequest request, TokenState tokenState) { IHttpResponse response = _container.GetInstance <IHttpResponse>(true); if (tokenState == TokenState.Invalid || tokenState == TokenState.Expired || tokenState == TokenState.NotYetValid) { return(UnauthorisedResponse); } logger.Trace($"{nameof(RequestBroker)}.{nameof(HandleRequest)}", new LogItem("Event", "GetRequestHandler started")); Stopwatch timer = Stopwatch.StartNew(); IActivityHandler handler = GetRequestHandler(request, out ActivityHandlerAttribute attribute); var handlerName = handler != null?handler.GetType().Name : "null"; logger.Trace($"{nameof(RequestBroker)}.{nameof(HandleRequest)}", new LogItem("Event", "GetRequestHandler completed"), new LogItem("DurationMilliseconds", timer.Elapsed.TotalMilliseconds), new LogItem("FoundHandler", handlerName)); if (handler == null) { switch (request.Verb) { case HttpVerb.Options: handler = _container.GetInstance <OptionsActivityHandler>(); attribute = new ActivityHandlerAttribute("", request.Verb, "") { SkipAuthorisation = true }; break; default: return(null); } } JwtSecurityToken token = request.SecurityToken; if (!activityAuthorisationManager.CheckAuthorisation(token, attribute)) { var unauthorised = _container.GetInstance <IHttpResponse>(true); unauthorised.HttpStatusCode = HttpStatusCode.Unauthorized; return(unauthorised); } logger.Trace($"{nameof(RequestBroker)}.{nameof(HandleRequest)}", new LogItem("Event", "Handler Handle called")); timer.Restart(); try { handler.Handle(request, response); } catch (Exception exception) { logger.Exception($"{nameof(RequestBroker)}.{nameof(HandleRequest)}", "Exception caught handling request", exception); response.SetStringContent(string.Empty); response.HttpStatusCode = HttpStatusCode.InternalServerError; } var elapsedMilliseconds = timer.Elapsed.TotalMilliseconds; logger.Trace($"{nameof(RequestBroker)}.{nameof(HandleRequest)}", new LogItem("Event", "Handler Handle completed"), new LogItem("DurationMilliseconds", elapsedMilliseconds)); apiMetrics.RecordHandlerDuration(elapsedMilliseconds, handlerName, response.HttpStatusCode); return(response); }