Пример #1
0
            public override void Configure(Container container)
            {
                PreRequestFilters.Add((req, res) =>
                {
                    var roleHeader = req.GetHeader("X-role");
                    if (roleHeader == null)
                    {
                        return;
                    }

                    req.Items[Keywords.Session] = new AuthUserSession
                    {
                        UserAuthId   = "1",
                        UserAuthName = "test",
                        Roles        = new List <string> {
                            roleHeader
                        }
                    };
                });

                ServiceExceptionHandlers.Add((req, dto, ex) =>
                {
                    return(DtoUtils.CreateErrorResponse(dto, ex));
                });
            }
Пример #2
0
 public void EnableBuffering()
 {
     PreRequestFilters.Add((req, res) =>
     {
         req.UseBufferedStream = true;
         res.UseBufferedStream = true;
     });
 }
Пример #3
0
 public override void Configure(Container container)
 {
     PreRequestFilters.Add((req, res) =>
     {
         req.UseBufferedStream = true;
         res.UseBufferedStream = true;
     });
 }
Пример #4
0
        public override void Configure(Container container)
        {
            // Global Configurations
            SetConfig(new HostConfig
            {
                DefaultContentType    = MimeTypes.Json,
                EnableFeatures        = Feature.Json,
                PreferredContentTypes = new List <string> {
                    MimeTypes.Json
                },
                MapExceptionToStatusCode =
                {
                    { typeof(InabilityToProcessPayloadException), (int)HttpStatusCode.BadRequest },
                }
            });

            // Exception Handlers
            ServiceExceptionHandlers.Add((httpReq, request, exception) => {
                var message = exception.Message;
                Log.Error(message);
                Log.Error(exception.GetResponseBody());
                Log.Info(httpReq.AbsoluteUri);
                return(exception is DeclinePaymentException
                ? new HttpResult(
                           ProcessDto.GetErrorResponse(httpReq.AbsoluteUri, message, ((DeclinePaymentException)exception).ErrorCode),
                           HttpStatusCode.OK)
                : new HttpResult(null, HttpStatusCode.BadRequest));
            });

            UncaughtExceptionHandlers.Add((req, res, operationName, ex) => {
                Log.Error(ex.GetResponseBody());
                res.StatusCode = ex is SerializationException
                    ? (int)HttpStatusCode.BadRequest
                    : (int)HttpStatusCode.InternalServerError;
                res.EndRequest(true);
            });

            // Global Filters
            PreRequestFilters.Add((req, res) => {
                Log.Info($"{HTTP_HEADER.HOST} : {req.UserHostAddress}");
                Log.Info($"{HTTP_HEADER.USER_AGENT} : {req.UserAgent}");
                Log.Info($"{HTTP_HEADER.CONTENT_LENGTH} : {req.ContentLength}");
                Log.Info($"{HTTP_HEADER.CONTENT_TYPE} : {req.ContentType}");
                Log.Info($"{HTTP_HEADER.ACCEPT} : {req.AcceptTypes}");
                Simulate500Error.CallMqServer();
            });

            // Validations
            Plugins.Add(new ValidationFeature());
            container.RegisterValidators(typeof(MerchantPaymentValidator).Assembly,
                                         typeof(MerchantPaymentAdviceValidator).Assembly,
                                         typeof(CashInValidator).Assembly, typeof(CashInAdviceValidator).Assembly,
                                         typeof(CashOutValidator).Assembly, typeof(CashOutAdviceValidator).Assembly);

            // IoC
            container.RegisterAutoWiredAs <AppSettings, IAppSettings>();
        }
Пример #5
0
            public override void Configure(Funq.Container container)
            {
                //register any dependencies your services use, e.g:
                //container.Register<ICacheClient>(new MemoryCacheClient());

                PreRequestFilters.Add((httpReq, httpRes) => {
                    httpReq.UseBufferedStream = true;
                });
            }
Пример #6
0
            /// <summary>
            /// AppHostHttpListenerBase method.
            /// </summary>
            /// <param name="container">SS's funq container</param>
            public override void Configure(Funq.Container container)
            {
                HostContext.Config.GlobalResponseHeaders.Clear();

                PreRequestFilters.Add((req, res) => req.UseBufferedStream = res.UseBufferedStream = true);

                //Signal advanced web browsers what HTTP Methods you accept
                //base.SetConfig(new EndpointHostConfig());
                Routes.Add <PlainText>("/test/plaintext", "GET");
            }
        public override void Configure(Container container)
        {
            Config.DebugMode             = true;
            Config.ReturnsInnerException = true;
            RegisterAuthentication(container);
            Plugins.Add(new ValidationFeature());
            Plugins.Add(new WebhookFeature());

            // We need this filter to allow us to read the request body in IRequest.GetRawBody()
            PreRequestFilters.Insert(0, (httpReq, httpRes) => { httpReq.UseBufferedStream = true; });
        }
