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)
        {
            // Configuring Options
            ServerOptions serverOptions;
            AegisOptions  aegisOptions;
            DriveOptions  driveOptions;


            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.AddSingleton <IConfigurationRoot>(x => _configuration);
            services.Configure <ServerOptions>(_configuration.GetSection("WebServer"));
            services.Configure <SiteOptions>(_configuration.GetSection("SiteOptions"));
            services.Configure <AegisOptions>(_configuration.GetSection("OpenIdConnect"));
            services.Configure <DriveOptions>(_configuration.GetSection("Drive"));
            services.Configure <SmtpOptions>(_configuration.GetSection("Smtp"));
            services.AddOptions();

            IServiceProvider serviceProvider = services.BuildServiceProvider();

            serverOptions = serviceProvider.GetService <IOptions <ServerOptions> >().Value;
            aegisOptions  = serviceProvider.GetService <IOptions <AegisOptions> >().Value;
            driveOptions  = serviceProvider.GetService <IOptions <DriveOptions> >().Value;

            // Localization
            services.Configure <RequestLocalizationOptions>(
                localizationOptions => serverOptions.SetRequestLocatizationOptions(localizationOptions)
                );

            services.AddLocalization(options =>
                                     options.ResourcesPath = serverOptions.ResourcePath
                                     );

            // Db Contexts
            services.AddDbContext <ConnectDbContext>(options => {
                options.UseSqlServer(
                    _configuration.GetConnectionString("ConnectDB"),
                    settings =>
                {
                    settings.MigrationsAssembly("Angelo.Connect.Web");
                    settings.MigrationsHistoryTable("MigrationsEF", "app");
                    settings.UseRowNumberForPaging();
                }
                    );
            });
            services.AddDbContext <IdentityDbContext>(options => {
                options.UseSqlServer(
                    _configuration.GetConnectionString("IdentityDB"),
                    settings =>
                {
                    settings.MigrationsAssembly("Angelo.Connect.Web");
                    settings.MigrationsHistoryTable("MigrationsEF", "app");
                    settings.UseRowNumberForPaging();
                }
                    );
            });
            services.AddDbContext <DbLogContext>(options => {
                options.UseSqlServer(
                    _configuration.GetConnectionString("ConnectDB"),
                    settings =>
                {
                    settings.MigrationsAssembly("Angelo.Connect.Web");
                    settings.MigrationsHistoryTable("MigrationsEF", "app");
                    settings.UseRowNumberForPaging();
                }
                    );
            });
            services.AddDistributedSqlServerCache(options => {
                options.ConnectionString = _configuration.GetConnectionString("ConnectDB");
                options.SchemaName       = "app";
                options.TableName        = "WebCache";
            });

            // Migrations
            services.AddAppMigrationRepo(_configuration.GetConnectionString("ConnectDB"));
            services.AddCoreMigrations();

            // Core Services
            services.AddAngeloIdentity();
            services.AddConnectCore(options => {
                options.FileSystemRoot                   = _environment.ContentRootPath;
                options.UseHttpsForAbsoluteUris          = serverOptions.UseHttpsRoutes;
                options.SupportedCultures                = serverOptions.GetSupportedCultures();
                options.DefaultCulture                   = serverOptions.GetDefaultCulture();
                options.AegisAuthority                   = aegisOptions.Authority;
                options.ConnectConnectionString          = _configuration.GetConnectionString("ConnectDB");
                options.IdentityConnectionString         = _configuration.GetConnectionString("IdentityDB");
                options.NotifyMeUnsubscribeDefaultDomain = _configuration["NotifyMe:UnsubscribeDefaultDomain"];
                options.NotifyMeUnsubscribePath          = _configuration["NotifyMe:UnsubscribePath"];
                options.EmailServerHost                  = _configuration.GetValue("NotifyMe:EmailServerHost", "antispam.MyCompany.org");
                options.EmailServerPort                  = _configuration.GetValue("NotifyMe:EmailServerPort", 25);
                options.TemplatesPath      = _configuration.GetValue <string>("TemplatesDirectory");
                options.TemplateExportPath = _configuration.GetValue <string>("TemplatesDirectory");
                options.SearchIndexRoot    = _configuration.GetValue <string>("SearchIndexRoot");
            });
            services.AddConnectDocuments(options => {
                options.DriveAuthority = driveOptions.Authority;
            });
            services.AddAutoMapperMappings();
            services.AddLdapServices();

            // Context Providers (Site, Page, Menu)
            services.AddUserContext <UserContextAccessor>();
            services.AddAdminContext <AdminContextAccessor>();
            services.AddClientAdminContext <ClientAdminContextAccessor>();
            services.AddSiteAdminContext <SiteAdminContextAccessor>();
            services.AddSiteContext <SiteContextAccessor>();
            services.AddMultitenancy <SiteContext, SiteContextResolver>();

            // Core menus
            services.AddConnectCoreMenus();

            // Jobs
            services.AddJobs(options => {
                options.UseSqlServer(db => {
                    db.Schema           = "app";
                    db.KeyStoreTable    = "Meta";
                    db.ConnectionString = _configuration.GetConnectionString("ConnectDB");
                });
                options.UseCronJobRegistry <JobRegistry>();
            });


            // UserConsole Components
            services.AddTransient <IUserConsoleCustomComponent, UI.UserConsole.Components.UserMessageComponent>();
            services.AddTransient <IUserConsoleTreeComponent, UI.UserConsole.Components.UserLibraryComponent>();
            services.AddTransient <IUserConsoleTreeComponent, UI.UserConsole.Components.UserPageComponent>();
            services.AddTransient <UI.UserConsole.Components.UserPageComponent>();
            services.AddTransient <IUserConsoleCustomComponent, SiteAlertsComponents>();

            //services.AddTransient<JobCountUsers>();
            //services.AddTransient<JobLongRunning>();
            services.AddTransient <JobImportLdapUsers>();
            services.AddTransient <JobProcessNotifications>();

            // 3rd party libraries
            services.AddKendo();

            // add messaging
            services.AddTransient <EmailProvider>();
            services.AddTransient <TemplateEmailService>();
            services.AddTransient <TemplateService>();
            services.AddTransient <SiteAlertsManager>();

            // Add Authorization Policies
            services.AddSecurityPolicies();
            services.AddClaimsSecurity();

            //Auth Event Handlers
            services.AddTransient <OpenIdInterceptors>();
            services.AddTransient <CookieAuthInterceptors>();

            services.Configure <FormOptions>(options =>
            {
                options.MultipartBodyLengthLimit = long.MaxValue;
                options.BufferBodyLengthLimit    = long.MaxValue;
                options.BufferBody = true;
            });

            // MVC / Hosting
            services.AddMvc()
            .AddMvcOptions(options => {
                options.Filters.Add(typeof(ReturnUrlActionFilter));

                // Require HTTPS requests if the HTTPS rewriter is enabled
                if (serverOptions.UseHttpsRewriter)
                {
                    options.Filters.Add(new Microsoft.AspNetCore.Mvc.RequireHttpsAttribute());
                }
            })
            .AddViewLocalization()
            .AddDataAnnotationsLocalization(options => {
                options.DataAnnotationLocalizerProvider = (type, factory) =>
                                                          factory.Create(typeof(Global));
            })
            .AddJsonOptions(options => {
                // add default json formatting instead of camelcase due to Telerik
                options.SerializerSettings.ContractResolver      = new Newtonsoft.Json.Serialization.DefaultContractResolver();
                options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            });

            services.Configure <RazorViewEngineOptions>(options => {
                options.ViewLocationExpanders.Add(new ViewLocationExpander());
            });

            services.AddSession(options => {
                options.CookiePath  = "/";
                options.IdleTimeout = new TimeSpan(0, serverOptions.SessionMinutes, 0);
            });

            // Plugins
            _plugins.ConfigureServices(services);
        }