示例#1
0
        private static void AddServices(this IdentityUIServicesBuilder builder)
        {
            builder.Services.AddScoped <IManageUserService, ManageUserService>();
            builder.Services.AddScoped <IAddUserService, AddUserService>();

            builder.Services.AddScoped <IRoleService, RoleService>();

            builder.Services.AddScoped <IGroupService, GroupService>();
            builder.Services.AddScoped <IRoleAssignmentService, RoleAssignmentService>();
            builder.Services.AddScoped <IRolePermissionService, RolePermissionService>();
            builder.Services.AddScoped <IGroupUserService, GroupUserService>();
            builder.Services.AddScoped <IGroupAttributeService, GroupAttributeService>();

            builder.Services.AddScoped <IPermissionService, PermissionService>();

            builder.Services.AddScoped <IInviteService, InviteService>();
            builder.Services.AddScoped <IEmailService, EmailService>();
            builder.Services.AddScoped <IManageEmailService, ManageEmailService>();

            builder.Services.AddScoped <ILoginService, LoginService>();
            builder.Services.AddScoped <ITwoFactorAuthService, TwoFactorAuthService>();
            builder.Services.AddScoped <Interfaces.Services.Auth.IEmailConfirmationService, EmailConfirmationService>();

            builder.Services.AddScoped <ICredentialsService, Core.Services.Auth.Credentials.CredentialsService>();

            builder.Services.AddScoped <ISessionService, Services.Auth.Session.SessionService>();
            builder.Services.AddScoped <IUserClaimsPrincipalFactory <AppUserEntity>, CustomClaimsPrincipalFactory>();
            builder.Services.AddScoped <ISecurityStampValidator, CustomSecurityStampValidator>();
        }
示例#2
0
        private static void AddValidators(this IdentityUIServicesBuilder builder)
        {
            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.EditUserRequest>, Core.Services.User.Models.EditUserRequestValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.SetNewPasswordRequest>, Core.Services.User.Models.SetNewPasswordValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.NewUserRequest>, Core.Services.User.Models.NewUserRequestValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.RegisterRequest>, Core.Services.User.Models.RegisterRequestValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Login.Models.LoginRequest>, Core.Services.Auth.Login.Models.LoginRequestValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Login.Models.LoginWith2faRequest>, Core.Services.Auth.Login.Models.LoginWith2faRequestValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.Auth.TwoFactorAuth.Models.AddTwoFactorAuthenticatorRequest>, Core.Services.Auth.TwoFactorAuth.Models.AddTwoFactorAuthicatorValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.Role.Models.NewRoleRequest>, Core.Services.Role.Models.NewRoleValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.Role.Models.EditRoleRequest>, Core.Services.Role.Models.EditRoleValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Credentials.Models.RecoverPasswordRequest>, Core.Services.Auth.Credentials.Models.RecoverPasswordValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Credentials.Models.ResetPasswordRequest>, Core.Services.Auth.Credentials.Models.ResetPasswordValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Credentials.Models.ChangePasswordRequest>, Core.Services.Auth.Credentials.Models.ChangePasswordValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.EditProfileRequest>, Core.Services.User.Models.EditProfileValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.UnlockUserRequest>, Core.Services.User.Models.UnlockUserValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.SendEmailVerificationMailRequest>, Core.Services.User.Models.SendEmailVerificationMailValidtor>();

            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Session.Models.LogoutSessionRequest>, Core.Services.Auth.Session.Models.LogoutSessionValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Session.Models.LogoutUserSessionsRequest>, Core.Services.Auth.Session.Models.LogoutUserSessionValidator>();
        }
示例#3
0
        private static void AddRepositories(this IdentityUIServicesBuilder builder)
        {
            builder.Services.AddTransient(typeof(IBaseRepository <>), typeof(BaseRepository <>));
            builder.Services.AddTransient <IRoleRepository, RoleRepository>();
            builder.Services.AddTransient <IUserRepository, UserRepository>();
            builder.Services.AddTransient <IUserRoleRepository, UserRoleRepository>();

            builder.Services.AddTransient <ISessionRepository, SessionRepository>();

            builder.Services.AddTransient(typeof(IBaseRepositoryAsync <>), typeof(BaseRepositoryAsync <>));

            builder.Services.AddTransient <IBaseDAO <AuditEntity>, AuditBaseDAO <AuditEntity> >();

            builder.Services.AddTransient <IBaseDAO <AppUserEntity>, IdentityUIBaseDAO <AppUserEntity> >();
            builder.Services.AddTransient <IBaseDAO <RoleClaimEntity>, IdentityUIBaseDAO <RoleClaimEntity> >();
            builder.Services.AddTransient <IBaseDAO <RoleEntity>, IdentityUIBaseDAO <RoleEntity> >();
            builder.Services.AddTransient <IBaseDAO <UserClaimEntity>, IdentityUIBaseDAO <UserClaimEntity> >();
            builder.Services.AddTransient <IBaseDAO <UserLoginEntity>, IdentityUIBaseDAO <UserLoginEntity> >();
            builder.Services.AddTransient <IBaseDAO <UserRoleEntity>, IdentityUIBaseDAO <UserRoleEntity> >();
            builder.Services.AddTransient <IBaseDAO <UserTokenEntity>, IdentityUIBaseDAO <UserTokenEntity> >();

            builder.Services.AddTransient <IBaseDAO <SessionEntity>, IdentityUIBaseDAO <SessionEntity> >();
            builder.Services.AddTransient <IBaseDAO <UserAttributeEntity>, IdentityUIBaseDAO <UserAttributeEntity> >();
            builder.Services.AddTransient <IBaseDAO <UserImageEntity>, IdentityUIBaseDAO <UserImageEntity> >();

            builder.Services.AddTransient <IBaseDAO <GroupAttributeEntity>, IdentityUIBaseDAO <GroupAttributeEntity> >();
            builder.Services.AddTransient <IBaseDAO <GroupEntity>, IdentityUIBaseDAO <GroupEntity> >();
            builder.Services.AddTransient <IBaseDAO <GroupUserEntity>, IdentityUIBaseDAO <GroupUserEntity> >();

            builder.Services.AddTransient <IBaseDAO <EmailEntity>, IdentityUIBaseDAO <EmailEntity> >();
            builder.Services.AddTransient <IBaseDAO <PermissionEntity>, IdentityUIBaseDAO <PermissionEntity> >();
            builder.Services.AddTransient <IBaseDAO <PermissionRoleEntity>, IdentityUIBaseDAO <PermissionRoleEntity> >();
            builder.Services.AddTransient <IBaseDAO <RoleAssignmentEntity>, IdentityUIBaseDAO <RoleAssignmentEntity> >();
            builder.Services.AddTransient <IBaseDAO <InviteEntity>, IdentityUIBaseDAO <InviteEntity> >();
        }
