Esempio n. 1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddCors();

            services.AddDbContext <EFContext>(opt =>
                                              opt.UseSqlServer(Configuration["ConnectionString"],
                                                               b => b.MigrationsAssembly("Project HONEY")).EnableSensitiveDataLogging()
                                              );


            //Facebook auth start
            var facebookAuthSettings = new FacebookAuthSetting();

            Configuration.Bind(nameof(FacebookAuthSetting), facebookAuthSettings);
            services.AddSingleton(facebookAuthSettings);

            services.AddHttpClient();
            services.AddSingleton <IFacebookAuthService, FacebookAuthService>();
            //Facebook auth end


            services.AddHangfire(configuration => configuration
                                 .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
                                 .UseSimpleAssemblyNameTypeSerializer()
                                 .UseRecommendedSerializerSettings()
                                 .UseSqlServerStorage(Configuration["ConnectionString"], new SqlServerStorageOptions
            {
                CommandBatchMaxTimeout       = TimeSpan.FromMinutes(5),
                SlidingInvisibilityTimeout   = TimeSpan.FromMinutes(5),
                QueuePollInterval            = TimeSpan.Zero,
                UseRecommendedIsolationLevel = true,
                DisableGlobalLocks           = true
            }));
            services.AddHangfireServer();

            services.AddIdentity <User, IdentityRole>()
            .AddEntityFrameworkStores <EFContext>()
            .AddDefaultTokenProviders();

            services.AddTransient <IJWTTokenService, JWTTokenService>();
            services.AddTransient <IQueriesService, QueriesService>();



            var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration.GetValue <string>("SecretPhrase")));


            services.Configure <IdentityOptions>(options =>
            {
                options.Password.RequireDigit           = true;
                options.Password.RequiredLength         = 6;
                options.Password.RequireLowercase       = false;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase       = false;
            });

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(cfg =>
            {
                cfg.RequireHttpsMetadata      = false;
                cfg.SaveToken                 = true;
                cfg.TokenValidationParameters = new TokenValidationParameters()
                {
                    IssuerSigningKey         = signingKey,
                    ValidateAudience         = false,
                    ValidateIssuer           = false,
                    ValidateLifetime         = true,
                    ValidateIssuerSigningKey = true,
                    // set ClockSkew is zero
                    ClockSkew = TimeSpan.Zero
                };
            });
            // In production, the React files will be served from this directory
            services.AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "ClientApp/build";
            });
        }
 public FacebookAuthService(FacebookAuthSetting FacebookAuthSetting, IHttpClientFactory HttpClientFactory)
 {
     this.FacebookAuthSettings = FacebookAuthSetting;
     this.HttpClientFactory    = HttpClientFactory;
 }