/// <summary> /// Configures authentication for current application, using HTTP cookies. /// Registers required components for the <see cref="AuthenticationController"/> and <see cref="AuthenticationService"/>. /// </summary> public static RhetosServiceCollectionBuilder AddAspNetFormsAuth(this RhetosServiceCollectionBuilder builder, Action <AspNetFormsAuthOptions> configureOptions = null) { builder.Services.AddOptions(); if (configureOptions != null) { builder.Services.Configure(configureOptions); } builder.Services.AddIdentityCore <IdentityUser <Guid> >(options => { options.Password.RequireDigit = false; options.Password.RequireLowercase = false; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = false; options.Password.RequiredLength = 1; options.User.AllowedUserNameCharacters = ""; }) .AddUserStore <RhetosUserStore>() .AddDefaultTokenProviders() .AddSignInManager <SignInManager <IdentityUser <Guid> > >(); builder.Services.TryAddScoped <ISecurityStampValidator, SecurityStampValidator <IdentityUser <Guid> > >(); builder.Services.TryAddScoped <AuthenticationService>(); builder.AddRestApiFilters(); builder.Services.AddAuthentication(IdentityConstants.ApplicationScheme) .AddCookie(IdentityConstants.ApplicationScheme, o => o.Events.OnRedirectToLogin = context => { context.Response.StatusCode = StatusCodes.Status401Unauthorized; return(Task.CompletedTask); }); return(builder); }
/// <summary> /// Adds user impersonation components, including <see cref="IUserInfo"/> implementation for impersonated users and a dashboard snippet. /// </summary> public static RhetosServiceCollectionBuilder AddImpersonation(this RhetosServiceCollectionBuilder builder, Action <ImpersonationOptions> configureOptions = null) { builder.Services.AddHttpContextAccessor(); builder.Services.AddOptions(); if (configureOptions != null) { builder.Services.Configure(configureOptions); } builder.AddRestApiFilters(); builder.ConfigureRhetosHost((serviceProvider, rhetosHostBuilder) => rhetosHostBuilder.ConfigureContainer(containerBuilder => { containerBuilder.Register(_ => serviceProvider.GetRequiredService <IHttpContextAccessor>()).SingleInstance().ExternallyOwned(); containerBuilder.Register(_ => serviceProvider.GetRequiredService <IDataProtectionProvider>()).SingleInstance().ExternallyOwned(); containerBuilder.Register(_ => serviceProvider.GetRequiredService <IOptions <ImpersonationOptions> >().Value).SingleInstance().ExternallyOwned(); containerBuilder.RegisterType <RhetosAspNetCoreIdentityUser>().InstancePerMatchingLifetimeScope(UnitOfWorkScope.ScopeName); containerBuilder.Register <BaseAuthentication>(context => new BaseAuthentication(context.Resolve <RhetosAspNetCoreIdentityUser>())).InstancePerMatchingLifetimeScope(UnitOfWorkScope.ScopeName); containerBuilder.RegisterType <ImpersonationService>().InstancePerMatchingLifetimeScope(UnitOfWorkScope.ScopeName); containerBuilder.Register <IUserInfo>(context => context.Resolve <ImpersonationService>().GetUserInfo()).InstancePerMatchingLifetimeScope(UnitOfWorkScope.ScopeName); })); builder.Services.AddDataProtection(); builder.Services.AddMvcCore() .AddApplicationPart(typeof(ImpersonationController).Assembly); builder.AddDashboardSnippet <ImpersonationDashboardSnippet>(); return(builder); }
/// <summary> /// Provides user info from the ASP.NET application to the Rhetos components. /// </summary> /// <remarks> /// It reads IHttpContextAccessor.HttpContext.User.Identity.Name and Identity.IsAuthenticated, /// and maps it to Rhetos <see cref="IUserInfo"/>. /// </remarks> public static RhetosServiceCollectionBuilder AddAspNetCoreIdentityUser(this RhetosServiceCollectionBuilder rhetosServiceCollectionBuilder) { rhetosServiceCollectionBuilder.Services.AddHttpContextAccessor(); // not using TryAdd, allows subsequent calls to override previous ones rhetosServiceCollectionBuilder.Services.AddScoped <IUserInfo, RhetosAspNetCoreIdentityUser>(); return(rhetosServiceCollectionBuilder); }
/// <summary> /// Adds the required services for Rhetos dashboard controller. /// </summary> public static RhetosServiceCollectionBuilder AddDashboard(this RhetosServiceCollectionBuilder rhetosBuilder) { rhetosBuilder.Services .AddControllersWithViews() .AddApplicationPart(typeof(RhetosDashboardController).Assembly); rhetosBuilder.AddDashboardSnippet <ServerStatusSnippet>(); rhetosBuilder.AddDashboardSnippet <InstalledPackagesSnippet>(); return(rhetosBuilder); }
/// <summary> /// Configures Rhetos localization so that it uses the <see cref="IStringLocalizerFactory"/> implementation registered in the <see cref="IServiceCollection"/> /// </summary> public static RhetosServiceCollectionBuilder AddHostLocalization(this RhetosServiceCollectionBuilder rhetosServiceCollectionBuilder, Action <HostLocalizerOptions> configureOptions = null) { rhetosServiceCollectionBuilder.Services.AddOptions(); if (configureOptions != null) { rhetosServiceCollectionBuilder.Services.Configure(configureOptions); } rhetosServiceCollectionBuilder.ConfigureRhetosHost(ConfigureLocalizer); rhetosServiceCollectionBuilder.Services.AddSingleton <HostLocalizer>(); return(rhetosServiceCollectionBuilder); }
public static RhetosServiceCollectionBuilder AddLightDMS(this RhetosServiceCollectionBuilder builder) { builder.Services.AddScoped <LightDmsService>(); builder.Services .AddControllers() .ConfigureApplicationPartManager(p => { p.FeatureProviders.Add(new LightDmsApiControllerFeatureProvider()); }); builder.AddDashboardSnippet <LightDmdDashboardSnippet>(); return(builder); }
/// <summary> /// Adds Rhetos components to the host application. /// </summary> /// <remarks> /// The following public Rhetos components are registered to <see cref="IServiceCollection"/>: /// <list type="bullet"> /// <item><description><see cref="IRhetosComponent{T}"/>, allows direct access to Rhetos components from host application's services.</description></item> /// <item><description><see cref="RhetosHost"/>, for internal access to IoC container.</description></item> /// </list> /// </remarks> /// <returns> /// A <see cref="RhetosServiceCollectionBuilder"/> that can be used to add additional Rhetos-specific services to <see cref="IServiceCollection"/>. /// </returns> public static RhetosServiceCollectionBuilder AddRhetosHost( this IServiceCollection serviceCollection, Action <IServiceProvider, IRhetosHostBuilder> configureRhetosHost = null) { var builder = new RhetosServiceCollectionBuilder(serviceCollection); builder.Services.AddOptions(); if (configureRhetosHost != null) { builder.ConfigureRhetosHost(configureRhetosHost); } builder.Services.TryAddSingleton(serviceProvider => CreateRhetosHost(serviceProvider)); builder.Services.TryAddScoped <RhetosScopeServiceProvider>(); // IRhetosComponent is registered as a transient component but the value of // IRhetosComponent will retain its scope that is specified in the Autofac IoC container builder.Services.TryAddTransient(typeof(IRhetosComponent <>), typeof(RhetosComponent <>)); return(builder); }
public static RhetosServiceCollectionBuilder AddDashboardSnippet <T>(this RhetosServiceCollectionBuilder rhetosBuilder) where T : class, IDashboardSnippet { rhetosBuilder.Services.AddScoped <IDashboardSnippet, T>(); return(rhetosBuilder); }
/// <summary> /// Configures Rhetos logging so that it uses the host application's logging (<see cref="Logging.ILogger"/> implementation registered in the <see cref="IServiceCollection"/>). /// </summary> public static RhetosServiceCollectionBuilder AddHostLogging(this RhetosServiceCollectionBuilder rhetosServiceCollectionBuilder) { rhetosServiceCollectionBuilder.ConfigureRhetosHost(ConfigureLogProvider); return(rhetosServiceCollectionBuilder); }