示例#4
0
        /// <summary>
        /// Registers IdentityUI services
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="identityOptions"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder AddIdentityUI(this IdentityUIServicesBuilder builder,
                                                              Action <IdentityOptions> identityOptions)
        {
            builder.Services.AddDbContext <IdentityDbContext>((provider, options) =>
            {
                DatabaseOptions databaseOptions = provider.GetRequiredService <IOptionsSnapshot <DatabaseOptions> >().Value;
                if (databaseOptions == null)
                {
                    throw new Exception("No DatabaseOptions");
                }

                switch (databaseOptions.Type)
                {
                case DatabaseTypes.PostgreSql:
                    {
                        options.UseNpgsql(databaseOptions.ConnectionString);

                        break;
                    }

                case DatabaseTypes.InMemory:
                    {
                        options.UseInMemoryDatabase(databaseOptions.ConnectionString);
                        break;
                    }

                default:
                    {
                        throw new Exception($"Unsupported Database: {databaseOptions.Type}");
                    }
                }
            });

            builder.Services.AddIdentity <AppUserEntity, RoleEntity>()
            .AddEntityFrameworkStores <IdentityDbContext>()
            .AddDefaultTokenProviders();

            builder.AddValidators();
            builder.AddRepositories();
            builder.AddServices();

            builder.Services.Configure <IdentityOptions>(identityOptions);
            builder.Services.Configure <SecurityStampValidatorOptions>(options =>
            {
                options.ValidationInterval    = TimeSpan.FromMinutes(1);
                options.OnRefreshingPrincipal = context =>
                {
                    Claim sessionCode = context.CurrentPrincipal.FindFirst(IdentityManagementClaims.SESSION_CODE);
                    if (sessionCode != null)
                    {
                        context.NewPrincipal.Identities.First().AddClaim(sessionCode);
                    }

                    return(Task.CompletedTask);
                };
            });


            return(builder);
        }
        public static IdentityUIServicesBuilder UseInMemoryDatabase(this IdentityUIServicesBuilder builder)
        {
            builder.Services.AddDbContext <IdentityDbContext>(options => options.UseInMemoryDatabase(builder.DatabaseOptions.ConnectionString));
            builder.Services.AddSingleton <IUpdateList, EmptyUpdateList>();
            builder.Services.AddScoped <IReleaseManagement, NullReleaseManagement>();

            return(builder);
        }
示例#6
0
        private static void AddRepositories(this IdentityUIServicesBuilder builder)
        {
            builder.Services.AddTransient(typeof(IBaseRepository <>), typeof(BaseRepository <>));
            builder.Services.AddTransient <IRoleRepository, RoleRepository>();
            builder.Services.AddTransient <IUserRepository, UserRepository>();
            builder.Services.AddTransient <IUserRoleRepository, UserRoleRepository>();

            builder.Services.AddTransient <ISessionRepository, SessionRepository>();
        }
