Beispiel #1
0
        // Configure your AppHost with the necessary configuration and dependencies your App needs
        public override void Configure(Container container)
        {
            SetConfig(new HostConfig
            {
                AddRedirectParamsToQueryString = true,
                EmbeddedResourceBaseTypes      = { typeof(ServiceStack.Desktop.DesktopAssets) },
                DebugMode = AppSettings.Get(nameof(HostConfig.DebugMode), HostingEnvironment.IsDevelopment()),
            });

            if (Config.DebugMode)
            {
                Plugins.Add(new HotReloadFeature {
                    VirtualFiles = VirtualFiles, //Monitor all folders for changes including /src & /wwwroot
                });
            }

            // enable server-side rendering, see: https://sharpscript.net/docs/sharp-pages
            Plugins.Add(new SharpPagesFeature {
                EnableSpaFallback = true,
            });
        }
Beispiel #2
0
        public override void Configure(Container container)
        {
            SetConfig(new HostConfig {
                DebugMode = AppSettings.Get(nameof(HostConfig.DebugMode), HostingEnvironment.IsDevelopment()),
            });

            if (Config.DebugMode)
            {
                Plugins.Add(new HotReloadFeature {
                    VirtualFiles = VirtualFiles, //Monitor all folders for changes including /src & /wwwroot
                });
            }

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

            SeedData(container.Resolve <IDbConnectionFactory>());

            Plugins.Add(new AutoQueryFeature {
                MaxLimit = 1000
            });

            Plugins.Add(new SharpPagesFeature {
                EnableSpaFallback = true,
                ScriptMethods     =
                {
                    new DbScriptsAsync(),
                    new CustomMethods(),
                },
            });

            Plugins.Add(new DesktopFeature {
                AppName    = "my-app",
                AccessRole = RoleNames.AllowAnon,
            });
        }
        // Configure your AppHost with the necessary configuration and dependencies your App needs
        public override void Configure(Container container)
        {
            SetConfig(new HostConfig
            {
                DefaultRedirectPath = "/index.html",
                DebugMode           = AppSettings.Get(nameof(HostConfig.DebugMode), false)
            });
            JsConfig.IncludeNullValues = false;
            JsConfig.ExcludeTypeInfo   = true;
            JsConfig.DateHandler       = DateHandler.ISO8601;
            JsConfig.TextCase          = TextCase.PascalCase;
            JsConfig.TimeSpanHandler   = TimeSpanHandler.StandardFormat;
            #region Database
            var connString = AppSettings.Get("dbConnectionString", "");
            if (connString == "%%CONN_STR%%")
            {
                connString = AppSettings.Get("dbConnectionStringDev", "");
            }
            var dbFactory = new OrmLiteConnectionFactory(connString, SqlServer2008Dialect.Provider);
            container.Register <IDbConnectionFactory>(dbFactory);
            OrmLiteConfig.StringFilter = s => s.Trim();
            #endregion
            #region Plugins
            Plugins.Add(new CorsFeature(
                            allowedHeaders: "Content-Type, Allow, Authorization"));
            Plugins.Add(new OpenApiFeature()
            {
                ApiDeclarationFilter = declaration =>
                {
                    declaration.Info.Title = "Badges Molex Net Core";
                    //declaration.Info.Contact = new ServiceStack.Api.OpenApi.Specification.OpenApiContact()
                    //{
                    //    Email = "*****@*****.**",
                    //    Name = "Alfredo Pacheco"
                    //};
                    declaration.Info.Description = "";
                },
                OperationFilter = (verb, op) =>
                {
                    switch (verb)
                    {
                    case "POST":
                        op.Parameters.RemoveAll(p => p.Name == "Id");
                        op.Parameters.RemoveAll(p => p.Name == "RowVersion");
                        break;

                    default:
                        break;
                    }
                    op.Parameters.RemoveAll(p => p.Name == "EntityName");
                    op.Parameters.RemoveAll(p => p.Name == "EF_State");
                }
            });
            Plugins.Add(new AutoQueryFeature
            {
                //MaxLimit = 100
            });
            Plugins.Add(new RequestLogsFeature());
            Plugins.Add(new AdminFeature());
            // var rollbarSettings = AppSettings.Get<RollbarSettings>("RollbarPluginSettings");
            // Plugins.Add(new RollbarLoggerPlugin
            // {
            //     ApiKey = rollbarSettings.ApiKey,
            //     Enabled = rollbarSettings.Enabled,
            //     EnableErrorTracking = rollbarSettings.EnableErrorTracking,
            //     EnableRequestBodyTracking = rollbarSettings.EnableRequestBodyTracking,
            //     EnableResponseTracking = rollbarSettings.EnableResponseTracking,
            //     EnableSessionTracking = rollbarSettings.EnableSessionTracking,
            //     Environment = rollbarSettings.Environment,
            //     // HideRequestBodyForRequestDtoTypes = new List<Type>(),
            //     // ExcludeRequestDtoTypes = new List<Type>
            //     // {
            //     //         // Might have to exclude the Swagger requests to get the two to play nicely
            //     //     typeof(RollbarLogConfigRequest),
            //     //     typeof(SwaggerResource),
            //     //     typeof(SwaggerApiDeclaration)
            //     // },
            //     RequiredRoles = rollbarSettings.RequiredRoles,
            //     SkipLogging = IsRequestSkippedDuringRequestLogging
            // });
            #endregion
            #region Auth
            var authProviders = new List <IAuthProvider>
            {
                new JwtAuthProvider(AppSettings)
                {
                    RequireSecureConnection = false,
                    AllowInQueryString      = true
                },
                new CredentialsAuthProvider()
            };
            var authFeature = new AuthFeature(SessionFactory, authProviders.ToArray());
            Plugins.Add(authFeature);
            //var authRepo = new OrmLiteAuthRepository(dbFactory);
            //container.Register<IUserAuthRepository>(authRepo);
            //authRepo.InitSchema();
            //Plugins.Add(new RegistrationFeature());
            //var admin = authRepo.GetUserAuthByUserName("admin");
            //if (admin == null)
            //    authRepo.CreateUserAuth(new UserAuth
            //    {
            //        UserName = "******",
            //        Roles = new List<string> { RoleNames.Admin }
            //    }, "admin");
            #endregion
            //TODO:
            //Cache.
            //Logging.
            //Batched requests.
            //Profiler.
            //Versioning.
            //stripe.com
            #region Cache
            //container.Register<ICacheClient>(new MemoryCacheClient());
            #endregion
            #region App
            //container.Register(c => dbFactory.Open());
            //container.Register(c => c.Resolve<IDbConnectionFactory>().OpenDbConnection()).ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <RevisionLogic>().ReusedWithin(ReuseScope.Request);
            MailgunService.AppSettings = AppSettings;
            container.Register <IEmailService>(i => new MailgunService()).ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <CatalogLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <CatalogDefinitionLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <FieldLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <CatalogFieldValueLogic>().ReusedWithin(ReuseScope.Request);
            //This App:
            ///start:generated:di<<<
            container.RegisterAutoWired <ActivityLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <ApprovalLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <BadgeLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <EmailLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <AdvancedSortLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <ApplicationTaskLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <FilterDataLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <SortDataLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <TokenLogic>().ReusedWithin(ReuseScope.Request);
            ///end:generated:di<<<
            #endregion

            #region Seed Data
            Sower.Seed(dbFactory);
            #endregion
        }
