Beispiel #1
0
 public AccountController(SignInManager <AspnetRunUser> signInManager,
                          UserManager <AspnetRunUser> userManager,
                          IOptions <AspnetRunSettings> options)
 {
     _signInManager     = signInManager;
     _userManager       = userManager;
     _aspnetRunSettings = options.Value;
 }
        public static async Task SeedAsync(EZSubmitDbContext context, IServiceScope serviceScope, AspnetRunSettings aspnetRunSettings, int?retry = 0)
        {
            int retryForAvailability = retry.Value;

            try
            {
                if (!await context.Roles.AnyAsync())
                {
                    // Create the default roles (if they don't exist yet)
                    var roleManager = serviceScope.ServiceProvider.GetService <RoleManager <IdentityRole> >();
                    await SeedDefaultRoles(roleManager);
                }

                if (!await context.Users.AnyAsync())
                {
                    // Create the default users (if they don't exist yet)
                    var userManager = serviceScope.ServiceProvider.GetService <UserManager <ApplicationUser> >();
                    await SeedDefaultUsers(userManager, aspnetRunSettings.Seeding.DefaultAdminEmail, aspnetRunSettings.Seeding.DefaultUserEmail);
                }

                if (!await context.CaseForms.AnyAsync())
                {
                    // Create the default case forms
                    var userManager = serviceScope.ServiceProvider.GetService <UserManager <ApplicationUser> >();
                    await SeedCaseForms(context, userManager, aspnetRunSettings.Seeding.DefaultUserEmail);
                }
            }
            catch (Exception exception)
            {
                if (retryForAvailability < 10)
                {
                    retryForAvailability++;

                    // TODO: get logger and log error

                    await SeedAsync(context, serviceScope, aspnetRunSettings, retryForAvailability);
                }

                throw;
            }
        }
        public static IServiceCollection AddCustomDbContext(this IServiceCollection services, AspnetRunSettings aspnetRunSettings)
        {
            // use in-memory database
            //services.AddDbContext<AspnetRunContext>(c => c.UseInMemoryDatabase("AspnetRun"));

            // Add AspnetRun DbContext
            services
            .AddEntityFrameworkSqlServer()
            .AddDbContext <AspnetRunContext>(options =>
                                             options.UseSqlServer(aspnetRunSettings.ConnectionString,
                                                                  sqlOptions =>
            {
                sqlOptions.EnableRetryOnFailure(maxRetryCount: 10, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null);
            }
                                                                  ),
                                             ServiceLifetime.Scoped
                                             );

            return(services);
        }
        public static async void UseDbLayer(this IApplicationBuilder app, IServiceProvider serviceProvider, AspnetRunSettings aspnetRunSettings)
        {
            using (var serviceScope = serviceProvider.GetService <IServiceScopeFactory>().CreateScope())
            {
                var context = serviceScope.ServiceProvider.GetService <EZSubmitDbContext>();

                // TODO: Microsoft recommends NOT using this command for production environments due to possible conflicts if the app
                //      is ever scaled out and running on multiple servers/instances/etc. But how to ensure the database is in place
                //      before trying to Seed?
                // context.Database.Migrate();

                await EZSubmitDbContextSeed.SeedAsync(context, serviceScope, aspnetRunSettings);
            }
        }
        public static IServiceCollection AddCustomAuthentication(this IServiceCollection services, AspnetRunSettings aspnetRunSettings)
        {
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer           = true,
                    ValidateAudience         = true,
                    ValidateLifetime         = true,
                    ValidateIssuerSigningKey = true,

                    ValidIssuer      = aspnetRunSettings.Tokens.Issuer,
                    ValidAudience    = aspnetRunSettings.Tokens.Audience,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(aspnetRunSettings.Tokens.Key))
                };
            });

            return(services);
        }