示例#7
0
        private static void AddValidators(this IdentityUIServicesBuilder builder)
        {
            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.EditUserRequest>, Core.Services.User.Models.EditUserRequestValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.SetNewPasswordRequest>, Core.Services.User.Models.SetNewPasswordValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.NewUserRequest>, Core.Services.User.Models.NewUserRequestValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.RegisterRequest>, Core.Services.User.Models.RegisterRequestValidator>();
            builder.Services.AddSingleton <IValidator <Services.User.Models.AcceptInviteRequest>, Services.User.Models.AcceptInviteRequestValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Login.Models.LoginRequest>, Core.Services.Auth.Login.Models.LoginRequestValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Login.Models.LoginWith2faRequest>, Core.Services.Auth.Login.Models.LoginWith2faRequestValidator>();
            builder.Services.AddSingleton <IValidator <Services.Auth.Login.Models.LoginWithRecoveryCodeRequest>, Services.Auth.Login.Models.LoginWithRecoveryCodeRequestValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.Auth.TwoFactorAuth.Models.AddTwoFactorAuthenticatorRequest>, Core.Services.Auth.TwoFactorAuth.Models.AddTwoFactorAuthicatorValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.Auth.TwoFactorAuth.Models.AddTwoFactorPhoneAuthenticationRequest>, Core.Services.Auth.TwoFactorAuth.Models.AddTwoFactorPhoneAuthenticationRequestValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.Auth.TwoFactorAuth.Models.AddTwoFactorEmailAuthenticationRequest>, Core.Services.Auth.TwoFactorAuth.Models.AddTwoFactorEmailAuthenticationRequestValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.Role.Models.NewRoleRequest>, Core.Services.Role.Models.NewRoleValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.Role.Models.EditRoleRequest>, Core.Services.Role.Models.EditRoleValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Credentials.Models.RecoverPasswordRequest>, Core.Services.Auth.Credentials.Models.RecoverPasswordValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Credentials.Models.ResetPasswordRequest>, Core.Services.Auth.Credentials.Models.ResetPasswordValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Credentials.Models.ChangePasswordRequest>, Core.Services.Auth.Credentials.Models.ChangePasswordValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.EditProfileRequest>, Core.Services.User.Models.EditProfileValidator>();

            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.UnlockUserRequest>, Core.Services.User.Models.UnlockUserValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.User.Models.SendEmailVerificationMailRequest>, Core.Services.User.Models.SendEmailVerificationMailValidtor>();

            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Session.Models.LogoutSessionRequest>, Core.Services.Auth.Session.Models.LogoutSessionValidator>();
            builder.Services.AddSingleton <IValidator <Core.Services.Auth.Session.Models.LogoutUserSessionsRequest>, Core.Services.Auth.Session.Models.LogoutUserSessionValidator>();

            builder.Services.AddSingleton <IValidator <AddRoleAssignmentRequest>, AddRoleAssignmentRequestValidator>();

            builder.Services.AddSingleton <IValidator <Services.Group.Models.AddGroupRequest>, Services.Group.Models.AddGroupRequestValidator>();

            builder.Services.AddSingleton <IValidator <AddRolePermissionRequest>, Services.Role.Models.AddRolePermissionRequestValidator>();

            builder.Services.AddSingleton <IValidator <Services.Group.Models.AddExistingUserRequest>, Services.Group.Models.AddExisingUserRequestValidator>();
            builder.Services.AddSingleton <IValidator <Services.Group.Models.InviteUserToGroupRequest>, Services.Group.Models.InviteUserToGroupRequestValidator>();

            builder.Services.AddSingleton <IValidator <Services.Group.Models.AddGroupAttributeRequest>, Services.Group.Models.AddGroupAttributeRequestValidator>();
            builder.Services.AddSingleton <IValidator <Services.Group.Models.EditGroupAttributeRequest>, Services.Group.Models.EditGroupAttributeRequestValidator>();

            builder.Services.AddSingleton <IValidator <Services.Permission.Models.AddPermissionRequest>, Services.Permission.Models.AddPermissionRequestValidator>();
            builder.Services.AddSingleton <IValidator <Services.Permission.Models.EditPermissionRequest>, Services.Permission.Models.EditPermissionRequestValidator>();

            builder.Services.AddSingleton <IValidator <Services.Email.Models.AddEmailRequest>, Services.Email.Models.AddEmailRequestValidator>();
            builder.Services.AddSingleton <IValidator <Services.Email.Models.EditEmailRequest>, Services.Email.Models.EditEmailRequestValidator>();
            builder.Services.AddSingleton <IValidator <Services.Email.Models.SendTesEmailRequest>, Services.Email.Models.SendTestEmailRequestValidator>();

            builder.Services.AddSingleton <IValidator <Services.User.Models.InviteToGroupRequest>, Services.User.Models.InviteToGroupRequestValidator>();
            builder.Services.AddSingleton <IValidator <Services.User.Models.InviteRequest>, Services.User.Models.InviteRequestValidatior>();
        }
        /// <summary>
        /// Configures AuthenticationCookie
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="optionsAction"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder AddAuth(this IdentityUIServicesBuilder builder, Action <CookieAuthenticationOptions> optionsAction)
        {
            builder.Services.ConfigureApplicationCookie(optionsAction);

            Microsoft.AspNetCore.Authentication.AuthenticationBuilder authenticationBuilder = builder.Services.AddAuthentication();

            if (!string.IsNullOrEmpty(builder.Configuration["IdentityUI:Microsoft:ClientId"]) && !string.IsNullOrEmpty(builder.Configuration["IdentityUI:Microsoft:ClientSecret"]))
            {
                authenticationBuilder.AddMicrosoftAccount(options =>
                {
                    options.ClientId     = builder.Configuration["IdentityUI:Microsoft:ClientId"];
                    options.ClientSecret = builder.Configuration["IdentityUI:Microsoft:ClientSecret"];
                });
            }

            if (!string.IsNullOrEmpty(builder.Configuration["IdentityUI:Google:ClientId"]) && !string.IsNullOrEmpty(builder.Configuration["IdentityUI:Google:ClientSecret"]))
            {
                authenticationBuilder.AddGoogle(options =>
                {
                    options.ClientId     = builder.Configuration["IdentityUI:Google:ClientId"];
                    options.ClientSecret = builder.Configuration["IdentityUI:Google:ClientSecret"];
                });
            }

            if (!string.IsNullOrEmpty(builder.Configuration["IdentityUI:Facebook:AppId"]) && !string.IsNullOrEmpty(builder.Configuration["IdentityUI:Facebook:AppSecret"]))
            {
                authenticationBuilder.AddFacebook(options =>
                {
                    options.AppId     = builder.Configuration["IdentityUI:Facebook:AppId"];
                    options.AppSecret = builder.Configuration["IdentityUI:Facebook:AppSecret"];
                });
            }

            if (!string.IsNullOrEmpty(builder.Configuration["IdentityUI:Twitter:ConsumerKey"]) && !string.IsNullOrEmpty(builder.Configuration["IdentityUI:Twitter:ConsumerSecret"]))
            {
                authenticationBuilder.AddTwitter(options =>
                {
                    options.ConsumerKey         = builder.Configuration["IdentityUI:Twitter:ConsumerKey"];
                    options.ConsumerSecret      = builder.Configuration["IdentityUI:Twitter:ConsumerSecret"];
                    options.RetrieveUserDetails = builder.Configuration["IdentityUI:Twitter:RetrieveUserDetails"] == "True";
                });
            }

            if (!string.IsNullOrEmpty(builder.Configuration["IdentityUI:WsFederation:Wtrealm"]))
            {
                authenticationBuilder.AddWsFederation(options =>
                {
                    options.MetadataAddress = builder.Configuration["IdentityUI:WsFederation:MetadataAddress"];
                    options.Wtrealm         = builder.Configuration["IdentityUI:WsFederation:Wtrealm"];
                });
            }

            return(builder);
        }