Beispiel #4
0
        public override void Configure(Container container)
        {
            JsConfig.TextCase = TextCase.CamelCase;

            var debugMode  = AppSettings.Get(nameof(HostConfig.DebugMode), false);
            var hostConfig = new HostConfig
            {
                DebugMode = debugMode
            };

            var allowFiles = AppSettings.GetList("AllowFileExtensions").ToList();

            allowFiles.ForEach(ext => hostConfig.AllowFileExtensions.Add(ext));

            if (!debugMode)
            {
                hostConfig.EnableFeatures = Feature.All.Remove(Feature.Metadata);
            }
            else
            {
                Plugins.Add(new OpenApiFeature());
            }

            SetConfig(hostConfig);

            Plugins.Add(new CorsFeature(
                            allowedHeaders: "Content-Type,Authorization"
                            ));

            // 开启 auto query 特性
            Plugins.Add(new AutoQueryFeature
            {
                MaxLimit              = 100,
                IncludeTotal          = true,
                EnableAutoQueryViewer = false
            });

            Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                                        new IAuthProvider[]
            {
                new JwtAuthProvider(AppSettings)
                {
                    AuthKeyBase64           = AppSettings.GetString("jwt.AuthKeyBase64"),
                    RequireSecureConnection = false,
                    ExpireTokensIn          = TimeSpan.FromMinutes(AppSettings.Get <int>("jwt.ExpireTokensIn"))
                },
                new CustomCredentialsAuthProvider()
            })
            {
                // 以字母开头,可包含数字,字母和下划线.长度为:3 ~ 20
                ValidUserNameRegEx = new Regex(@"\w+[\d_\w]{3,20}", RegexOptions.Compiled),
                ServiceRoutes      = new Dictionary <Type, string[]>
                {
                    { typeof(AuthenticateService), new[] { "/auth", "/auth/{provider}" } }
                }
            });

            // 注册验证功能
            Plugins.Add(new ValidationFeature());
            container.RegisterValidators(typeof(PermissionValidator).Assembly);

            // redis init
            var redisConnStr = $"redis://{AppSettings.Get<string>("RedisHost")}:{AppSettings.Get<string>("RedisPort")}";
            var redisManager = new RedisManagerPool(redisConnStr);

            container.Register <IRedisClientsManager>(c => redisManager);
            container.Register(c => redisManager.GetCacheClient());

            var dbHost     = AppSettings.Get <string>("DBHost");
            var dbPort     = AppSettings.Get <string>("DBPort");
            var dbUser     = AppSettings.Get <string>("DBUser");
            var dbPassword = AppSettings.Get <string>("DBPassword");
            var dbParam    = AppSettings.Get <string>("DBParam");
            var dbConnStr  = $"Server={dbHost};Port={dbPort};Uid={dbUser};Pwd={dbPassword};{dbParam}";
            var dbFactory  = new OrmLiteConnectionFactory(dbConnStr, MySqlDialect.Provider)
            {
                AutoDisposeConnection = true,
                ConnectionFilter      = db => new ProfiledDbConnection((DbConnection)db, MiniProfiler.Current)
            };

            ErrorMessages.InvalidUsernameOrPassword = "******";
            ErrorMessages.IllegalUsername           = "******";
            ErrorMessages.NotAuthenticated          = "未验证";

