protected override void RequestStartup(IWindsorContainer container, IPipelines pipelines, NancyContext context) { pipelines.BeforeRequest.AddItemToStartOfPipeline(nancyContext => { this.Info(() => "Api invoked at {0}[{1}]".FormatWith(nancyContext.Request.Method, nancyContext.Request.Url)); var token = ""; var cookie = nancyContext.Request.Headers.Cookie.FirstOrDefault(x => (x.Name + "").ToLower() == "token"); if (cookie != null) token = HttpUtility.UrlDecode(cookie.Value); if (token != String.Empty) nancyContext.Request.Headers.Authorization = "Token {0}".FormatWith(token); var user = container.Resolve<ITokenizer>().Detokenize(token, nancyContext, new DefaultUserIdentityResolver()); if (user != null) { nancyContext.CurrentUser = user; } return null; }); pipelines.AfterRequest.AddItemToEndOfPipeline(nancyContext => this.Info(() => "Api invoked successfully at {0}[{1}]".FormatWith(nancyContext.Request.Method, nancyContext.Request.Url))); pipelines.OnError.AddItemToEndOfPipeline((nancyContext, exception) => { this.Error(() => "Error on Api request {0}[{1}] => {2}".FormatWith(nancyContext.Request.Method, nancyContext.Request.Url, exception)); var errorResponse = ErrorResponse.FromException(exception); if (exception is LightstoneAutoException) errorResponse.StatusCode = HttpStatusCode.ImATeapot; return errorResponse; }); //pipelines.EnableCors(); // cross origin resource sharing pipelines.AfterRequest.AddItemToEndOfPipeline(nancyContext => { nancyContext.Response.Headers.Add("Access-Control-Allow-Origin", "*"); nancyContext.Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, Authorization"); nancyContext.Response.Headers.Add("Access-Control-Allow-Credentials", "true"); nancyContext.Response.Headers.Add("Access-Control-Allow-Methods", "POST,GET,DELETE,PUT,OPTIONS"); }); pipelines.AddTransactionScope(container); AddLookupData(pipelines, container.Resolve<IRetrieveEntitiesByType>()); TokenAuthentication.Enable(pipelines, new TokenAuthenticationConfiguration(container.Resolve<ITokenizer>())); pipelines.PublishTransactionToQueue(container); pipelines.BeforeRequest.AddItemToEndOfPipeline(ctx => { if (ctx.CurrentUser != null) ctx.ViewBag.UserName = ctx.CurrentUser.UserName; return null; }); base.RequestStartup(container, pipelines, context); }
protected override void RequestStartup(IWindsorContainer container, IPipelines pipelines, NancyContext context) { //Make every request SSL based //pipelines.BeforeRequest += ctx => //{ // return (!ctx.Request.Url.Scheme.Equals("https", StringComparison.OrdinalIgnoreCase)) ? // (Response)HttpStatusCode.Unauthorized : // null; //}; //pipelines.EnableStatelessAuthentication(container.Resolve<IAuthenticateUser>()); pipelines.BeforeRequest.AddItemToStartOfPipeline(nancyContext => { this.Info(() => "Api invoked at {0}[{1}]".FormatWith(nancyContext.Request.Method, nancyContext.Request.Url)); var token = ""; var cookie = nancyContext.Request.Headers.Cookie.FirstOrDefault(x => (x.Name + "").ToLower() == "token"); if (cookie != null) token = HttpUtility.UrlDecode(cookie.Value); var user = container.Resolve<ITokenizer>().Detokenize(token, nancyContext, new DefaultUserIdentityResolver()); if (user != null) { nancyContext.CurrentUser = user; //container.Resolve<CurrentContext>().Context = nancyContext; } return null; }); pipelines.AfterRequest.AddItemToEndOfPipeline(nancyContext => this.Info(() => "Api invoked successfully at {0}[{1}]".FormatWith(nancyContext.Request.Method, nancyContext.Request.Url))); pipelines.OnError.AddItemToEndOfPipeline((nancyContext, exception) => { this.Error(() => "Error on Api request {0}[{1}] => {2}".FormatWith(nancyContext.Request.Method, nancyContext.Request.Url, exception)); var errorResponse = ErrorResponse.FromException(exception); if (exception is LightstoneAutoException) errorResponse.StatusCode = HttpStatusCode.ImATeapot; return errorResponse; }); //pipelines.EnableCors(); // cross origin resource sharing pipelines.AfterRequest.AddItemToEndOfPipeline(nancyContext => { nancyContext.Response.Headers.Add("Access-Control-Allow-Origin", nancyContext.Request.Headers.Referrer.Length > 0 ? nancyContext.Request.Headers.Referrer.Substring(0, nancyContext.Request.Headers.Referrer.Length - 1) : "*"); nancyContext.Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, Authorization"); nancyContext.Response.Headers.Add("Access-Control-Allow-Credentials", "true"); nancyContext.Response.Headers.Add("Access-Control-Allow-Methods", "POST,GET,DELETE,PUT,OPTIONS"); }); pipelines.AddTransactionScope(container); TokenAuthentication.Enable(pipelines, new TokenAuthenticationConfiguration(container.Resolve<ITokenizer>())); base.RequestStartup(container, pipelines, context); }