Example #1
0
        /// <summary>
        /// Do indexes exist
        /// </summary>
        public static void Exist()
        {
            var context = ApplicationIdentityContext.Create();

            IndexChecks.EnsureUniqueIndexOnUserName(context.Users);
            IndexChecks.EnsureUniqueIndexOnRoleName(context.Roles);
        }
Example #2
0
        public static void Exist()
        {
            var context = new ApplicationDbContext();

            IndexChecks.EnsureUniqueIndexOnUserName(context.IdentityUsers);
            IndexChecks.EnsureUniqueIndexOnRoleName(context.Roles);
        }
Example #3
0
        /// <summary>
        /// Adds mongodb implementation for the "Asp Net Core Identity" part (saving user and roles)
        /// </summary>
        /// <remarks><![CDATA[
        /// Contains implemenations for
        /// - IUserStore<T>
        /// - IRoleStore<T>
        /// ]]></remarks>
        public static IIdentityServerBuilder AddMongoDbForAspIdentity <TIdentity, TRole>(this IIdentityServerBuilder builder, IConfigurationRoot configurationRoot) where
        TIdentity : Microsoft.AspNetCore.Identity.MongoDB.IdentityUser where TRole : Microsoft.AspNetCore.Identity.MongoDB.IdentityRole
        {
            //User Mongodb for Asp.net identity in order to get users stored
            var configurationOptions = configurationRoot.Get <ConfigurationOptions>();
            var client   = new MongoClient(configurationOptions.MongoConnection);
            var database = client.GetDatabase(configurationOptions.MongoDatabaseName);



            // Configure Asp Net Core Identity / Role to use MongoDB
            builder.Services.AddSingleton <IUserStore <TIdentity> >(x =>
            {
                var usersCollection = database.GetCollection <TIdentity>("Identity_Users");
                IndexChecks.EnsureUniqueIndexOnNormalizedEmail(usersCollection);
                IndexChecks.EnsureUniqueIndexOnNormalizedUserName(usersCollection);
                return(new UserStore <TIdentity>(usersCollection));
            });

            builder.Services.AddSingleton <IRoleStore <TRole> >(x =>
            {
                var rolesCollection = database.GetCollection <TRole>("Identity_Roles");
                IndexChecks.EnsureUniqueIndexOnNormalizedRoleName(rolesCollection);
                return(new RoleStore <TRole>(rolesCollection));
            });
            builder.Services.AddIdentity <TIdentity, TRole>();


            return(builder);
        }
        public MongoRoleStore(IMongoDatabase database)
        {
            var rolesCollection = database.GetCollection <WrappedIdentityRole>("Identity_Roles");

            IndexChecks.EnsureUniqueIndexOnNormalizedRoleName(rolesCollection);

            innerStore = new RoleStore <WrappedIdentityRole>(rolesCollection);
        }
Example #5
0
 private void EnsureIndexes()
 {
     IndexChecks.EnsureUniqueIndexOnUserName(this.Users);
     IndexChecks.EnsureUniqueIndexOnEmail(this.Users);
     IndexChecks.EnsureUniqueIndexOnRoleName(this.Roles);
     IndexFacade.EnsureUniqueIndexOnPhoneNumber(this.Users);
     IndexFacade.EnsureIndexesOnUserType(this.Users);
 }
Example #6
0
        public static void Exist()
        {
            var context = ApplicationIdentityContext.Create();

            IndexChecks.EnsureUniqueIndexOnUserName(context.Users);
            IndexChecks.EnsureUniqueIndexOnRoleName(context.Roles);
            context.Books.Indexes.CreateOne(Builders <Book> .IndexKeys.Ascending("BookName"));
        }