//            dbFactory.RegisterConnection();
            // TODO: 根据配置注册其它数据库.

            container.Register <IDbConnectionFactory>(c => dbFactory);
            container.Register <ICacheClient>(new MemoryCacheClient());
            container.Register <IAuthRepository>(c => new OrmLiteAuthRepository <UserInfo, UserAuthDetails>(dbFactory)
            {
                UseDistinctRoleTables = false
            });

//            container.Register<IAccountManage>(c => new MyAccountManager<UserInfo>());
            container.RegisterAs <OrgManage, IOrgManage>();
            container.RegisterAs <ReflectionManage, IReflectionManage>();
            container.Register <ISchemaManage>(c => new MysqlSchemaManage("MyApp_db"));

//            InitData(container);
        }
Beispiel #5
0
        /// <summary>
        /// Application specific configuration
        /// This method should initialize any IoC resources utilized by your web service classes.
        /// </summary>
        public override void Configure(Container container)
        {
            SetConfig(new HostConfig
            {
                //EnableFeatures = Feature.All.Remove(Feature.Metadata),
                //DebugMode = false
            });

            JsConfig.IncludeNullValues = false;
            JsConfig.ExcludeTypeInfo   = true;
            JsConfig.DateHandler       = DateHandler.ISO8601;

            #region Database
            var dbFactory = new OrmLiteConnectionFactory(
                AppSettings.Get("dbConnectionString", ""), SqlServer2008Dialect.Provider);

            container.Register <IDbConnectionFactory>(dbFactory);

            OrmLiteConfig.StringFilter = s => s.Trim();
            #endregion

            #region Plugins
            Plugins.Add(new CorsFeature(
                            allowedHeaders: "Content-Type, Allow, Authorization"));

            Plugins.Add(new OpenApiFeature()
            {
                ApiDeclarationFilter = declaration =>
                {
                    declaration.Info.Title = "Universal Catalogs";
                    //declaration.Info.Contact = new ServiceStack.Api.OpenApi.Specification.OpenApiContact()
                    //{
                    //    Email = "*****@*****.**",
                    //    Name = "Alfredo Pacheco"
                    //};
                    declaration.Info.Description = "";
                },
                OperationFilter = (verb, op) =>
                {
                    switch (verb)
                    {
                    case "POST":
                        op.Parameters.RemoveAll(p => p.Name == "Id");
                        op.Parameters.RemoveAll(p => p.Name == "RowVersion");
                        break;

                    default:
                        break;
                    }
                    op.Parameters.RemoveAll(p => p.Name == "EntityName");
                    op.Parameters.RemoveAll(p => p.Name == "EF_State");
                }
            });

            Plugins.Add(new AutoQueryFeature
            {
                MaxLimit = 100
            });
            #endregion

            #region Auth
            var authProviders = new List <IAuthProvider>
            {
                new JwtAuthProvider(AppSettings)
                {
                    RequireSecureConnection = false,
                    AllowInQueryString      = true
                },
                new CredentialsAuthProvider()
            };

            var authFeature = new AuthFeature(SessionFactory, authProviders.ToArray());
            Plugins.Add(authFeature);

            //var authRepo = new OrmLiteAuthRepository(dbFactory);
            //container.Register<IUserAuthRepository>(authRepo);

            //authRepo.InitSchema();

            //Plugins.Add(new RegistrationFeature());

            //var admin = authRepo.GetUserAuthByUserName("admin");
            //if (admin == null)
            //    authRepo.CreateUserAuth(new UserAuth
            //    {
            //        UserName = "******",
            //        Roles = new List<string> { RoleNames.Admin }
            //    }, "admin");
            #endregion

            //TODO:
            //Done. Global Response Filter: CommonResponse.
            //Done. Cache.
            //Done. Transactions.
            //Logging.
            //Batched requests.
            //attachments
            //Profiler.
            //Versioning.
            //Compression.
            //Autoquery.
            //stripe.com

            #region Cache
            //container.Register<ICacheClient>(new MemoryCacheClient());
            #endregion

            #region App
            //container.Register(c => dbFactory.Open());
            //container.Register(c => c.Resolve<IDbConnectionFactory>().OpenDbConnection()).ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <RevisionLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <CatalogLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <CatalogTypeLogic>().ReusedWithin(ReuseScope.Request);
            container.Register <IEmailService>(i => new MailgunService()).ReusedWithin(ReuseScope.Request);

            //This App:
            ///start:generated:di<<<
            container.RegisterAutoWired <ActivityLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <ApprovalLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <EmailLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <AdvancedSortLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <CatalogTypeLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <CatalogTypeFieldLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <FilterDataLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <SortDataLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <TaskLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <TokenLogic>().ReusedWithin(ReuseScope.Request);
            ///end:generated:di<<<
            #endregion
        }