Пример #8
0
        /// <summary>
        /// Configure the given container with the registrations provided by the funqlet.
        /// </summary>
        /// <param name="container">Container to register.</param>
        public override void Configure(Container container)
        {
            Log.Info("Starting service...");

            // Set up base configuration
            const Feature disableFeatures = Feature.Soap | Feature.Xml | Feature.Csv | Feature.Jsv;

            SetConfig(new EndpointHostConfig {
                EnableFeatures = Feature.All.Remove(disableFeatures),
#if DEBUG
                DebugMode = true,
#endif
                DefaultContentType = ContentType.Json
            });

            // Set JSON services to return "camelCase" rather than "CamelCase"
            JsConfig.EmitCamelCaseNames = true;

            // Set dates to serialize to ISO-8601 dates
            JsConfig.DateHandler = JsonDateHandler.ISO8601;

            // Don't serialize type information
            JsConfig.ExcludeTypeInfo = true;

            // Set up authentication service
            Plugins.Add(new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] { new MoshAppAuthProvider() })
            {
                ServiceRoutes = new Dictionary <Type, string[]> {
                    { typeof(AuthService), new[] { "/authenticate" } },
                },
                HtmlRedirect = null,
                IncludeAssignRoleServices = false,
            });

            // Enable CORS (Cross-Origin Resource Sharing)
            // http://stackoverflow.com/questions/8211930/servicestack-rest-api-and-cors
            Plugins.Add(new CorsFeature());
            PreRequestFilters.Add((req, res) => {
                if (req.HttpMethod == "OPTIONS")
                {
                    res.EndServiceStackRequest();
                }
            });

            container.Register((Global.Cache = new MemoryCacheClient()));

            Log.Debug(Config.Metadata.Dump());
            Log.Info("Service started!");
            Log.Debug("Debug mode is {0}!".F(Config.DebugMode ? "ON" : "OFF"));
        }
Пример #9
0
        public override void Configure(Container container)
        {
            Plugins.Add(new CsvFormat()); //required to allow .csv

            ContentTypes.Register(MimeTypes.PlainText,
                                  (req, o, stream) => JsonSerializer.SerializeToStream(o.GetType(), stream),
                                  JsonSerializer.DeserializeFromStream);

            PreRequestFilters.Add((req, res) => {
                if (req.ContentType.MatchesContentType(MimeTypes.PlainText))
                {
                    req.ResponseContentType = MimeTypes.Json;
                }
            });
        }
            public override void Configure(Funq.Container container)
            {
                JsConfig.EmitCamelCaseNames = true;
                JsConfig.DateHandler        = DateHandler.ISO8601;

                Plugins.Add(new CorsFeature(allowedOrigins: "*",
                                            allowedMethods: "GET, POST, PUT, DELETE, OPTIONS",
                                            allowedHeaders: "Content-Type, authToken, accept, authorization",
                                            allowCredentials: false));

                var emitGlobalHeadersHandler = new CustomActionHandler((httpReq, httpRes) => httpRes.EndRequest());

                RawHttpHandlers.Add(httpReq => httpReq.HttpMethod == HttpMethods.Options ? emitGlobalHeadersHandler : null);
                PreRequestFilters.Add((req, res) => req.UseBufferedStream = true);
            }
Пример #11
0
        public override void Configure(Container container)
        {
            PreRequestFilters.Add((httpReq, httpRes) => {
                if (UseBufferredStream)
                {
                    httpReq.UseBufferedStream = UseBufferredStream;
                }

                LastRequestBody = null;
                LastRequestBody = httpReq.GetRawBody();
            });

            Plugins.Add(new RequestLogsFeature {
                EnableRequestBodyTracking = EnableRequestBodyTracking
            });
        }