Example #7
0
        public MongoUserStore(IMongoDatabase database)
        {
            var usersCollection = database.GetCollection <WrappedIdentityUser>("Identity_Users");

            IndexChecks.EnsureUniqueIndexOnNormalizedEmail(usersCollection);
            IndexChecks.EnsureUniqueIndexOnNormalizedUserName(usersCollection);

            innerStore = new UserStore <WrappedIdentityUser>(usersCollection);
        }
Example #8
0
        public static void Exist()
        {
            IContext context = new Context();
            var      users   = context.GetUserCollection();
            var      roles   = context.GetRoleCollection();

            IndexChecks.EnsureUniqueIndexOnUserName(users);
            IndexChecks.EnsureUniqueIndexOnRoleName(roles);
        }
Example #9
0
        public void EnsureUniqueIndexOnRoleName_NoIndexOnRoleName_AddsUniqueIndexOnRoleName()
        {
            var roleCollectionName = "roleindextest";

            Database.DropCollection(roleCollectionName);
            var roles = Database.GetCollection(roleCollectionName);

            IndexChecks.EnsureUniqueIndexOnRoleName(roles);

            var index = roles.GetIndexes()
                        .Where(i => i.IsUnique)
                        .Where(i => i.Key.Count() == 1)
                        .First(i => i.Key.Contains("Name"));

            Expect(index.Key.Count(), Is.EqualTo(1));
        }
Example #10
0
        public void EnsureEmailUniqueIndex_NoIndexOnEmail_AddsUniqueIndexOnEmail()
        {
            var userCollectionName = "userindextest";

            Database.DropCollection(userCollectionName);
            var users = Database.GetCollection(userCollectionName);

            IndexChecks.EnsureUniqueIndexOnEmail(users);

            var index = users.GetIndexes()
                        .Where(i => i.IsUnique)
                        .Where(i => i.Key.Count() == 1)
                        .First(i => i.Key.Contains("Email"));

            Expect(index.Key.Count(), Is.EqualTo(1));
        }
        public void EnsureEmailUniqueIndex_NoIndexOnEmail_AddsUniqueIndexOnEmail()
        {
            var userCollectionName = "userindextest";

            Database.DropCollection(userCollectionName);
            var usersNewApi = Database.GetCollection <IdentityUser>(userCollectionName);

            IndexChecks.EnsureUniqueIndexOnEmail(usersNewApi);

            var users = Database.GetCollection(userCollectionName);
            var index = users.GetIndexes()
                        .Where(i => i.Options.Unique)
                        .FirstOrDefault(i => i.Field.Contains("Email"));

            Assert.IsNotNull(index);
        }
        public void EnsureUniqueIndexOnRoleName_NoIndexOnRoleName_AddsUniqueIndexOnRoleName()
        {
            var roleCollectionName = "roleindextest";

            Database.DropCollection(roleCollectionName);
            var rolesNewApi = Database.GetCollection <IdentityRole>(roleCollectionName);

            IndexChecks.EnsureUniqueIndexOnRoleName(rolesNewApi);

            var roles = Database.GetCollection(roleCollectionName);
            var index = roles.GetIndexes()
                        .Where(i => i.Options.Unique)
                        .FirstOrDefault(i => i.Field.Contains("Name"));

            Assert.IsNotNull(index);
        }
        public void EnsureUniqueIndexOnUserName_NoIndexOnUserName_AddsUniqueIndexOnUserName()
        {
            var userCollectionName = "userindextest";

            Database.DropCollection(userCollectionName);
            var usersNewApi = DatabaseNewApi.GetCollection <IdentityUser>(userCollectionName);

            IndexChecks.EnsureUniqueIndexOnUserName(usersNewApi);

            var users = Database.GetCollection(userCollectionName);
            var index = users.GetIndexes()
                        .Where(i => i.IsUnique)
                        .Where(i => i.Key.Count() == 1)
                        .First(i => i.Key.Contains("UserName"));

            Expect(index.Key.Count(), Is.EqualTo(1));
        }