示例#9
0
        /// <summary>
        /// Configures IdentityUI
        /// </summary>
        /// <param name="services"></param>
        /// <param name="configuration"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder ConfigureIdentityUI(this IServiceCollection services, IConfiguration configuration)
        {
            services.Configure <IdentityUIOptions>(configuration.GetSection("IdentityUI"));
            services.Configure <DatabaseOptions>(configuration.GetSection($"IdentityUI:{nameof(IdentityUIOptions.Database)}"));
            services.Configure <EmailSenderOptions>(configuration.GetSection($"IdentityUI:{nameof(IdentityUIOptions.EmailSender)}"));
            services.Configure <IdentityUIEndpoints>(configuration);

            IdentityUIServicesBuilder builder = new IdentityUIServicesBuilder(services, new IdentityUIEndpoints());

            return(builder);
        }
        /// <summary>
        /// Registers services for IdentityUI.Account
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder AddAccountManagement(this IdentityUIServicesBuilder builder)
        {
            PagePath.HOME = builder.IdentityManagementEndpoints.Home;

            builder.Services.AddAdminTemplate();

            builder.Services.AddScoped <IManageDataService, ManageDataService>();

            builder.Services.ConfigureOptions(typeof(UIConfigureOptions));

            return(builder);
        }
示例#11
0
        public static IdentityUIServicesBuilder AddGroupAdmin(this IdentityUIServicesBuilder builder)
        {
            builder.Services.AddScoped <IGroupAdminDashboardService, GroupAdminDashboardDataService>();
            builder.Services.AddScoped <IGroupAdminUserDataService, GroupAdminUserDataService>();
            builder.Services.AddScoped <IGroupAdminAuditDataService, GroupAdminAuditDataService>();
            builder.Services.AddScoped <IGroupAdminInviteDataService, GroupAdminInviteDataService>();
            builder.Services.AddScoped <IGroupAdminAttributeDataService, GroupAdminAttributeDataService>();
            builder.Services.AddScoped <IGroupAdminSettingsDataService, GroupAdminSettingsDataService>();

            builder.Services.AddTransient <IValidator <GroupAdminAuditTableRequest>, GroupAdminAuditTableRequestValidator>();

            return(builder);
        }
示例#12
0
        public static IdentityUIServicesBuilder UseSqlServer(this IdentityUIServicesBuilder builder, string connectionString)
        {
            builder.Services.AddDbContext <IdentityDbContext>(options =>
            {
                options.UseSqlServer(connectionString, b =>
                {
                    b.MigrationsAssembly(typeof(IdentityUISqlServerExtensions).Assembly.FullName);
                });
            });

            builder.Services.AddSingleton <IUpdateList, SqlServerUpdateList>();

            return(builder);
        }
示例#13
0
        private static void AddServices(this IdentityUIServicesBuilder builder)
        {
            builder.Services.AddScoped <IUrlGenerator, UrlGenerator>();

            builder.Services.AddScoped <IManageUserService, ManageUserService>();
            builder.Services.AddScoped <IAddUserService, AddUserService>();

            builder.Services.AddScoped <IRoleService, RoleService>();

            builder.Services.AddScoped <IGroupService, GroupService>();
            builder.Services.AddScoped <IRoleAssignmentService, RoleAssignmentService>();
            builder.Services.AddScoped <IRolePermissionService, RolePermissionService>();
            builder.Services.AddScoped <IGroupUserService, GroupUserService>();
            builder.Services.AddScoped <IGroupAttributeService, GroupAttributeService>();

            builder.Services.AddScoped <IPermissionService, PermissionService>();

            builder.Services.AddScoped <IInviteService, InviteService>();
            builder.Services.AddScoped <IEmailService, EmailService>();
            builder.Services.AddScoped <IManageEmailService, ManageEmailService>();

            builder.Services.AddScoped <ILoginService, LoginService>();
            builder.Services.AddScoped <ITwoFactorAuthService, TwoFactorAuthService>();
            builder.Services.AddScoped <Interfaces.Services.Auth.IEmailConfirmationService, EmailConfirmationService>();

            builder.Services.AddScoped <ICredentialsService, Core.Services.Auth.Credentials.CredentialsService>();

            builder.Services.AddScoped <ISessionService, Services.Auth.Session.SessionService>();
            builder.Services.AddScoped <IUserClaimsPrincipalFactory <AppUserEntity>, CustomClaimsPrincipalFactory>();
            builder.Services.AddScoped <ISecurityStampValidator, CustomSecurityStampValidator>();

            builder.Services.AddScoped <IProfileImageService, ProfileImageService>();

            builder.Services.AddScoped <IExternalLoginService, Services.Auth.Login.ExternalLoginService>();

            builder.Services.AddScoped <IUserAttributeService, UserAttributeService>();

            builder.Services.AddScoped <IGroupRegistrationService, GroupRegistrationService>();

            builder.Services.AddScoped <IImpersonateService, ImpersonateService>();

            builder.Services.AddScoped <IIdentityUIUserInfoService, HttpContextUserInfoService>();

            builder.Services.AddScoped <IDefaultProfileImageService, IdentityUIDefaultProfileImageService>();

            builder.Services.AddScoped <ILoginFilter, LoginFilter>();
            builder.Services.AddScoped <IAddUserFilter, NullAddUserFilter>();
            builder.Services.AddScoped <IAddGroupUserFilter, NullAddGroupUserFilter>();
            builder.Services.AddScoped <IAddInviteFilter, NullAddInviteFilter>();
        }