Пример #12
0
        public override void Configure(Container container)
        {
            HostConfig.Instance.DefaultRedirectPath         = DefaultRedirectPath;
            HostConfig.Instance.LogUnobservedTaskExceptions = false;

            HostConfig.Instance.MapExceptionToStatusCode = new Dictionary <Type, int>
            {
                { typeof(InvalidOperationException), 422 },
                { typeof(ResourceNotFoundException), 404 },
                { typeof(FileNotFoundException), 404 },
                { typeof(DirectoryNotFoundException), 404 },
                { typeof(SecurityException), 401 },
                { typeof(PaymentRequiredException), 402 },
                { typeof(UnauthorizedAccessException), 500 },
                { typeof(ApplicationException), 500 }
            };

            HostConfig.Instance.DebugMode = false;

            HostConfig.Instance.LogFactory = LogManager.LogFactory;

            // The Markdown feature causes slow startup times (5 mins+) on cold boots for some users
            // Custom format allows images
            HostConfig.Instance.EnableFeatures = Feature.Csv | Feature.Html | Feature.Json | Feature.Jsv | Feature.Metadata | Feature.Xml | Feature.CustomFormat;

            container.Adapter = _containerAdapter;

            Plugins.Add(new SwaggerFeature());
            Plugins.Add(new CorsFeature(allowedHeaders: "Content-Type, Authorization, Range, X-MediaBrowser-Token, X-Emby-Authorization"));

            //Plugins.Add(new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] {
            //    new SessionAuthProvider(_containerAdapter.Resolve<ISessionContext>()),
            //}));

            PreRequestFilters.Add((httpReq, httpRes) =>
            {
                //Handles Request and closes Responses after emitting global HTTP Headers
                if (string.Equals(httpReq.Verb, "OPTIONS", StringComparison.OrdinalIgnoreCase))
                {
                    httpRes.EndRequest(); //add a 'using ServiceStack;'
                }
            });

            HostContext.GlobalResponseFilters.Add(new ResponseFilter(_logger).FilterResponse);
        }
Пример #13
0
        // http://localhost:5000/auth/[email protected]&&password=!Abc1234
        // Configure your AppHost with the necessary configuration and dependencies your App needs
        public override void Configure(Container container)
        {
            // enable server-side rendering, see: https://sharpscript.net
            Plugins.Add(new SharpPagesFeature());

            if (Config.DebugMode)
            {
                Plugins.Add(new HotReloadFeature());
            }

            Plugins.Add(new RazorFormat()); // enable ServiceStack.Razor

            SetConfig(new HostConfig
            {
                AddRedirectParamsToQueryString = true,
                DebugMode          = AppSettings.Get(nameof(HostConfig.DebugMode), false),
                UseSameSiteCookies = true, // prevents OAuth providers which use Sessions like Twitter from working
                UseSecureCookies   = true,
            });

            var cache = container.Resolve <ICacheClient>();

            Plugins.Add(new ValidationFeature());

//            Svg.CssFillColor["svg-auth"] = "#ccc";
            Svg.CssFillColor["svg-icons"] = "#e33";

            this.CustomErrorHttpHandlers[HttpStatusCode.NotFound]  = new RazorHandler("/notfound");
            this.CustomErrorHttpHandlers[HttpStatusCode.Forbidden] = new SharpPageHandler("/forbidden");

            PreRequestFilters.Add((req, res) => {
                $"CALLED for: {req.PathInfo}".PrintDump();
            });

//            TypeScriptGenerator.TypeFilter = (type, args) => {
//                if (type == "ResponseBase`1" && args[0] == "Dictionary<String,List`1>")
//                    return "ResponseBase<Map<string,Array<any>>>";
//                return null;
//            };


            //GetPlugin<SvgFeature>().ValidateFn = req => Config.DebugMode; // only allow in DebugMode
        }
Пример #14
0
 protected void PopulateArrayFilters()
 {
     PreRequestFiltersArray                = PreRequestFilters.ToArray();
     RequestConvertersArray                = RequestConverters.ToArray();
     ResponseConvertersArray               = ResponseConverters.ToArray();
     GlobalRequestFiltersArray             = GlobalRequestFilters.ToArray();
     GlobalRequestFiltersAsyncArray        = GlobalRequestFiltersAsync.ToArray();
     GlobalResponseFiltersArray            = GlobalResponseFilters.ToArray();
     GlobalResponseFiltersAsyncArray       = GlobalResponseFiltersAsync.ToArray();
     GlobalMessageRequestFiltersArray      = GlobalMessageRequestFilters.ToArray();
     GlobalMessageRequestFiltersAsyncArray = GlobalMessageRequestFiltersAsync.ToArray();
     GlobalMessageResponseFiltersArray     = GlobalMessageResponseFilters.ToArray();
     RawHttpHandlersArray             = RawHttpHandlers.ToArray();
     CatchAllHandlersArray            = CatchAllHandlers.ToArray();
     GatewayRequestFiltersArray       = GatewayRequestFilters.ToArray();
     GatewayRequestFiltersAsyncArray  = GatewayRequestFiltersAsync.ToArray();
     GatewayResponseFiltersArray      = GatewayResponseFilters.ToArray();
     GatewayResponseFiltersAsyncArray = GatewayResponseFiltersAsync.ToArray();
 }
Пример #15
0
            public override void Configure(Container container)
            {
                PreRequestFilters.Add((req, res) =>
                {
                    var roleHeader = req.GetHeader("X-role");
                    if (roleHeader == null)
                    {
                        return;
                    }

                    req.Items[Keywords.Session] = new AuthUserSession
                    {
                        UserAuthId   = "1",
                        UserAuthName = "test",
                        Roles        = new List <string> {
                            roleHeader
                        }
                    };
                });
            }
