private void ConfigureBackend(IAppBuilder app) { var appDataPath = Path.Combine(AppLocalRootPath, "App_Data"); // HostingEnvironment.MapPath("~/App_Data"); var dbPath = Path.Combine(appDataPath, "Pim.db"); var database = NoteLiteDb.GetNoteDatabase($"Filename={dbPath}; Upgrade=true; Initial Size=5MB; Password=;"); AuthDatabase = database; IdentityDatabaseContextFactory = new IdentityDatabaseContextFactory(AuthDatabase); var storage = NoteStorage.CreateStandard(database, appDataPath, true); storage.Open(); var languageSetting = ConfigurationManager.AppSettings[AppSettingKeyFulltextIndexLanguages]; if (string.IsNullOrWhiteSpace(languageSetting)) { languageSetting = "English,Russian"; } var stemmerNames = languageSetting.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToCaseInsensitiveSet(); var redundantIndexes = storage.ActiveIndexNames.Where(name => !stemmerNames.Contains(name)); foreach (var redundantIndexName in redundantIndexes) { Log.InfoFormat("Removing FT index {0}", redundantIndexName); storage.RemoveIndex(redundantIndexName); } stemmerNames.ExceptWith(storage.ActiveIndexNames); storage.OpenOrCreateIndexes(stemmerNames); storage.MultiIndex.UseFuzzySearch = true; Storage = storage; var builder = new ContainerBuilder(); builder.RegisterControllers(typeof(Startup).Assembly); builder.Register(context => Storage).SingleInstance(); //builder.RegisterType<HomeController>(); //builder.RegisterType<ViewEditController>(); //builder.RegisterType<SearchController>(); builder.Register(c => IdentityDatabaseContextFactory).SingleInstance(); Container = builder.Build(); app.UseAutofacMiddleware(Container); DependencyResolver.SetResolver(new AutofacDependencyResolver(Container)); app.UseAutofacMvc(); }
private static void ProcessCommand(MyArguments arguments) { Check.DoRequireArgumentNotNull(arguments, nameof(arguments)); if (arguments.IsOperationResetAdmin) { CheckCommandLineArgument(!string.IsNullOrWhiteSpace(arguments.IdentityDatabasePath), "Identity database path is required."); CheckCommandLineArgument(!string.IsNullOrWhiteSpace(arguments.NewPassword), "New password is required."); var database = new LiteDatabase($"Filename={arguments.IdentityDatabasePath}; Password={arguments.DatabasePassword};"); var contextFactory = new IdentityDatabaseContextFactory(database); var identityConfig = new IdentityConfiguration(contextFactory); identityConfig.EnsureDefaultUsersAndRolesAsync().GetAwaiter().GetResult(); Console.WriteLine("Resetting admin password in {0} to {1}", arguments.IdentityDatabasePath, arguments.NewPassword); identityConfig.ResetPasswordAsync(IdentityConfiguration.AdminUserName, arguments.NewPassword) .GetAwaiter() .GetResult(); var userManager = ApplicationUserManager.CreateOutOfContext(contextFactory); var adminUser = userManager.FindByNameAsync(IdentityConfiguration.AdminUserName) .GetAwaiter().GetResult(); Console.WriteLine("Admin user locked: {0}; end date: {1}, has password: {2}", adminUser?.LockoutEnabled, adminUser?.LockoutEndDateUtc, adminUser?.HasPassword()); if (adminUser != null) { if (adminUser.LockoutEnabled) { Console.WriteLine("Unlocking admin"); userManager.ResetAccessFailedCountAsync(adminUser.Id); userManager.SetLockoutEnabledAsync(adminUser.Id, false); } } } else { throw new MyArgumentException($"Operation not recognized: '{arguments.Operation}'; nothing to do."); } }