示例#14
0
        /// <summary>
        /// Configures AuthenticationCookie
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder AddAuth(this IdentityUIServicesBuilder builder)
        {
            Action <CookieAuthenticationOptions> cookieAuthenticationOptions = new Action <CookieAuthenticationOptions>(options =>
            {
                options.Cookie.HttpOnly   = true;
                options.LoginPath         = builder.IdentityManagementEndpoints.Login;
                options.AccessDeniedPath  = builder.IdentityManagementEndpoints.AccessDenied;
                options.SlidingExpiration = true;
                options.LogoutPath        = builder.IdentityManagementEndpoints.Logout;
            });

            builder.AddAuth(cookieAuthenticationOptions);

            return(builder);
        }
示例#15
0
        /// <summary>
        /// Configures IdentityUI
        /// </summary>
        /// <param name="services"></param>
        /// <param name="configuration"></param>
        /// <param name="endpointAction"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder ConfigureIdentityUI(this IServiceCollection services, IConfiguration configuration,
                                                                    Action <IdentityUIEndpoints> endpointAction)
        {
            services.Configure <IdentityUIOptions>(configuration.GetSection("IdentityUI"));
            services.Configure <DatabaseOptions>(configuration.GetSection($"IdentityUI:{nameof(IdentityUIOptions.Database)}"));
            services.Configure <EmailSenderOptions>(configuration.GetSection($"IdentityUI:{nameof(IdentityUIOptions.EmailSender)}"));
            services.Configure <IdentityUIEndpoints>(endpointAction);

            IdentityUIEndpoints identityManagementEndpoints = new IdentityUIEndpoints();

            endpointAction?.Invoke(identityManagementEndpoints);

            IdentityUIServicesBuilder builder = new IdentityUIServicesBuilder(services, identityManagementEndpoints);

            return(builder);
        }
示例#16
0
        private static void AddServices(this IdentityUIServicesBuilder builder)
        {
            builder.Services.AddScoped <IManageUserService, ManageUserService>();
            builder.Services.AddScoped <IAddUserService, AddUserService>();

            builder.Services.AddScoped <IRoleService, RoleService>();

            builder.Services.AddScoped <ILoginService, LoginService>();
            builder.Services.AddScoped <ITwoFactorAuthService, TwoFactorAuthService>();
            builder.Services.AddScoped <IEmailService, EmailService>();

            builder.Services.AddScoped <ICredentialsService, Core.Services.Auth.Credentials.CredentialsService>();

            builder.Services.AddScoped <ISessionService, Services.Auth.Session.SessionService>();
            builder.Services.AddScoped <IUserClaimsPrincipalFactory <AppUserEntity>, CustomClaimsPrincipalFactory>();
            builder.Services.AddScoped <ISecurityStampValidator, CustomSecurityStampValidator>();
        }
示例#17
0
        /// <summary>
        /// Registers services for IdentityUI.Admin
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder AddIdentityAdmin(this IdentityUIServicesBuilder builder)
        {
            PagePath.LOGOUT = builder.IdentityManagementEndpoints.Logout;
            PagePath.MANAGE = builder.IdentityManagementEndpoints.Manage;
            PagePath.HOME   = builder.IdentityManagementEndpoints.Home;

            builder.Services.AddAdminTemplate();

            builder.Services.ConfigureOptions(typeof(UIConfigureOptions));

            builder.Services.AddSingleton <IValidator <DataTableRequest>, DataTableValidator>();

            builder.Services.AddScoped <IUserDataService, UserDataService>();
            builder.Services.AddScoped <IRoleDataService, RoleDataService>();

            return(builder);
        }
        /// <summary>
        /// Registers services for IdentityUI.Admin
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder AddIdentityAdmin(this IdentityUIServicesBuilder builder)
        {
            PagePath.LOGOUT = builder.IdentityManagementEndpoints.Logout;
            PagePath.MANAGE = builder.IdentityManagementEndpoints.Manage;
            PagePath.HOME   = builder.IdentityManagementEndpoints.Home;

            builder.Services.AddAdminTemplate();

            builder.Services.ConfigureOptions(typeof(UIConfigureOptions));

            builder.Services.AddSingleton <IValidator <DataTableRequest>, DataTableValidator>();

            builder.Services.AddScoped <IUserDataService, UserDataService>();
            builder.Services.AddScoped <IRoleDataService, RoleDataService>();

            builder.Services.AddScoped <IRoleAssignmentDataService, RoleAssignmentDataService>();
            builder.Services.AddScoped <IRolePermissionsDataService, RolePermissionDataService>();

            builder.Services.AddScoped <IPermissionDataService, PermissionDataService>();

            builder.Services.AddScoped <IGroupDataService, GroupDataService>();
            builder.Services.AddScoped <IGroupUserDataService, GroupUserDataService>();
            builder.Services.AddScoped <IGroupInviteDataService, GroupInviteDataService>();
            builder.Services.AddScoped <IGroupAttributeDataService, GroupAttributeDataService>();

            builder.Services.AddScoped <IInviteDataService, InviteDataService>();

            builder.Services.AddScoped <IEmailDataService, EmailDataService>();

            builder.Services.AddScoped <IUserAttributeDataService, UserAttributeDataService>();

            builder.Services.AddScoped <IAuditDataService, AuditDataService>();

            builder.Services.AddSingleton <IValidator <AuditTableRequest>, AuditTableRequestValidator>();

            builder.Services.AddScoped <Interfaces.IGroupUserDataService, Services.GroupUserDataService>();
            builder.Services.AddScoped <Interfaces.IGroupInviteDataService, Services.GroupInviteDataService>();
            builder.Services.AddScoped <Interfaces.IGroupAttributeDataService, Services.GroupAttributeDataService>();

            builder.AddGroupAdmin();

            return(builder);
        }
        /// <summary>
        /// Registers services for IdentityUI.Account
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder AddAccountManagement(this IdentityUIServicesBuilder builder)
        {
            PagePath.HOME = builder.IdentityManagementEndpoints.Home;

            builder.Services.AddAdminTemplate();

            builder.Services.AddScoped <IManageDataService, ManageDataService>();
            builder.Services.AddScoped <IAccountDataService, AccountDataService>();
            builder.Services.AddScoped <ITwoFactorAuthenticationDataService, TwoFactorAuthenticationDataService>();
            builder.Services.AddScoped <ICredentialsDataService, CredentialsDataService>();

            builder.Services.AddScoped <IAuditDataService, AuditDataService>();

            builder.Services.AddSingleton <IValidator <AuditTableRequest>, AuditTableRequestValidator>();

            builder.Services.ConfigureOptions(typeof(UIConfigureOptions));

            return(builder);
        }