Example #14
0
        public dbContext()
        {
            var conn   = "mongodb://localhost:27017";
            var client = new MongoClient(conn);

            Database = client.GetDatabase("Rabbit");
            var users   = Database.GetCollection <User>("users");
            var store   = new UserStore <User>(users);
            var manager = new UserManager <User>(store);

            // if you want roles too:
            var roles     = Database.GetCollection <Role>("roles");
            var roleStore = new RoleStore <Role>(roles);

            IndexChecks.EnsureUniqueIndexOnUserName(users);
            IndexChecks.EnsureUniqueIndexOnEmail(users);

            IndexChecks.EnsureUniqueIndexOnRoleName(roles);
        }
Example #15
0
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            var builder = new ContainerBuilder();

            // registrating all the existing controllers
            builder.RegisterControllers(Assembly.GetExecutingAssembly());
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

            // Init MongoDB Identity
            var client          = new MongoClient(ConfigurationManager.ConnectionStrings["MongoDB"].ConnectionString);
            var database        = client.GetDatabase(ConfigurationManager.AppSettings["DBName"]);
            var usersCollection = database.GetCollection <ApplicationUser>("users");
            var rolesCollection = database.GetCollection <IdentityRole>("roles");

            IndexChecks.EnsureUniqueIndexOnEmail(usersCollection);
            IndexChecks.EnsureUniqueIndexOnRoleName(rolesCollection);

            builder.Register(b => database).AsSelf().SingleInstance();

            // Register Repositories
            builder.Register(b => new ProductRepository(database)).AsImplementedInterfaces().InstancePerLifetimeScope();
            //builder.Register(b => new CommunityRepository(database)).AsImplementedInterfaces().InstancePerLifetimeScope();
            //builder.Register(b => new ProductRepository(database)).AsImplementedInterfaces().InstancePerLifetimeScope();

            // Register Services
            builder.Register(b => new ProductService(b.Resolve <IProductRepository>())).AsImplementedInterfaces().InstancePerLifetimeScope();
            //builder.Register(b => new CommunityService(b.Resolve<ICommunityRepository>(), b.Resolve<IProductRepository>())).AsImplementedInterfaces().InstancePerLifetimeScope();
            //builder.Register(b => new ProductService(b.Resolve<IProductRepository>())).AsImplementedInterfaces().InstancePerLifetimeScope();
            //builder.Register(b => new PaymentService()).AsImplementedInterfaces().InstancePerLifetimeScope();

            IContainer container = builder.Build();

            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
            GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }
