public void CreateUsers(Container container)
        {
            var userRep = new OrmLiteAuthRepository(container.Resolve <IDbConnectionFactory>());

            userRep.DropAndReCreateTables();
            container.Register <IUserAuthRepository>(userRep);
            var appSettings    = container.Resolve <PlacesToVisitAppSettings>();
            var dataRepository = container.Resolve <IPlacesToVisitRepository>();

            userRep.DropAndReCreateTables();
            string pwHash;
            string pwSalt;

            new SaltedHash().GetHashAndSaltString(
                appSettings.Get("Salt", "debugSalt"),
                out pwHash,
                out pwSalt);

            var userAuth1 = userRep.CreateUserAuth(new UserAuth
            {
                Email        = "*****@*****.**",
                DisplayName  = "Darren",
                UserName     = "******",
                FirstName    = "Darren",
                LastName     = "Reid",
                PasswordHash = pwHash,
                Salt         = pwSalt,
                Roles        = { "Admin" }
            }, "abc123");

            var user1 = userAuth1.ConvertTo <User>();

            dataRepository.CreateUserIfNotExists(user1);

            var userAuth2 = userRep.CreateUserAuth(new UserAuth
            {
                Email        = "*****@*****.**",
                DisplayName  = "Kyle",
                UserName     = "******",
                FirstName    = "Kyle",
                LastName     = "Hodgson",
                PasswordHash = pwHash,
                Salt         = pwSalt,
                Roles        = { "Admin" }
            }, "123abc");

            var user2 = userAuth2.ConvertTo <User>();

            dataRepository.CreateUserIfNotExists(user2);
        }
Example #2
0
        /// <summary>
        /// Configure ServiceStack Authentication plugin.
        /// </summary>
        /// <param name="container">The container.</param>
        private void ConfigureAuth(Container container)
        {
            Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                                        new IAuthProvider[]
            {
                new CredentialsAuthProvider(AppSettings),
                new JwtAuthProvider(AppSettings)
                {
                    AuthKey = Convert.FromBase64String("3n/aJNQHPx0cLu/2dN3jWf0GSYL35QlMqgz+LH3hUyA="),
                    RequireSecureConnection = false,
                },
                new ApiKeyAuthProvider(AppSettings),
                new BasicAuthProvider(AppSettings),
            }));

            Plugins.Add(new RegistrationFeature());

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

            container.Register <IAuthRepository>(c => authRepo);
            authRepo.InitSchema();

            authRepo.CreateUserAuth(new UserAuth
            {
                UserName    = "******",
                DisplayName = "Credentials",
                FirstName   = "First",
                LastName    = "Last",
                FullName    = "First Last",
            }, "test");
        }
        private void CreateAdmine(OrmLiteAuthRepository authRepo)
        {
            var admine = authRepo.GetUserAuthByUserName("Maksym");

            if (admine == null)
            {
                string hash;
                string salt;

                var adminEmail    = ConfigurationManager.AppSettings["adminEmail"];
                var adminLastName = ConfigurationManager.AppSettings["adminLastName"];
                var adminName     = ConfigurationManager.AppSettings["adminName"];
                var adminPassword = ConfigurationManager.AppSettings["adminPassword"];

                new SaltedHash().GetHashAndSaltString("password", out hash, out salt);
                authRepo.CreateUserAuth(new UserAuth
                {
                    Id           = 1,
                    DisplayName  = adminName,
                    Email        = adminEmail,
                    UserName     = adminName,
                    FirstName    = adminName,
                    LastName     = adminLastName,
                    PasswordHash = hash,
                    Salt         = salt,
                    Roles        = new List <string> {
                        RoleNames.Admin
                    },
                    // Permissions = new List<string> { "GetStatus" }
                }, adminPassword);
            }
        }
        /// <summary>
        /// Configure ServiceStack Authentication plugin.
        /// </summary>
        /// <param name="container">The container.</param>
        private void ConfigureAuth(Container container)
        {
            Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                                        new IAuthProvider[]
            {
                new CredentialsAuthProvider(AppSettings),
                new ApiKeyAuthProvider(AppSettings),
                new BasicAuthProvider(AppSettings),
            }));

            Plugins.Add(new RegistrationFeature());

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

            container.Register <IAuthRepository>(c => authRepo);
            authRepo.InitSchema();

            authRepo.CreateUserAuth(new UserAuth
            {
                UserName    = "******",
                DisplayName = "Credentials",
                FirstName   = "First",
                LastName    = "Last",
                FullName    = "First Last",
            }, "test");
        }
            public override void Configure(Container container)
            {
                //1. Registering the Authorization Provider
                Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                                            new IAuthProvider[]
                {
                    new BasicAuthProvider()
                }));

                //2. Enabling the /register service
                Plugins.Add(new RegistrationFeature());

                //3. configuring the Repository that uses SQL Server backend
                var connString = "Data Source=;Initial Catalog=;User ID=;password="******"johnd") == null)
                {
                    ormLiteRepository.CreateUserAuth(new UserAuth
                    {
                        UserName  = "******",
                        FirstName = "John",
                        LastName  = "Doe",
                        Roles     = new List <string> {
                            RoleNames.Admin
                        }
                    }, "mypassword");
                }

                //4. Registering the Session Cache
                container.Register <ICacheClient>(new MemoryCacheClient());
            }
