using System.Collections.Generic; using System.Collections.Immutable; using Abp; using Abp.Configuration; using Abp.Dependency; using Abp.Domain.Repositories; using Abp.Localization; using IwbZero.Authorization.Users; using IwbZero.BaseSysInfo; using IwbZero.Configuration; namespace IwbZero.Setting { /// /// Implements . /// public class IwbSettingDefinitionManager : IIwbSettingDefinitionManager, ISingletonDependency where TUser : IwbSysUser where TSet : IwbSysSetting { protected readonly IIocManager IocManager; private readonly IDictionary _settings; /// /// Constructor. /// public IwbSettingDefinitionManager(IIocManager iocManager //, ISettingsConfiguration settingsConfiguration ) { IocManager = iocManager; _settings = new Dictionary(); } public virtual void Initialize() { using (var settingRepository = IocManager.ResolveAsDisposable>()) { var settings = settingRepository.Object.GetAllList(a => a.IsDeleted == false); Initialize(settings); } } public void Initialize(List settings) { //using (var settingRepository = IocManager.ResolveAsDisposable>()) //{ // var settings = settingRepository.Object.GetAllList(a => a.IsDeleted == false); //} foreach (var s in settings) { var setting = new SettingDefinition(s.Code, s.Value, scopes: SettingScopes.Application | SettingScopes.Tenant | SettingScopes.User, isVisibleToClients: true); if (_settings.ContainsKey(s.Code)) _settings.Remove(s.Code); _settings[s.Code] = setting; } DefaultsSetting(); } public virtual void Referesh() { Initialize(); } public void ChangeSettingDefinition(string name, string value) { if (_settings.ContainsKey(name)) _settings.Remove(name); var setting = new SettingDefinition(name, value, scopes: SettingScopes.Application | SettingScopes.Tenant | SettingScopes.User, isVisibleToClients: true); _settings[name] = setting; } private void DefaultsSetting() { _settings[IwbAdminSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin] = new SettingDefinition( IwbAdminSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin, "false", new FixedLocalizableString("Is email confirmation required for login."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.OrganizationUnits.MaxUserMembershipCount] = new SettingDefinition( IwbAdminSettingNames.OrganizationUnits.MaxUserMembershipCount, int.MaxValue.ToString(), new FixedLocalizableString("Maximum allowed organization unit membership count for a user."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.UserManagement.TwoFactorLogin.IsEnabled] = new SettingDefinition( IwbAdminSettingNames.UserManagement.TwoFactorLogin.IsEnabled, "true", new FixedLocalizableString("Is two factor login enabled."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.UserManagement.TwoFactorLogin.IsRememberBrowserEnabled] = new SettingDefinition( IwbAdminSettingNames.UserManagement.TwoFactorLogin.IsRememberBrowserEnabled, "true", new FixedLocalizableString("Is browser remembering enabled for two factor login."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.UserManagement.TwoFactorLogin.IsEmailProviderEnabled] = new SettingDefinition( IwbAdminSettingNames.UserManagement.TwoFactorLogin.IsEmailProviderEnabled, "true", new FixedLocalizableString("Is email provider enabled for two factor login."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.UserManagement.TwoFactorLogin.IsSmsProviderEnabled] = new SettingDefinition( IwbAdminSettingNames.UserManagement.TwoFactorLogin.IsSmsProviderEnabled, "true", new FixedLocalizableString("Is sms provider enabled for two factor login."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.UserManagement.UserLockOut.IsEnabled] = new SettingDefinition( IwbAdminSettingNames.UserManagement.UserLockOut.IsEnabled, "true", new FixedLocalizableString("Is user lockout enabled."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.UserManagement.UserLockOut.MaxFailedAccessAttemptsBeforeLockout] = new SettingDefinition( IwbAdminSettingNames.UserManagement.UserLockOut.MaxFailedAccessAttemptsBeforeLockout, "5", new FixedLocalizableString("Maxumum Failed access attempt count before user lockout."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.UserManagement.UserLockOut.DefaultAccountLockoutSeconds] = new SettingDefinition( IwbAdminSettingNames.UserManagement.UserLockOut.DefaultAccountLockoutSeconds, "300", //5 minutes new FixedLocalizableString("User lockout in seconds."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.UserManagement.PasswordComplexity.RequireDigit] = new SettingDefinition( IwbAdminSettingNames.UserManagement.PasswordComplexity.RequireDigit, "false", new FixedLocalizableString("Require digit."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.UserManagement.PasswordComplexity.RequireLowercase] = new SettingDefinition( IwbAdminSettingNames.UserManagement.PasswordComplexity.RequireLowercase, "false", new FixedLocalizableString("Require lowercase."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.UserManagement.PasswordComplexity.RequireNonAlphanumeric] = new SettingDefinition( IwbAdminSettingNames.UserManagement.PasswordComplexity.RequireNonAlphanumeric, "false", new FixedLocalizableString("Require non alphanumeric."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.UserManagement.PasswordComplexity.RequireUppercase] = new SettingDefinition( IwbAdminSettingNames.UserManagement.PasswordComplexity.RequireUppercase, "false", new FixedLocalizableString("Require upper case."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); _settings[IwbAdminSettingNames.UserManagement.PasswordComplexity.RequiredLength] = new SettingDefinition( IwbAdminSettingNames.UserManagement.PasswordComplexity.RequiredLength, "3", new FixedLocalizableString("Required length."), scopes: SettingScopes.Application | SettingScopes.Tenant, clientVisibilityProvider: new VisibleSettingClientVisibilityProvider() ); } public SettingDefinition GetSettingDefinition(string name) { if (!_settings.TryGetValue(name, out var settingDefinition)) { throw new AbpException("There is no setting defined with name: " + name); } return settingDefinition; } public IReadOnlyList GetAllSettingDefinitions() { return _settings.Values.ToImmutableList(); } //private IDisposableDependencyObjectWrapper CreateProvider(Type providerType) //{ // return _iocManager.ResolveAsDisposable(providerType); //} } }