示例#20
0
        /// <summary>
        /// Registers IdentityUI services
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="identityOptions"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder AddIdentityUI(this IdentityUIServicesBuilder builder,
                                                              Action <IdentityOptions> identityOptions)
        {
            builder.Services.AddIdentity <AppUserEntity, RoleEntity>()
            .AddEntityFrameworkStores <IdentityDbContext>()
            .AddDefaultTokenProviders();

            builder.AddValidators();
            builder.AddRepositories();
            builder.AddSeeders();
            builder.AddServices();

            builder.Services.AddScoped <IGroupStore, GroupStore>();
            builder.Services.AddScoped <IGroupUserStore, GroupUserStore>();

            //To create UrlHelper we need ActionContext
            builder.Services.AddSingleton <IActionContextAccessor, ActionContextAccessor>();

            builder.Services.Configure <IdentityOptions>(identityOptions);
            builder.Services.Configure <SecurityStampValidatorOptions>(options =>
            {
                options.ValidationInterval = TimeSpan.FromMinutes(1);
                //options.OnRefreshingPrincipal = context =>
                //{
                //    Claim sessionCode = context.CurrentPrincipal.FindFirst(IdentityUIClaims.SESSION_CODE);
                //    if (sessionCode != null)
                //    {
                //        context.NewPrincipal.Identities.First().AddClaim(sessionCode);
                //    }

                //    return Task.CompletedTask;
                //};
            });

            //builder.Services.Configure<IdentityUIClaimOptions>(options =>
            //{

            //});


            return(builder);
        }
示例#21
0
        /// <summary>
        /// Registers IdentityUI services
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder AddIdentityUI(this IdentityUIServicesBuilder builder)
        {
            Action <IdentityOptions> identityOptions = new Action <IdentityOptions>(options =>
            {
                options.Password.RequireDigit           = false;
                options.Password.RequiredLength         = 6;
                options.Password.RequiredUniqueChars    = 0;
                options.Password.RequireLowercase       = true;
                options.Password.RequireUppercase       = true;
                options.Password.RequireNonAlphanumeric = false;

                options.SignIn.RequireConfirmedEmail       = true;
                options.SignIn.RequireConfirmedPhoneNumber = false;

                options.Lockout.AllowedForNewUsers      = true;
                options.Lockout.MaxFailedAccessAttempts = 5;
                options.Lockout.DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(5);
            });

            return(builder.AddIdentityUI(identityOptions));
        }
示例#22
0
        /// <summary>
        /// Registers services for IdentityUI.Admin
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder AddIdentityAdmin(this IdentityUIServicesBuilder builder)
        {
            PagePath.LOGOUT = builder.IdentityManagementEndpoints.Logout;
            PagePath.MANAGE = builder.IdentityManagementEndpoints.Manage;
            PagePath.HOME   = builder.IdentityManagementEndpoints.Home;

            builder.Services.AddAdminTemplate();

            builder.Services.ConfigureOptions(typeof(UIConfigureOptions));

            builder.Services.AddSingleton <IValidator <DataTableRequest>, DataTableValidator>();

            builder.Services.AddScoped <IUserDataService, UserDataService>();
            builder.Services.AddScoped <IRoleDataService, RoleDataService>();

            builder.Services.AddScoped <IRoleAssignmentDataService, RoleAssignmentDataService>();
            builder.Services.AddScoped <IRolePermissionsDataService, RolePermissionDataService>();

            builder.Services.AddScoped <IPermissionDataService, PermissionDataService>();

            builder.Services.AddScoped <IGroupDataService, GroupDataService>();
            builder.Services.AddScoped <IGroupUserDataService, GroupUserDataService>();
            builder.Services.AddScoped <IGroupInviteDataService, GroupInviteDataService>();
            builder.Services.AddScoped <IGroupAttributeDataService, GroupAttributeDataService>();

            builder.Services.AddScoped <IInviteDataService, InviteDataService>();

            builder.Services.AddScoped <IEmailDataService, EmailDataService>();

            if (builder.IdentityManagementEndpoints.UseEmailSender.HasValue && builder.IdentityManagementEndpoints.UseEmailSender.Value == true)
            {
                SidebarSelection.UseEmailSender = true;
            }

            return(builder);
        }
