Ejemplo n.º 1
0
 public void AddKey(Keys key)
 {
     if (!ValidKeys.Contains(key))
     {
         ValidKeys.Add(key);
     }
 }
Ejemplo n.º 2
0
        // 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);
                    }
                };
            });
        }