Пример #16
0
        public override void Configure(Container container)
        {
            SetConfig(new EndpointHostConfig
            {
                AllowJsonpRequests = true
            });

            JsConfig.EmitCamelCaseNames = true;
            JsConfig.DateHandler        = JsonDateHandler.ISO8601;

            Plugins.Add(new CorsFeature());

            PreRequestFilters.Add((httpReq, httpRes) =>
            {
                if (httpReq.HttpMethod == "OPTIONS")
                {
                    httpRes.EndRequest();
                }
            });
        }
Пример #17
0
        public override void Configure(Container container)
        {
            SetConfig(new HostConfig
            {
                AllowRouteContentTypeExtensions = true
            });

            Plugins.Add(new CsvFormat()); //required to allow .csv

            Plugins.RemoveAll(x => x is MarkdownFormat);

            ContentTypes.Register(MimeTypes.PlainText,
                                  (req, o, stream) => JsonSerializer.SerializeToStream(o.GetType(), stream),
                                  JsonSerializer.DeserializeFromStream);

            PreRequestFilters.Add((req, res) => {
                if (req.ContentType.MatchesContentType(MimeTypes.PlainText))
                {
                    req.ResponseContentType = MimeTypes.Json;
                }
            });
        }
Пример #18
0
        public override void Configure(Container container)
        {
            JsConfig.DateHandler = DateHandler.ISO8601;

            var appSettings = new AppSettings();

            ServiceExceptionHandlers.Add((httpReq, request, exception) =>
            {
                var logger = LogManager.GetLogger(GetType());
                logger.Error(exception);
                return(null);
            });


            container.Register <ICacheClient>(new MemoryCacheClient {
                FlushOnDispose = false
            });


            JsConfig.AssumeUtc = true;

            container.RegisterAs <FordereAuthEventHandler, IAuthEvents>();

            container.Register <IDbConnectionFactory>(
                new OrmLiteConnectionFactory(
                    "Server = {0}; Database = {1}; Uid = {2}; Pwd = {3}".Fmt(
                        appSettings.Get("DB.Host"),
                        appSettings.Get("DB.Name"),
                        appSettings.Get("DB.User"),
                        appSettings.Get("DB.Pass")),
                    MySqlDialect.Provider));

            container.Register <IUserAuthRepository>(c => new OrmLiteAuthRepository(c.Resolve <IDbConnectionFactory>()));

            var authProvider = new IAuthProvider[]
            {
                new CredentialsAuthProvider(),
                new JwtAuthProvider(appSettings),
            }.ToList();

            if (appSettings.Get("Debug", false))
            {
                authProvider.Add(new BasicAuthProvider());
            }

            var authFeature = new AuthFeature(() => new FordereAuthUserService(), authProvider.ToArray());

            this.Plugins.Add(new RegistrationFeature());
            this.Plugins.Add(authFeature);


            this.Plugins.Add(new RequestLogsFeature
            {
                // do not log request bodies of requests containing passwords
                HideRequestBodyForRequestDtoTypes = new[] { typeof(Authenticate), typeof(Register), typeof(UpdateUserProfileRequest) },
            });

            if (appSettings.Get("CORS.Enabled", false))
            {
                this.Plugins.Add(
                    new CorsFeature(
                        allowedOrigins: appSettings.GetString("CORS.AllowedOrigins"),
                        allowedMethods: "OPTIONS,GET,POST,PUT,DELETE,PATCH",
                        allowedHeaders: "Content-Type,Authorization,division_id",
                        allowCredentials: true));
            }

            if (appSettings.Get("Debug", false))
            {
                this.Plugins.Add(new PostmanFeature());
                this.Plugins.Add(new OpenApiFeature());
            }

            if (appSettings.Get("Debug", false) == false)
            {
                this.Plugins.RemoveAll(x => x is MetadataFeature);
            }

            this.SetConfig(new HostConfig
            {
                // TODO SSH This sets ss-pid/ss-opt to NOT HttpOnly.. is this a security issue?
                AllowNonHttpOnlyCookies = true,
                DebugMode = appSettings.Get("Debug", false)
            });

            this.RegisterTypedRequestFilter <ICaptchaRequest>(Filter.Captcha);
            this.RegisterTypedRequestFilter <EnterMatchAppointmentRequest>(Filter.EnterMatchAppointment);
            this.RegisterTypedRequestFilter <EnterMatchResultRequest>(Filter.EnterMatchResult);

            this.RegisterTypedResponseFilter <TeamDto>(Filter.TeamPlayerDetails);

            PreRequestFilters.Add((httpReq, httpRes) =>
            {
                if (httpReq.Verb.ToUpper() == "PATCH")
                {
                    httpReq.UseBufferedStream = true;
                }
            });
        }