示例#23
0
        /// <summary>
        /// Configures IdentityUI
        /// </summary>
        /// <param name="services"></param>
        /// <param name="configuration"></param>
        /// <param name="endpointAction"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder ConfigureIdentityUI(this IServiceCollection services, IConfiguration configuration,
                                                                    Action <IdentityUIEndpoints> endpointAction)
        {
            IdentityUIOptions identityUIOptions = configuration.GetSection("IdentityUI").Get <IdentityUIOptions>();

            if (identityUIOptions == null)
            {
                identityUIOptions = new IdentityUIOptions();
            }

            services.Configure <IdentityUIOptions>(options =>
            {
                options.BasePath    = identityUIOptions.BasePath;
                options.Database    = identityUIOptions.Database;
                options.EmailSender = identityUIOptions.EmailSender;
            });

            services.Configure <ReCaptchaOptions>(options =>
            {
                options.SiteKey    = identityUIOptions.ReCaptcha?.SiteKey;
                options.SiteSecret = identityUIOptions.ReCaptcha?.SiteSecret;
            });

            DatabaseOptions databaseOptions = new DatabaseOptions
            {
                Type             = identityUIOptions.Database?.Type ?? DatabaseTypes.InMemory,
                ConnectionString = identityUIOptions.Database?.ConnectionString
            };

            services.Configure <DatabaseOptions>(options =>
            {
                options.Type             = databaseOptions.Type;
                options.ConnectionString = databaseOptions.ConnectionString;
            });

            services.Configure <EmailSenderOptions>(options =>
            {
                options.Ip                = identityUIOptions.EmailSender?.Ip;
                options.Port              = identityUIOptions.EmailSender?.Port ?? -1;
                options.UserName          = identityUIOptions.EmailSender?.UserName;
                options.Password          = identityUIOptions.EmailSender?.Password;
                options.SenderEmail       = identityUIOptions.EmailSender?.SenderName;
                options.SenderEmail       = identityUIOptions.EmailSender?.SenderEmail;
                options.SenderDisplayName = identityUIOptions.EmailSender?.SenderDisplayName;
                options.UseSSL            = identityUIOptions.EmailSender?.UseSSL ?? false;
            });

            IdentityUIEndpoints identityManagementEndpoints = new IdentityUIEndpoints();

            endpointAction?.Invoke(identityManagementEndpoints);

            if (!identityManagementEndpoints.UseEmailSender.HasValue)
            {
                if (identityUIOptions.EmailSender == null || string.IsNullOrEmpty(identityUIOptions.EmailSender.Ip))
                {
                    identityManagementEndpoints.UseEmailSender = false;
                }
                else
                {
                    identityManagementEndpoints.UseEmailSender = true;
                }
            }

            services.Configure <IdentityUIEndpoints>(options =>
            {
                options.Home = identityManagementEndpoints.Home;

                options.Login        = identityManagementEndpoints.Login;
                options.Logout       = identityManagementEndpoints.Logout;
                options.AccessDenied = identityManagementEndpoints.AccessDenied;

                options.Manage = identityManagementEndpoints.Manage;

                options.ConfirmeEmail = identityManagementEndpoints.ConfirmeEmail;
                options.ResetPassword = identityManagementEndpoints.ResetPassword;
                options.AcceptInvite  = identityManagementEndpoints.AcceptInvite;

                options.ProfileImage        = identityManagementEndpoints.ProfileImage;
                options.AdminLogo           = identityManagementEndpoints.AdminLogo;
                options.AccountSettingsLogo = identityManagementEndpoints.AccountSettingsLogo;

                options.RegisterEnabled          = identityManagementEndpoints.RegisterEnabled;
                options.GroupRegistrationEnabled = identityManagementEndpoints.GroupRegistrationEnabled;

                options.AuthenticatorIssuer = identityManagementEndpoints.AuthenticatorIssuer;

                options.UseEmailSender         = identityManagementEndpoints.UseEmailSender;
                options.UseSmsGateway          = identityManagementEndpoints.UseSmsGateway;
                options.InviteValidForTimeSpan = identityManagementEndpoints.InviteValidForTimeSpan;

                options.BypassTwoFactorOnExternalLogin = identityManagementEndpoints.BypassTwoFactorOnExternalLogin;
                options.UseEmailAsUsername             = identityManagementEndpoints.UseEmailAsUsername;
                options.ShowAuditToUser    = identityManagementEndpoints.ShowAuditToUser;
                options.CanChangeGroupName = identityManagementEndpoints.CanChangeGroupName;
                options.CanRemoveGroup     = identityManagementEndpoints.CanRemoveGroup;
                options.CanRemoveUser      = identityManagementEndpoints.CanRemoveUser;
                options.AllowImpersonation = identityManagementEndpoints.AllowImpersonation;
            });

            IdentityUIServicesBuilder builder = new IdentityUIServicesBuilder(services, identityManagementEndpoints, databaseOptions, configuration);

            builder.Services.AddScoped <IEmailSender, NullEmailSender>();
            builder.Services.AddScoped <ISmsSender, NullSmsSender>();
            builder.Services.AddScoped <IReleaseManagement, ReleaseManagement>();

            builder.Services.AddAudit();
            builder.Services.AddTransient <IAuditDbContext, IdentityDbContext>();

            services.AddScoped <Audit.Services.IAuditSubjectDataService>(x =>
            {
                Microsoft.Extensions.Options.IOptions <Audit.Models.AuditOptions> auditOptions        = x.GetRequiredService <Microsoft.Extensions.Options.IOptions <Audit.Models.AuditOptions> >();
                Microsoft.Extensions.Options.IOptions <IdentityUIClaimOptions> identityUIClaimOptions = x.GetRequiredService <Microsoft.Extensions.Options.IOptions <IdentityUIClaimOptions> >();

                Microsoft.AspNetCore.Http.IHttpContextAccessor httpContextAccessor = x.GetRequiredService <Microsoft.AspNetCore.Http.IHttpContextAccessor>();

                IIdentityUIUserInfoService identityUIUserInfoService = x.GetRequiredService <IIdentityUIUserInfoService>();

                if (httpContextAccessor.HttpContext != null)
                {
                    return(new IdentityUIAuditSubjectService(httpContextAccessor, identityUIUserInfoService, auditOptions, identityUIClaimOptions));
                }

                Audit.Services.IBackgroundServiceContextAccessor backgroundServiceContextAccessor = x.GetRequiredService <Audit.Services.IBackgroundServiceContextAccessor>();
                if (backgroundServiceContextAccessor.BackgroundServiceContext != null)
                {
                    return(new Audit.Services.BackgroundServiceAuditSubjectDataService(backgroundServiceContextAccessor));
                }

                return(new Audit.Services.DefaultAuditSubjectService(auditOptions));
            });

            return(builder);
        }