Beispiel #6
0
        // Configure your AppHost with the necessary configuration and dependencies your App needs
        public override void Configure(Container container)
        {
            #region Logger
            LogManager.LogFactory = new NLogFactory();

            Plugins.Add(new SharpPagesFeature
            {
                MetadataDebugAdminRole = RoleNames.Admin
            });

            ILog Log = LogManager.GetLogger("MyApp");
            #endregion

            SetConfig(new HostConfig
            {
                DefaultRedirectPath = "/index.html",
                DebugMode           = AppSettings.Get(nameof(HostConfig.DebugMode), false)
            });

            JsConfig.IncludeNullValues = false;
            JsConfig.ExcludeTypeInfo   = true;
            JsConfig.DateHandler       = DateHandler.ISO8601;
            JsConfig.TextCase          = TextCase.PascalCase;
            JsConfig.TimeSpanHandler   = TimeSpanHandler.StandardFormat;

            #region Database
            var connString = AppSettings.Get("dbConnectionString", "");
            if (connString == "%%CONN_STR%%")
            {
                connString = AppSettings.Get("dbConnectionStringDev", "");
            }
            IOrmLiteDialectProvider dbProvider;
            switch (AppSettings.Get("dbProvider", ""))
            {
            case "postgresql":
                dbProvider = PostgreSqlDialect.Provider;
                break;

            case "sqlserver2008":
                dbProvider = SqlServerDialect.Provider;
                break;

            case "sqlserver2012":
                dbProvider = SqlServer2012Dialect.Provider;
                break;

            case "sqlserver2014":
                dbProvider = SqlServer2014Dialect.Provider;
                break;

            case "sqlserver2016":
                dbProvider = SqlServer2016Dialect.Provider;
                break;

            case "sqlserver2017":
                dbProvider = SqlServer2017Dialect.Provider;
                break;

            default:
                dbProvider = SqlServerDialect.Provider;
                break;
            }

            var dbFactory = new OrmLiteConnectionFactory(connString, dbProvider);
            container.Register <IDbConnectionFactory>(dbFactory);

            // OrmLiteConfig.StringFilter = s => s.Trim();
            OrmLiteConfig.DialectProvider.StringSerializer = new JsonStringSerializer();
            MyNamingStrategy.AppSettings = AppSettings;
            dbProvider.NamingStrategy    = new MyNamingStrategy();
            #endregion

            #region Plugins
            Plugins.Add(new CorsFeature(
                            allowedHeaders: "Content-Type, Allow, Authorization"));

            Plugins.Add(new OpenApiFeature()
            {
                ApiDeclarationFilter = declaration =>
                {
                    declaration.Info.Title = "MDC";
                    // declaration.Info.Contact = new ServiceStack.Api.OpenApi.Specification.OpenApiContact()
                    // {
                    //    Email = "*****@*****.**",
                    //    Name = "Alfredo Pacheco"
                    // };
                    declaration.Info.Description = "";
                },
                OperationFilter = (verb, op) =>
                {
                    switch (verb)
                    {
                    case "POST":
                        op.Parameters.RemoveAll(p => p.Name == "Id");
                        op.Parameters.RemoveAll(p => p.Name == "RowVersion");
                        break;

                    default:
                        break;
                    }
                    op.Parameters.RemoveAll(p => p.Name == "EntityName");
                    op.Parameters.RemoveAll(p => p.Name == "EF_State");
                }
            });

            Plugins.Add(new AutoQueryFeature
            {
                // MaxLimit = 100
            });

            Plugins.Add(new RequestLogsFeature());

            Plugins.Add(new AdminFeature());

            Plugins.Add(new ServerEventsFeature());
            // var rollbarSettings = AppSettings.Get<RollbarSettings>("RollbarPluginSettings");
            // Plugins.Add(new RollbarLoggerPlugin
            // {
            //     ApiKey = rollbarSettings.ApiKey,
            //     Enabled = rollbarSettings.Enabled,
            //     EnableErrorTracking = rollbarSettings.EnableErrorTracking,
            //     EnableRequestBodyTracking = rollbarSettings.EnableRequestBodyTracking,
            //     EnableResponseTracking = rollbarSettings.EnableResponseTracking,
            //     EnableSessionTracking = rollbarSettings.EnableSessionTracking,
            //     Environment = rollbarSettings.Environment,
            //     // HideRequestBodyForRequestDtoTypes = new List<Type>(),
            //     // ExcludeRequestDtoTypes = new List<Type>
            //     // {
            //     //         // Might have to exclude the Swagger requests to get the two to play nicely
            //     //     typeof(RollbarLogConfigRequest),
            //     //     typeof(SwaggerResource),
            //     //     typeof(SwaggerApiDeclaration)
            //     // },
            //     RequiredRoles = rollbarSettings.RequiredRoles,
            //     SkipLogging = IsRequestSkippedDuringRequestLogging
            // });
            #endregion

            #region Auth
            var authProviders = new List <IAuthProvider>
            {
                new JwtAuthProvider(AppSettings)
                {
                    RequireSecureConnection = false,
                    AllowInQueryString      = true
                },
                new CredentialsAuthProvider(),
                new ApiKeyAuthProvider()
                {
                    RequireSecureConnection = false,
                    SessionCacheDuration    = TimeSpan.FromMinutes(30)
                }
            };
            var authFeature = new AuthFeature(SessionFactory, authProviders.ToArray());
            Plugins.Add(authFeature);

            var authRepo = new OrmLiteAuthRepository <Account, UserAuthDetails>(dbFactory);
            container.Register <IAuthRepository>(authRepo);

            authRepo.InitSchema();
            authRepo.InitApiKeySchema();

            Plugins.Add(new RegistrationFeature());

            var admin = authRepo.GetUserAuthByUserName("admin");
            if (admin == null)
            {
                authRepo.CreateUserAuth(new Account
                {
                    UserName = "******",
                    Roles    = new List <string> {
                        RoleNames.Admin
                    }
                }, "admin");
            }
            #endregion
            // TODO:
            // Cache.
            // Logging.
            // Batched requests.
            // Profiler.
            // Versioning.
            // stripe.com

            #region Cache
            // container.Register<ICacheClient>(new MemoryCacheClient());
            #endregion

            #region App
            AttachmentsIO.AppSettings = AppSettings;
            // container.Register(c => dbFactory.Open());
            // container.Register(c => c.Resolve<IDbConnectionFactory>().OpenDbConnection()).ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <RevisionLogic>().ReusedWithin(ReuseScope.Request);
            EmailService.AppSettings = AppSettings;
            container.Register <IEmailService>(i => new EmailService()).ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <CatalogLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <CatalogDefinitionLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <FieldLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <CatalogFieldValueLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <AccountLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <TokenLogic>().ReusedWithin(ReuseScope.Request);

            // This App:
            ///start:generated:di<<<
            container.RegisterAutoWired <ApproverLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <AttachmentFileCommentLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <MDCLogic>().ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <MdcAttachmentFileLogic>().ReusedWithin(ReuseScope.Request);
            ///end:generated:di<<<
            #endregion

            #region Seed Data
            Sower.Seed(dbFactory);
            #endregion

            Log.Info("================= Application Started =================");
        } // Configure