Example #6
0
            public override void Configure(Container container)
            {
                Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                                            new IAuthProvider[]
                {
                    new BasicAuthProvider()
                }));

                Plugins.Add(new RegistrationFeature());

                container.Register <ICacheClient>(new MemoryCacheClient());

                //configuring OrmLiteAuthRepository that uses SQL Server backend
                var connString = "Data Source=;Initial Catalog=;User ID=;password="******"johnd") == null)
                {
                    ormLiteRepository.CreateUserAuth(new UserAuth
                    {
                        UserName  = "******",
                        FirstName = "John",
                        LastName  = "Doe",
                        Roles     = new List <string> {
                            RoleNames.Admin
                        }
                    }, "mypassword");
                }
            }
Example #7
0
        private void CreateUser(OrmLiteAuthRepository authRepo,
                                int id, string username, string password, List <string> roles = null, List <string> permissions = null)
        {
            new SaltedHash().GetHashAndSaltString(password, out var hash, out var salt);
            authRepo.CreateUserAuth(new UserAuth {
                Id           = id,
                DisplayName  = username + " DisplayName",
                Email        = username + "@gmail.com",
                UserName     = username,
                FirstName    = "First " + username,
                LastName     = "Last " + username,
                PasswordHash = hash,
                Salt         = salt,
                Roles        = roles,
                Permissions  = permissions
            }, password);

            authRepo.AssignRoles(id.ToString(), roles, permissions);
        }
Example #8
0
        private void CreateUser(OrmLiteAuthRepository authRepo, int id, string username, string email, string password)
        {
            string hash;
            string salt;

            new SaltedHash().GetHashAndSaltString(password, out hash, out salt);

            authRepo.CreateUserAuth(new UserAuth
            {
                Id           = id,
                DisplayName  = "DisplayName",
                Email        = email ?? "as@if" + id.ToString() + ".com",
                UserName     = username,
                FirstName    = "FirstName",
                LastName     = "LastName",
                PasswordHash = hash,
                Salt         = salt,
            }, password);
        }
