Exemplo n.º 1
0
        /// <summary>
        /// Application specific configuration
        /// This method should initialize any IoC resources utilized by your web service classes.
        /// </summary>
        /// <param name="container"></param>
        public override void Configure(Container container)
        {
            this.GlobalHtmlErrorHttpHandler = new RazorHandler("/error");

            JsConfig.EmitCamelCaseNames = true;

            SetConfig(new HostConfig
            {
                DebugMode = true,
                Return204NoContentForEmptyResponse = true,
            });

            container.Register <IRedisClientsManager>(c =>
                                                      new RedisManagerPool("localhost:6379"));
            container.Register(c => c.Resolve <IRedisClientsManager>().GetCacheClient());

            container.Register <IDbConnectionFactory>(c => new OrmLiteConnectionFactory(
                                                          AppSettings.GetString("AppDb"), PostgreSqlDialect.Provider));

            using (var db = container.Resolve <IDbConnectionFactory>().Open())
            {
                db.DropAndCreateTable <Logger>();
            }

            container.Register <IAuthRepository>(c =>
                                                 new OrmLiteAuthRepository(c.Resolve <IDbConnectionFactory>())
            {
                UseDistinctRoleTables = AppSettings.Get("UseDistinctRoleTables", true),
            });

            var authRepo = (OrmLiteAuthRepository)container.Resolve <IAuthRepository>();

            authRepo.DropAndReCreateTables();

            CreateUser(authRepo, 1, "test", "test", new List <string> {
                "TheRole"
            }, new List <string> {
                "ThePermission"
            });
            CreateUser(authRepo, 2, "test2", "test2");

            Plugins.Add(new PostmanFeature());

            Plugins.Add(new CorsFeature(
                            allowOriginWhitelist: new[] { "http://localhost", "http://localhost:8080", "http://localhost:56500", "http://test.servicestack.net", "http://null.jsbin.com" },
                            allowCredentials: true,
                            allowedHeaders: "Content-Type, Allow, Authorization, X-Args"));

            Plugins.Add(new RequestLogsFeature
            {
                //RequestLogger = new RedisRequestLogger(container.Resolve<IRedisClientsManager>()),
            });
            Plugins.Add(new RazorFormat());

            Plugins.Add(new AuthFeature(() => new CustomUserSession(),
                                        new IAuthProvider[]
            {
                new JwtAuthProvider(AppSettings),
                new BasicAuthProvider(AppSettings),
                new CredentialsAuthProvider(AppSettings),
            }));

            Plugins.Add(new SwaggerFeature());
            Plugins.Add(new ValidationFeature());
            Plugins.Add(new AutoQueryFeature
            {
                MaxLimit = 100,
            });

            container.RegisterValidators(typeof(ThrowValidationValidator).Assembly);

            JavaGenerator.AddGsonImport = true;
            var nativeTypes = this.GetPlugin <NativeTypesFeature>();

            nativeTypes.MetadataTypesConfig.ExportTypes.Add(typeof(DayOfWeek));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Application specific configuration
        /// This method should initialize any IoC resources utilized by your web service classes.
        /// </summary>
        /// <param name="container"></param>
        public override void Configure(Container container)
        {
            // this.GlobalHtmlErrorHttpHandler = new RazorHandler("/error");
            CSharpGenerator.UseNullableAnnotations = true;

            SetConfig(new HostConfig
            {
                AdminAuthSecret    = "secretz",
                DebugMode          = HostingEnvironment.IsDevelopment(),
                UseSameSiteCookies = true,
                Return204NoContentForEmptyResponse = true,
            });

            container.Register <IRedisClientsManager>(c =>
                                                      new RedisManagerPool("localhost:6379"));
            container.Register(c => c.Resolve <IRedisClientsManager>().GetCacheClient());

            //container.Register<IDbConnectionFactory>(c => new OrmLiteConnectionFactory(
            //    AppSettings.GetString("AppDb"), PostgreSqlDialect.Provider));

            container.Register <IDbConnectionFactory>(c => new OrmLiteConnectionFactory(
                                                          ":memory:", SqliteDialect.Provider));

            using (var db = container.Resolve <IDbConnectionFactory>().Open())
            {
                db.DropAndCreateTable <Logger>();
            }

            container.Register <IAuthRepository>(c =>
                                                 new OrmLiteAuthRepository(c.Resolve <IDbConnectionFactory>())
            {
                UseDistinctRoleTables = AppSettings.Get("UseDistinctRoleTables", true),
            });

            var authRepo = (OrmLiteAuthRepository)container.Resolve <IAuthRepository>();

            authRepo.DropAndReCreateTables();

            CreateUser(authRepo, 1, "test", "test", new List <string> {
                "TheRole"
            }, new List <string> {
                "ThePermission"
            });
            CreateUser(authRepo, 2, "test2", "test2");
            CreateUser(authRepo, 2, "admin", "test", new List <string> {
                RoleNames.Admin
            });

            Plugins.Add(new PostmanFeature());

            Plugins.Add(new CorsFeature(
                            allowOriginWhitelist: new[] {
                "http://localhost", "http://localhost:8080", "http://localhost:56500", "http://test.servicestack.net",
                "http://null.jsbin.com", "http://plnkr.co", "http://run.plnkr.co"
            },
                            allowCredentials: true,
                            allowedHeaders: "Content-Type, Allow, Authorization, X-Args"));

            Plugins.Add(new RequestLogsFeature
            {
                //RequestLogger = new RedisRequestLogger(container.Resolve<IRedisClientsManager>()),
            });
            // Plugins.Add(new RazorFormat());

            GlobalRequestFilters.Add((req, res, dto) => {
                var msg = $"{req.Verb} {req.PathInfo} > {req.ContentType} < {string.Join(',', req.AcceptTypes)}";
                msg.Print();
            });

            Plugins.Add(new AuthFeature(() => new CustomUserSession(),
                                        new IAuthProvider[]
            {
                new JwtAuthProvider(AppSettings)
                {
                    AllowInQueryString = true,
                },
                new BasicAuthProvider(AppSettings),
                new CredentialsAuthProvider(AppSettings),
                new TwitterAuthProvider(AppSettings),       //Sign-in with Twitter
                new FacebookAuthProvider(AppSettings),      //Sign-in with Facebook
                new GithubAuthProvider(AppSettings),        //Sign-in with GitHub
            })
            {
                // AllowGetAuthenticateRequests = req => true,
                IncludeRegistrationService = true,
                IncludeAssignRoleServices  = true,
            });

            Plugins.Add(new OpenApiFeature());
            // Plugins.Add(new ValidationFeature());
            Plugins.Add(new AutoQueryFeature
            {
                MaxLimit = 1000,
            });

            container.RegisterValidators(typeof(ThrowValidationValidator).Assembly);

            JavaGenerator.AddGsonImport = true;
            var nativeTypes = this.GetPlugin <NativeTypesFeature>();

            nativeTypes.MetadataTypesConfig.ExportTypes.Add(typeof(DayOfWeek));

            Plugins.Add(new SharpPagesFeature());

            container.RegisterAutoWiredAs <MemoryChatHistory, IChatHistory>();
            Plugins.Add(new ServerEventsFeature
            {
                // LimitToAuthenticatedUsers = true,
            });

            TypeScriptGenerator.ReturnTypeAliases[typeof(byte[]).Name] = "Uint8Array";
        }