Beispiel #7
0
        // Configure your AppHost with the necessary configuration and dependencies your App needs
        public override void Configure(Container container)
        {
            Plugins.Add(new PostmanFeature());
            Plugins.Add(new OpenApiFeature());

            SetConfig(new HostConfig
            {
                DebugMode = AppSettings.Get(nameof(HostConfig.DebugMode), false),
#if DEBUG
                AdminAuthSecret = "adm1nSecret", // Enable Admin Access with ?authsecret=adm1nSecret
#endif
            });

            container.Register <IList <GroupModel> >(new List <GroupModel>());

            GlobalRequestFilters.Add((req, resp, reqDto) =>
            {
                req.Items.Add("BeginTimestamp", DateTime.Now);
            });
            GlobalResponseFilters.Add((req, resp, respDto) =>
            {
                Console.WriteLine();
                Console.WriteLine();
                Console.WriteLine($"**************** {nameof(GlobalResponseFilters)} ****************");
                //Console.WriteLine($"***** req: {req.ToSafeJson()}");
                Console.WriteLine();

                var beginTimestamp = req.Items["BeginTimestamp"];
                var endTimestamp   = DateTime.Now;

                Console.WriteLine($"=====> Request at [{beginTimestamp}]");
                if (req.IsAuthenticated())
                {
                    var session    = req.SessionAs <CustomUserSession>();
                    var authRepo   = container.Resolve <IAuthRepository>();
                    var manageRole = authRepo as IManageRoles;
                    var roles      = manageRole.GetRoles(session.UserAuthId);

                    Console.WriteLine($"       Username: {session.UserName}, Roles: {roles.ToSafeJson()}");
                }

                Console.WriteLine($"       {req.Verb}, {req.OperationName}, {req.Dto.ToSafeJson()}");
                Console.WriteLine();

                Console.WriteLine($"<===== Response at [{endTimestamp}]");
                Console.WriteLine($"       Type: {respDto.GetType().Name}");
                // Console.WriteLine($"***** resp: {resp.ToSafeJson()}");
                // Console.WriteLine();

                if (respDto is HttpError)
                {
                    var error      = respDto as HttpError;
                    var respStatus = error.ResponseStatus;
                    Console.WriteLine($"       Status: {error.Status}, {error.StatusCode}, {respStatus.ErrorCode}, {respStatus.Message}");
                    Console.WriteLine();
                }
                else
                {
                    object success = respDto is HttpResult
                    ? (respDto as HttpResult).Response
                    : respDto;
                    Console.WriteLine($"       respDto: {success.ToSafeJson()}");
                    Console.WriteLine();
                }
            });

            //Handle Exceptions occurring in Services:
            //
            ServiceExceptionHandlers.Add((httpReq, request, exception) => {
                //log your exceptions here...
                return(null); //continue with default Error Handling

                //or return your own custom response
                //return DtoUtils.CreateErrorResponse(request, exception);
            });

            //Handle Unhandled Exceptions occurring outside of Services
            //E.g. Exceptions during Request binding or in filters:
            //
            UncaughtExceptionHandlers.Add((req, res, operationName, ex) => {
                res.Write($"Error: {ex.GetType().Name}: {ex.Message}");
                res.EndRequest(skipHeaders: true);
            });

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

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

            // // TODO: Replace OAuth App settings in: appsettings.Development.json
            Plugins.Add(new AuthFeature(() => new CustomUserSession(),
                                        new IAuthProvider[] {
                // new NetCoreIdentityAuthProvider(AppSettings) { // Adapter to enable ServiceStack Auth in MVC
                //     AdminRoles = { "Manager" }, // Automatically Assign additional roles to Admin Users
                // },
                new BasicAuthProvider(),                  //Allow Sign-ins with HTTP Basic Auth
                new CredentialsAuthProvider(AppSettings), // Sign In with Username / Password credentials
                // new FacebookAuthProvider(AppSettings), /* Create Facebook App at: https://developers.facebook.com/apps */
                // new TwitterAuthProvider(AppSettings),  /* Create Twitter App at: https://dev.twitter.com/apps */
                // new GoogleAuthProvider(AppSettings),   /* Create App https://console.developers.google.com/apis/credentials */
                // new MicrosoftGraphAuthProvider(AppSettings),   /* Create App https://apps.dev.microsoft.com */
            })
            {
                IncludeRegistrationService = true,
                IncludeAssignRoleServices  = false,
            });

            AddSeedUsers((IUserAuthRepository)container.Resolve <IAuthRepository>());
        }