Example #9
0
        /// <summary>
        /// Configure ServiceStack Authentication plugin.
        /// </summary>
        /// <param name="container">The container.</param>
        private void ConfigureAuth(Container container)
        {
            Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                                        new IAuthProvider[]
            {
                new BasicAuthProvider(AppSettings),
                new ApiKeyAuthProvider(AppSettings),
            }));

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

            container.Register <IAuthRepository>(c => authRepo);
            authRepo.InitSchema();

            5.Times(x => authRepo.CreateUserAuth(new UserAuth {
                UserName = $"user{x}",
                Email    = $"user{x}@email.com",
            }, "test"));

            AfterInitCallbacks.Add(host =>
            {
                var authProvider = (ApiKeyAuthProvider)
                                   AuthenticateService.GetAuthProvider(ApiKeyAuthProvider.Name);
                using (var db = host.TryResolve <IDbConnectionFactory>().Open())
                {
                    var userWithKeysIds = db.Column <string>(db.From <ApiKey>()
                                                             .SelectDistinct(x => x.UserAuthId)).Map(int.Parse);

                    var userIdsMissingKeys = db.Column <string>(db.From <UserAuth>()
                                                                .Where(x => userWithKeysIds.Count == 0 || !userWithKeysIds.Contains(x.Id))
                                                                .Select(x => x.Id));

                    foreach (var userId in userIdsMissingKeys)
                    {
                        var apiKeys = authProvider.GenerateNewApiKeys(userId.ToString());
                        authRepo.StoreAll(apiKeys);
                    }
                }
            });
        }
Example #10
0
        private static void InitialDbTables(Funq.Container container, OrmLiteAuthRepository <UserAccount, UserAccountDetail> userRepository)
        {
            string hash, salt;

            new SaltedHash().GetHashAndSaltString("password1", out hash, out salt);

            userRepository.DropAndReCreateTables();
            using (var dbConnection = container.Resolve <IDbConnectionFactory>().OpenDbConnection())
            {
                dbConnection.CreateTable <Bill>(true);
                dbConnection.CreateTable <Invoice>(true);
                dbConnection.CreateTable <AddressBranching>(true);
                dbConnection.CreateTable <Address>(true);
                dbConnection.CreateTable <Company>(true);
                dbConnection.CreateTable <Category>(true);
            }
            userRepository.CreateUserAuth(new UserAccount
            {
                UserName = "******",
                Password = hash,
                FullName = "Cheng Zhang",
                Email    = "*****@*****.**",
                Salt     = salt,
                Roles    = new List <string> {
                    RoleNames.Admin
                },
                Permissions = new List <string> {
                    "Get"
                },
                CreatedDate     = DateTime.Now,
                Create_On       = DateTime.Now,
                LastLoginTime   = DateTime.Now,
                Last_Updated_By = 0,
                Last_Updated_On = DateTime.Now
            }, "password1");
        }