示例#24
0
        /// <summary>
        /// Configures AuthenticationCookie
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="optionsAction"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder AddAuth(this IdentityUIServicesBuilder builder, Action <CookieAuthenticationOptions> optionsAction)
        {
            builder.Services.ConfigureApplicationCookie(optionsAction);

            return(builder);
        }
示例#25
0
        /// <summary>
        /// Registers EmailSender
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder AddEmailSender(this IdentityUIServicesBuilder builder)
        {
            builder.Services.AddScoped <IEmailSender, Infrastructure.Services.EmailSender>();

            return(builder);
        }
示例#26
0
        public static IdentityUIServicesBuilder UseSqlServer(this IdentityUIServicesBuilder builder)
        {
            builder.UseSqlServer(builder.DatabaseOptions.ConnectionString);

            return(builder);
        }
示例#27
0
        /// <summary>
        /// Configures IdentityUI
        /// </summary>
        /// <param name="services"></param>
        /// <param name="configuration"></param>
        /// <param name="endpointAction"></param>
        /// <returns></returns>
        public static IdentityUIServicesBuilder ConfigureIdentityUI(this IServiceCollection services, IConfiguration configuration,
                                                                    Action <IdentityUIEndpoints> endpointAction)
        {
            IdentityUIOptions identityUIOptions = configuration.GetSection("IdentityUI").Get <IdentityUIOptions>();

            if (identityUIOptions == null)
            {
                identityUIOptions = new IdentityUIOptions();
            }

            services.Configure <IdentityUIOptions>(options =>
            {
                options.BasePath    = identityUIOptions.BasePath;
                options.Database    = identityUIOptions.Database;
                options.EmailSender = identityUIOptions.EmailSender;
            });

            services.Configure <DatabaseOptions>(options =>
            {
                options.Type             = identityUIOptions.Database?.Type ?? DatabaseTypes.InMemory;
                options.ConnectionString = identityUIOptions.Database?.ConnectionString;
            });

            services.Configure <EmailSenderOptions>(options =>
            {
                options.Ip         = identityUIOptions.EmailSender?.Ip;
                options.Port       = identityUIOptions.EmailSender?.Port ?? -1;
                options.UserName   = identityUIOptions.EmailSender?.UserName;
                options.Password   = identityUIOptions.EmailSender?.Password;
                options.SenderName = identityUIOptions.EmailSender?.SenderName;
            });

            IdentityUIEndpoints identityManagementEndpoints = new IdentityUIEndpoints();

            endpointAction?.Invoke(identityManagementEndpoints);

            if (!identityManagementEndpoints.UseEmailSender.HasValue)
            {
                if (identityUIOptions.EmailSender == null || string.IsNullOrEmpty(identityUIOptions.EmailSender.Ip))
                {
                    identityManagementEndpoints.UseEmailSender = false;
                }
                else
                {
                    identityManagementEndpoints.UseEmailSender = true;
                }
            }

            services.Configure <IdentityUIEndpoints>(options =>
            {
                options.Home = identityManagementEndpoints.Home;

                options.Login        = identityManagementEndpoints.Login;
                options.Logout       = identityManagementEndpoints.Logout;
                options.AccessDenied = identityManagementEndpoints.AccessDenied;

                options.Manage = identityManagementEndpoints.Manage;

                options.ConfirmeEmail = identityManagementEndpoints.ConfirmeEmail;
                options.ResetPassword = identityManagementEndpoints.ResetPassword;
                options.AcceptInvite  = identityManagementEndpoints.AcceptInvite;

                options.RegisterEnabled        = identityManagementEndpoints.RegisterEnabled;
                options.UseEmailSender         = identityManagementEndpoints.UseEmailSender;
                options.UseSmsGateway          = identityManagementEndpoints.UseSmsGateway;
                options.InviteValidForTimeSpan = identityManagementEndpoints.InviteValidForTimeSpan;
            });

            IdentityUIServicesBuilder builder = new IdentityUIServicesBuilder(services, identityManagementEndpoints);

            builder.Services.AddScoped <IEmailSender, NullEmailSender>();
            builder.Services.AddScoped <ISmsSender, NullSmsSender>();

            return(builder);
        }
示例#28
0
 private static void AddSeeders(this IdentityUIServicesBuilder builder)
 {
     builder.Services.AddScoped <SystemEntitySeeder>();
     builder.Services.AddScoped <AdminSeeder>();
     builder.Services.AddScoped <UserSeeder>();
 }