Example #16
0
        public static IIdentityServerBuilder AddMongoDbForAspIdentity <TIdentity, TRole>(this IIdentityServerBuilder builder, IConfiguration configuration)
            where TIdentity : External.IdentityUser where TRole : External.IdentityRole
        {
            var configurationOptions = configuration.Get <ConfigurationOptions>();
            // TODO: Inject connectionString and dbName
            var client = new MongoClient(
                //configurationOptions.MongoConnection
                "mongodb://localhost:27017"
                );
            var database = client.GetDatabase(
                //configurationOptions.MongoDatabaseName
                "testDatabase"
                );

            // Changed to return UserStore instead of interface IUserStore to work
            builder.Services.AddSingleton <IUserStore <TIdentity> >(x =>
            {
                var usersCollection = database.GetCollection <TIdentity>("Identity_Users");
                IndexChecks.EnsureUniqueIndexOnNormalizedEmail(usersCollection);
                IndexChecks.EnsureUniqueIndexOnNormalizedUserName(usersCollection);
                return(new External.UserStore <TIdentity>(usersCollection));
            });

            // Changed to return RoleStore instead of interface IRoleStore to work
            builder.Services.AddSingleton <IRoleStore <TRole> >(x =>
            {
                var rolesCollection = database.GetCollection <TRole>("Identity_Roles");
                IndexChecks.EnsureUniqueIndexOnNormalizedRoleName(rolesCollection);
                return(new RoleStore <TRole>(rolesCollection));
            });

            // TODO: Add password settings, etc.
            // https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-configuration?tabs=aspnetcore2x
            builder.Services.AddIdentity <TIdentity, TRole>()
            .AddUserStore <UserStore <TIdentity> >()
            .AddRoleStore <RoleStore <TRole> >()
            .AddDefaultTokenProviders();
            //.AddOpenIddict();

            return(builder);
        }
        public static IdentityBuilder AddMongoStores <TRepository>(this IdentityBuilder builder)
            where TRepository : IMongoIdentityRepository
        {
            var provider = builder.Services.BuildServiceProvider();
            var repo     = (TRepository)provider.GetService <IMongoIdentityRepository>();

            builder.Services.AddSingleton <IUserStore <AppUser> >(p =>
            {
                IndexChecks.EnsureUniqueIndexOnNormalizedEmail(
                    repo.GetDatabase().GetCollection <AppUser>(AppIndentityConstants.Mongo.IdentityUserCollectionName));
                IndexChecks.EnsureUniqueIndexOnNormalizedUserName(
                    repo.GetDatabase().GetCollection <AppUser>(AppIndentityConstants.Mongo.IdentityUserCollectionName));
                return(new AppUserStore <AppUser>(repo));
            });
            builder.Services.AddSingleton <IRoleStore <AppRole> >(p =>
            {
                IndexChecks.EnsureUniqueIndexOnNormalizedRoleName(
                    repo.GetDatabase().GetCollection <AppRole>(AppIndentityConstants.Mongo.IdentityRoleCollectionName));
                return(new AppRoleStore <AppRole>(repo));
            });
            return(builder);
        }
        public static IdentityBuilder AddMongoIdentityStores <TIdentity, TRole>(this IServiceCollection services, IMongoDatabase database) where TIdentity : IdentityUser where TRole : IdentityRole
        {
            services.AddSingleton <IUserStore <TIdentity> >(x =>
            {
                IMongoCollection <TIdentity> usersCollection = database.GetCollection <TIdentity>("Identity_Users");

                IndexChecks.EnsureUniqueIndexOnNormalizedEmail(usersCollection);
                IndexChecks.EnsureUniqueIndexOnNormalizedUserName(usersCollection);

                return(new UserStore <TIdentity>(usersCollection));
            });

            services.AddSingleton <IRoleStore <TRole> >(x =>
            {
                var rolesCollection = database.GetCollection <TRole>("Identity_Roles");

                IndexChecks.EnsureUniqueIndexOnNormalizedRoleName(rolesCollection);

                return(new RoleStore <TRole>(rolesCollection));
            });

            return(services.AddIdentity <TIdentity, TRole>());
        }