Example #11
0
        public override void Configure(Funq.Container container)
        {
            //Set JSON web services to return idiomatic JSON camelCase properties
            ServiceStack.Text.JsConfig.EmitCamelCaseNames = true;

            //https://github.com/wordnik/swagger-core/wiki
            //Document your code and expose it to the world
            Plugins.Add(new SwaggerFeature());

            //Registers authorization service and endpoints /auth and /auth{provider}
            Plugins.Add(new AuthFeature(
                            () => new AuthUserSession(),
                            new IAuthProvider[] { new CredentialsAuthProvider() }
                            )
            {
                HtmlRedirect = null
            });

            //Registers registartion service and endpoints /register, /assignroles, /unassignroles
            Plugins.Add(new RegistrationFeature());
            this.RegisterAs <MyRegistrationValidator, IValidator <Registration> >();

            Plugins.Add(new ValidationFeature());
            container.RegisterValidators(typeof(CreateOrderValidator).Assembly);

            var dataFilePath = AppDomain.CurrentDomain.GetData("DataDirectory").ToString() + "\\data.db";

            container.Register <IDbConnectionFactory>(new OrmLiteConnectionFactory(dataFilePath, SqliteDialect.Provider));

            var userRep = new OrmLiteAuthRepository(container.Resolve <IDbConnectionFactory>());

            container.Register <IUserAuthRepository>(userRep);
            var redisCon = ConfigurationManager.AppSettings["redisUrl"].ToString();

            container.Register <IRedisClientsManager>(new PooledRedisClientManager(20, 60, redisCon));
            container.Register <ICacheClient>(c => (ICacheClient)c.Resolve <IRedisClientsManager>().GetCacheClient());

            //Set MVC to use the same Funq IOC as ServiceStack
            ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory(container));

            //https://github.com/ServiceStack/ServiceStack.Redis/wiki/RedisPubSub
            //start threads that subscribe to Redis channels for Pub/Sub
            new OrderSubscribers(container).StartSubscriberThreads();
            new FulfillmentSubscribers(container).StartSubscriberThreads();

            //https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization#userauth-persistence---the-iuserauthrepository
            //Use ServiceStacks authentication/authorization persistence
            userRep.CreateMissingTables(); //Create missing Auth

            //Re-Create Tables for the demo
            using (var con = AppHostBase.Resolve <IDbConnectionFactory>().OpenDbConnection())
            {
                con.CreateTable <Order>(true);
                con.CreateTable <Fulfillment>(true);
            }

            //clear redis
            using (var redis = AppHostBase.Resolve <IRedisClientsManager>().GetClient())
            {
            }
            //Create dummy user accounts (TestUser/Password)
            foreach (var user in DummyUserAccounts.GetDummyAccounts())
            {
                if (userRep.GetUserAuthByUserName(user.UserName) == null)
                {
                    userRep.CreateUserAuth(new UserAuth {
                        UserName = user.UserName
                    }, user.Password);
                }
            }
        }
Example #12
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
Example #13
0
        // Configure your AppHost with the necessary configuration and dependencies your App needs
        public override void Configure(Container container)
        {
            #region Metadata
            SetConfig(new HostConfig
            {
                DefaultRedirectPath = "/metadata",
                DebugMode           = AppSettings.Get(nameof(HostConfig.DebugMode), false)
            });
            #endregion

            #region Plugins
            Plugins.Add(new ValidationFeature());
            container.RegisterValidators(
                typeof(CreatePlaceValidator).Assembly);

            Plugins.Add(new CorsFeature());

            Plugins.Add(new PostmanFeature());
            #endregion

            #region App
            container.RegisterAutoWiredAs <BasicOrmMessageRepository, IMessageRepository>();
            container.RegisterAutoWired <MyAppSettings>();
            var appSettings = container.Resolve <MyAppSettings>();
            #endregion

            #region Database
            var dbFactory = new OrmLiteConnectionFactory(
                appSettings.Get("sqlLiteConnectionString", "").MapHostAbsolutePath(),
                SqliteDialect.Provider);

            container.Register <IDbConnectionFactory>(dbFactory);

            using (var db = dbFactory.OpenDbConnection())
            {
                //db.DropAndCreateTable<UserGreeting>();
                db.DropAndCreateTable <UserLanguage>();
                db.DropAndCreateTable <GreetingUsage>();
            }

            using (var db = dbFactory.OpenDbConnection())
            {
                db.Insert(new UserLanguage {
                    Language = "English"
                });
                //db.Insert(new UserGreeting
                //{
                //    Greeting = "Hello, {0}",
                //    UserLanguageId = 1
                //});
                //db.Insert(new UserGreeting
                //{
                //    Greeting = "G'day, {0}"
                //});
                //db.Insert(new UserGreeting
                //{
                //    Greeting = "Howdy, {0}!"
                //});
            }
            OrmLiteConfig.StringFilter = s => s.Trim();
            #endregion

            #region Auth
            var authProviders = new List <IAuthProvider>();
            authProviders.Add(new CredentialsAuthProvider());

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

            var authRepo = new OrmLiteAuthRepository(dbFactory);
            container.Register <IUserAuthRepository>(authRepo);
            container.Register <ICacheClient>(new MemoryCacheClient());
            authRepo.DropAndReCreateTables();
            authRepo.InitSchema();

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

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

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

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