public void AddKey(Keys key) { if (!ValidKeys.Contains(key)) { ValidKeys.Add(key); } }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddSwaggerDocument(config => config.PostProcess = document => { document.Info.Version = "v1.0.0"; document.Info.Title = "Status Monitor API"; document.Info.Description = "An API to record status updates and manage configuration for status monitors"; document.Info.Contact = new OpenApiContact() { Name = "Oregon Youth Authority" }; }); services.AddControllers(); services.AddRazorPages(); services.Configure <StatusMonitorDatabaseSettings>(Configuration.GetSection(nameof(StatusMonitorDatabaseSettings))); services.AddSingleton <IStatusMonitorDatabaseSettings>(sp => sp.GetRequiredService <IOptions <StatusMonitorDatabaseSettings> >().Value); services.AddTransient <IStatusRepository <StatusMonitorReply>, StatusMonitorMongoRepository <StatusMonitorReply> >(); services.AddTransient <IMonitorConfigurationRepository <MonitorConfiguration>, MonitorConfigurationMongoRepository <MonitorConfiguration> >(); services.AddHostedService <DataCleanupBackgroundService>(); services.AddHostedService <OfflineMonitorsBackgroundService>(); services.AddIdentityMongoDbProvider <AppUser, AppRole>(identityOptions => { identityOptions.SignIn.RequireConfirmedAccount = false; identityOptions.Password.RequiredLength = 6; identityOptions.Password.RequireLowercase = false; identityOptions.Password.RequireUppercase = false; identityOptions.Password.RequireNonAlphanumeric = false; identityOptions.Password.RequireDigit = false; }, mongoIdentityOptions => { mongoIdentityOptions.UseDefaultIdentity = true; mongoIdentityOptions.ConnectionString = Configuration["StatusMonitorDatabaseSettings:ConnectionString"]; }) .AddRoleManager <RoleManager <AppRole> >() .AddDefaultUI(); services .AddAuthentication(options => { options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme; options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme; options.DefaultSignInScheme = IdentityConstants.ExternalScheme; }) .AddGoogle(options => { IConfigurationSection googleConfig = Configuration.GetSection("Authentication:Google"); options.ClientId = googleConfig["ClientId"]; options.ClientSecret = googleConfig["ClientSecret"]; }) .AddLinkedIn(options => { var linkedinConfig = Configuration.GetSection("Authentication:LinkedIn"); options.ClientId = linkedinConfig["ClientId"]; options.ClientSecret = linkedinConfig["ClientSecret"]; }) //.AddMicrosoftAccount(microsoftOptions => //{ // microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"]; // microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"]; //}) .AddApiKey(options => { options.Header = "X-API-KEY"; options.HeaderKey = String.Empty; options.Events = new ApiKeyEvents { OnAuthenticationFailed = context => { var ex = context.Exception; Trace.TraceError(ex.Message); context.Fail(ex); return(Task.CompletedTask); }, OnApiKeyValidated = context => { if (!ValidKeys.Contains(context.ApiKey)) { return(Task.CompletedTask); } context.Success(); return(Task.CompletedTask); } }; }); }