Example #19
0
        protected override void Load(ContainerBuilder builder)
        {
            var databaseName = Configuration.GetValue <string>("squidex:stores:mongoDb:databaseName");

            if (string.IsNullOrWhiteSpace(databaseName))
            {
                throw new ConfigurationException("You must specify the MongoDB database name in the 'squidex:stores:mongoDb:databaseName' configuration section.");
            }

            var connectionString = Configuration.GetValue <string>("squidex:stores:mongoDb:connectionString");

            if (string.IsNullOrWhiteSpace(connectionString))
            {
                throw new ConfigurationException("You must specify the MongoDB connection string in the 'squidex:stores:mongoDb:connectionString' configuration section.");
            }

            var databaseNameContent = Configuration.GetValue <string>("squidex:stores:mongoDb:databaseNameContent");

            if (string.IsNullOrWhiteSpace(databaseNameContent))
            {
                databaseNameContent = databaseName;
            }

            builder.Register(c => new MongoClient(connectionString))
            .As <IMongoClient>()
            .SingleInstance();

            builder.Register(c => c.Resolve <IMongoClient>().GetDatabase(databaseName))
            .Named <IMongoDatabase>(MongoDatabaseName)
            .SingleInstance();

            builder.Register(c => c.Resolve <IMongoClient>().GetDatabase(databaseNameContent))
            .Named <IMongoDatabase>(MongoDatabaseNameContent)
            .SingleInstance();

            builder.Register <IUserStore <IdentityUser> >(c =>
            {
                var usersCollection = c.ResolveNamed <IMongoDatabase>(MongoDatabaseName).GetCollection <IdentityUser>("Identity_Users");

                IndexChecks.EnsureUniqueIndexOnNormalizedEmail(usersCollection);
                IndexChecks.EnsureUniqueIndexOnNormalizedUserName(usersCollection);

                return(new UserStore <IdentityUser>(usersCollection));
            })
            .SingleInstance();

            builder.Register <IRoleStore <IdentityRole> >(c =>
            {
                var rolesCollection = c.ResolveNamed <IMongoDatabase>(MongoDatabaseName).GetCollection <IdentityRole>("Identity_Roles");

                IndexChecks.EnsureUniqueIndexOnNormalizedRoleName(rolesCollection);

                return(new RoleStore <IdentityRole>(rolesCollection));
            })
            .SingleInstance();

            builder.RegisterType <MongoUserRepository>()
            .As <IUserRepository>()
            .InstancePerLifetimeScope();

            builder.RegisterType <MongoPersistedGrantStore>()
            .WithParameter(ResolvedParameter.ForNamed <IMongoDatabase>(MongoDatabaseName))
            .As <IPersistedGrantStore>()
            .SingleInstance();

            builder.RegisterType <MongoEventConsumerInfoRepository>()
            .WithParameter(ResolvedParameter.ForNamed <IMongoDatabase>(MongoDatabaseName))
            .As <IEventConsumerInfoRepository>()
            .AsSelf()
            .SingleInstance();

            builder.RegisterType <MongoContentRepository>()
            .WithParameter(ResolvedParameter.ForNamed <IMongoDatabase>(MongoDatabaseNameContent))
            .As <IContentRepository>()
            .As <IEventConsumer>()
            .AsSelf()
            .SingleInstance();

            builder.RegisterType <MongoHistoryEventRepository>()
            .WithParameter(ResolvedParameter.ForNamed <IMongoDatabase>(MongoDatabaseName))
            .As <IHistoryEventRepository>()
            .As <IEventConsumer>()
            .As <IExternalSystem>()
            .AsSelf()
            .SingleInstance();

            builder.RegisterType <MongoSchemaRepository>()
            .WithParameter(ResolvedParameter.ForNamed <IMongoDatabase>(MongoDatabaseName))
            .As <ISchemaRepository>()
            .As <IExternalSystem>()
            .AsSelf()
            .SingleInstance();

            builder.RegisterType <MongoAppRepository>()
            .WithParameter(ResolvedParameter.ForNamed <IMongoDatabase>(MongoDatabaseName))
            .As <IAppRepository>()
            .As <IEventConsumer>()
            .As <IExternalSystem>()
            .AsSelf()
            .SingleInstance();

            builder.Register(c =>
                             new CompoundEventConsumer(
                                 c.Resolve <MongoSchemaRepository>(),
                                 c.Resolve <CachingSchemaProvider>()))
            .As <IEventConsumer>()
            .AsSelf()
            .SingleInstance();

            builder.Register(c =>
                             new CompoundEventConsumer(
                                 c.Resolve <MongoAppRepository>(),
                                 c.Resolve <CachingAppProvider>()))
            .As <IEventConsumer>()
            .AsSelf()
            .SingleInstance();
        }
Example #20
0
 public static void Initialize(IlevusIdentityContext db)
 {
     IndexChecks.EnsureUniqueIndexOnEmail(db.Users);
     IndexChecks.EnsureUniqueIndexOnUserName(db.Users);
     IndexChecks.EnsureUniqueIndexOnRoleName(db.Roles);
 }