Exemplo n.º 1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            IdentityConfigurationOptions identityConfigurationOptions = new IdentityConfigurationOptions();
            SiteConfigurationOptions     siteConfigurationOptions     = new SiteConfigurationOptions();
            ErpManagerSettings           erpManagerSettings           = new ErpManagerSettings();

            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.Configure <ConfigurationOptions>(Configuration);
            services.Configure <IISOptions>(options =>
            {
                options.AutomaticAuthentication = false;
            });
            services.AddTransient <IRepository, MongoRepository>();
            services.AddSingleton <ICacheService, CacheService>();
            services.AddSingleton <ILanguageService, LanguageService>();
            services.AddSingleton <IRoomService, RoomService>();

            #region identity server
            //JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
            //services.AddAuthentication(options =>
            //{
            //    options.DefaultScheme = "Cookies";
            //    options.DefaultChallengeScheme = "oidc";
            //})
            //    .AddCookie("Cookies")
            //    .AddOpenIdConnect("oidc", options =>
            //    {
            //        options.SignInScheme = "Cookies";
            //        options.Authority = IdentityConfigurationOptions.Authority;
            //        options.RequireHttpsMetadata = IdentityConfigurationOptions.RequireHttpsMetadata;
            //        options.ClientId = "mvc";
            //        options.ClientSecret = "secret";
            //        options.SaveTokens = true;
            //        options.GetClaimsFromUserInfoEndpoint = true;
            //        options.Scope.Add("api1");
            //        options.Scope.Add("profile");

            //        options.ResponseType = "code id_token";
            //        //options.ResponseType = "code id_token token";
            //    });
            //services.AddSession();
            //services.AddDistributedMemoryCache();
            //services.AddMemoryCache();
            #endregion

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultSignInScheme       = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = CookieAuthenticationDefaults.AuthenticationScheme;
            })
            .AddCookie(options =>
            {
                options.LoginPath  = "/User/Login";
                options.LogoutPath = "/User/logout";
            });


            services.AddMvc();
        }
Exemplo n.º 2
0
        public static IServiceCollection AddInfrastructure(this IServiceCollection services,
                                                           IConfiguration configuration)
        {
            services.Configure <MercuryOptions>(configuration.GetSection(nameof(MercuryOptions)));
            services.Configure <MercuryFileOptions>(configuration.GetSection(nameof(MercuryFileOptions)));

            var misDbOptionsConfig = configuration.GetSection(MisDbOptions.SectionName);

            services.Configure <MisDbOptions>(misDbOptionsConfig);
            var misDbOptions = new MisDbOptions();

            misDbOptionsConfig.Bind(misDbOptions);

            var identityOptionsConfig = configuration.GetSection(IdentityConfigurationOptions.SectionName);

            services.Configure <IdentityConfigurationOptions>(identityOptionsConfig);
            var identityOptions = new IdentityConfigurationOptions();

            identityOptionsConfig.Bind(identityOptions);

            var logFolderOptionsConfig = configuration.GetSection(LogFolderOptions.SectionName);

            services.Configure <LogFolderOptions>(logFolderOptionsConfig);
            var logFolderOptions = new LogFolderOptions();

            logFolderOptionsConfig.Bind(logFolderOptions);

            services.AddScoped <IMisDbContext, MisDbContext>();
            services.AddScoped <IMercuryService, MercuryService>();
            services.AddScoped <IFileService, FileService>();
            services.AddScoped <IPasswordService, PasswordService>();
            services.AddScoped <ITemplateService, TemplateService>();
            services.AddScoped <ILogService, LogService>();
            services.AddScoped <IMisDbContextFactory, MisDbContextFactory>();
            services.AddScoped <IAutoVsdProcessService, AutoVsdProcessService>();
            services.AddSingleton <IAutoVsdProcessDataService, AutoVsdProcessDataService>();
            services.AddScoped <IAutoVsdProcessingStartService, AutoVsdProcessingStartService>();

            services.AddMediatR(Assembly.GetExecutingAssembly());

            services.AddDbContext <MisDbContext>(builder =>
                                                 builder.UseNpgsql(misDbOptions.ConnectionString,
                                                                   b =>
            {
                b.MigrationsAssembly(nameof(Infrastructure));
                b.SetPostgresVersion(misDbOptions.PostgreSqlVersion.Major, misDbOptions.PostgreSqlVersion.Minor);
                b.MigrationsHistoryTable(
                    misDbOptions.EfMigrationsHistoryTableName,
                    misDbOptions.SchemaName);
            }));

            AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);

            services.AddIdentity <User, Role>(options =>
            {
                options.Password.RequiredLength         = identityOptions.Password.RequiredLength;
                options.Password.RequireLowercase       = identityOptions.Password.RequireLowercase;
                options.Password.RequireUppercase       = identityOptions.Password.RequireUppercase;
                options.Password.RequireNonAlphanumeric = identityOptions.Password.RequireNonAlphanumeric;
                options.Password.RequireDigit           = identityOptions.Password.RequireDigit;
            })
            .AddEntityFrameworkStores <MisDbContext>()
            .AddTokenProvider <DataProtectorTokenProvider <User> >(TokenOptions.DefaultProvider);

            services.ConfigureApplicationCookie(options =>
            {
                options.Cookie.HttpOnly   = identityOptions.Cookie.HttpOnly;
                options.SlidingExpiration = identityOptions.Cookie.SlidingExpiration;
                options.ExpireTimeSpan    = TimeSpan.FromHours(identityOptions.Cookie.ExpireTimeSpanHoursCount);
                options.Cookie.Name       = identityOptions.Cookie.Name;
            });

            services.Configure <SecurityStampValidatorOptions>(options =>
            {
                options.ValidationInterval = TimeSpan.Zero;
            });

            //todo вынести в опции
            services.AddQuartz(q =>
            {
                q.SchedulerId = "AutoVsdProcessing";
                q.UseMicrosoftDependencyInjectionJobFactory();
                q.UseSimpleTypeLoader();
                q.UseInMemoryStore();
                q.UseDefaultThreadPool(tp => { tp.MaxConcurrency = 10; });
                q.ScheduleJob <StartProcessingJob>(trigger => trigger
                                                   .WithIdentity("Everyday AutoVsdProcess trigger")
                                                   .WithCronSchedule("0 0 2 * * ?")
                                                   );
                q.UseTimeZoneConverter();
                services.AddTransient <StartProcessingJob>();
                services.AddScoped <ReprocessingJob>();
            });

            services.AddQuartzHostedService(options =>
            {
                options.WaitForJobsToComplete = true;
            });

            return(services);
        }