public IrcConnection(IIrcClient ircClient, IMessageBus messageBus, UserManager <SpikeCoreUser> userManager, IrcConnectionConfig botConfig)
        {
            _ircClient   = ircClient;
            _messageBus  = messageBus;
            _userManager = userManager;
            _config      = botConfig;

            Connect();
        }
Beispiel #2
0
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            if (WebConfig.Enabled)
            {
                services.AddSignalR();

                services.Configure <CookiePolicyOptions>(options =>
                {
                    options.CheckConsentNeeded    = context => true;
                    options.MinimumSameSitePolicy = SameSiteMode.None;
                });

                services.Configure <ForwardedHeadersOptions>(options =>
                {
                    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
                });

                services.AddDatabaseDeveloperPageExceptionFilter();
            }

            services.AddDbContext <SpikeCoreDbContext>(options =>
            {
                options.UseSqlite(Configuration.GetConnectionString("SpikeCoreDbContextConnection"));
            });

            services
            .AddDefaultIdentity <SpikeCoreUser>(options =>
            {
                options.Password.RequireDigit           = false;
                options.Password.RequireLowercase       = false;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase       = false;
            })
            .AddRoles <IdentityRole>()
            .AddEntityFrameworkStores <SpikeCoreDbContext>()
            .AddDefaultTokenProviders()
            .AddPasswordlessLoginTokenProvider()
            .AddUserStore <SpikeCoreUserStore>();

            if (WebConfig.Enabled)
            {
                services
                .AddMvc()
                .SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

                services.ConfigureApplicationCookie(options =>
                {
                    // Make sure our [Authorize] annotations bounce people to an access denied, instead of a login.
                    // Users can only login through special URLs generated by the bot.
                    options.LoginPath = "/Identity/Account/AccessDenied";
                });
            }

            services.AddHttpClient();

            var containerBuilder = new ContainerBuilder();

            containerBuilder.Populate(services);

            var ircConnectionConfig = new IrcConnectionConfig();

            Configuration.GetSection("IrcConnection").Bind(ircConnectionConfig);
            containerBuilder.RegisterInstance(ircConnectionConfig);

            var moduleConfiguration = new ModuleConfiguration();

            Configuration.GetSection("Modules").Bind(moduleConfiguration);
            containerBuilder.RegisterInstance(moduleConfiguration);

            containerBuilder
            .RegisterFoundatio();

            // Register this as a singleton so both our modules and ASP.NET infrastructure get the same instance.
            // Removing this causes our modules and controllers to get different instances of a UserManager, which,
            // due to EF means that making updates via one is not available to the other.
            containerBuilder.RegisterType <UserManager <SpikeCoreUser> >()
            .As <UserManager <SpikeCoreUser> >()
            .PropertiesAutowired()
            .SingleInstance();

            containerBuilder
            .RegisterType <IrcConnection>()
            .As <IIrcConnection>()
            .SingleInstance();

            containerBuilder
            .RegisterType <IrcClient>()
            .As <IIrcClient>()
            .PropertiesAutowired()
            .SingleInstance();

            containerBuilder
            .RegisterType <SignalRMessageBusConnector>()
            .As <ISignalRMessageBusConnector>()
            .SingleInstance();

            containerBuilder
            .RegisterType <LoggingListener>()
            .SingleInstance();

            containerBuilder
            .RegisterAssemblyTypes(typeof(IModule).Assembly)
            .Where(t => t.Name.EndsWith("Module"))
            .As <IModule>()
            .PropertiesAutowired()
            .SingleInstance();

            var container = containerBuilder.Build();

            // Grab an instance of IBot so that it gets activated.
            // We don't need to keep hold of it, it's a singleton.
            // Using AutoActivate meant RegisterFoundatio wasn't able to hook Activated before activation.
            container.Resolve <IIrcConnection>();

            // We also need to resolve all of our modules.
            container.Resolve <IEnumerable <IModule> >();
            container.Resolve <LoggingListener>();

            return(new AutofacServiceProvider(container));
        }