// 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); }