Beispiel #1
0
        protected virtual async Task <ListResultDto <SettingDto> > GetAllSettingAsync(string providerName, string providerKey)
        {
            var settingsDto = new List <SettingDto>();

            var settings = await SettingManager.GetAllAsync(providerName, providerKey);

            foreach (var setting in settings)
            {
                var settingDefinition = SettingDefinitionManager.Get(setting.Name);
                if (settingDefinition.Providers.Count > 0 &&
                    !settingDefinition.Providers.Any(p => p.Equals(providerName)))
                {
                    continue;
                }
                var settingInfo = new SettingDto
                {
                    Name         = setting.Name,
                    Value        = setting.Value ?? settingDefinition.DefaultValue,
                    DefaultValue = settingDefinition.DefaultValue,
                    Description  = settingDefinition.Description.Localize(StringLocalizerFactory),
                    DisplayName  = settingDefinition.DisplayName.Localize(StringLocalizerFactory)
                };
                settingsDto.Add(settingInfo);
            }

            return(new ListResultDto <SettingDto>(settingsDto));
        }
Beispiel #2
0
        protected virtual ListResultDto <SettingDto> GetAllSetting(
            List <SettingValue> settings)
        {
            var settingsDto = new List <SettingDto>();

            foreach (var setting in settings)
            {
                var settingDefinition = SettingDefinitionManager.Get(setting.Name);

                if (!settingDefinition.IsVisibleToClients)
                {
                    continue;
                }
                var settingInfo = new SettingDto
                {
                    Name         = setting.Name,
                    Value        = setting.Value,
                    DefaultValue = settingDefinition.DefaultValue,
                    Description  = settingDefinition.Description.Localize(StringLocalizerFactory),
                    DisplayName  = settingDefinition.DisplayName.Localize(StringLocalizerFactory)
                };
                settingsDto.Add(settingInfo);
            }
            return(new ListResultDto <SettingDto>(settingsDto));
        }
Beispiel #3
0
        public virtual async Task SetAsync(string name, string value, string providerName, string providerKey, bool forceToSet = false)
        {
            Check.NotNull(name, nameof(name));
            Check.NotNull(providerName, nameof(providerName));

            var setting = SettingDefinitionManager.Get(name);

            var providers = Enumerable
                            .Reverse(Providers)
                            .SkipWhile(p => p.Name != providerName)
                            .ToList();

            if (!providers.Any())
            {
                return;
            }

            if (setting.IsEncrypted)
            {
                value = SettingEncryptionService.Encrypt(setting, value);
            }

            if (providers.Count > 1 && !forceToSet && setting.IsInherited && value != null)
            {
                var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, null).ConfigureAwait(false);

                if (fallbackValue == value)
                {
                    //Clear the value if it's same as it's fallback value
                    value = null;
                }
            }

            providers = providers
                        .TakeWhile(p => p.Name == providerName)
                        .ToList(); //Getting list for case of there are more than one provider with same providerName

            if (value == null)
            {
                foreach (var provider in providers)
                {
                    await provider.ClearAsync(setting, providerKey).ConfigureAwait(false);
                }
            }
            else
            {
                foreach (var provider in providers)
                {
                    await provider.SetAsync(setting, value, providerKey).ConfigureAwait(false);
                }
            }
        }
Beispiel #4
0
    public virtual async Task <string> GetOrNullAsync(string name)
    {
        var setting   = SettingDefinitionManager.Get(name);
        var providers = Enumerable
                        .Reverse(SettingValueProviderManager.Providers);

        if (setting.Providers.Any())
        {
            providers = providers.Where(p => setting.Providers.Contains(p.Name));
        }

        //TODO: How to implement setting.IsInherited?

        var value = await GetOrNullValueFromProvidersAsync(providers, setting);

        if (value != null && setting.IsEncrypted)
        {
            value = SettingEncryptionService.Decrypt(setting, value);
        }

        return(value);
    }
Beispiel #5
0
        protected virtual async Task <string> GetOrNullInternalAsync(string name, string providerName, string providerKey, bool fallback = true)
        {
            var setting   = SettingDefinitionManager.Get(name);
            var providers = Enumerable
                            .Reverse(Providers);

            if (providerName != null)
            {
                providers = providers.SkipWhile(c => c.Name != providerName);
            }

            if (!fallback || !setting.IsInherited)
            {
                providers = providers.TakeWhile(c => c.Name == providerName);
            }

            string value = null;

            foreach (var provider in providers)
            {
                value = await provider.GetOrNullAsync(
                    setting,
                    provider.Name == providerName?providerKey : null
                    ).ConfigureAwait(false);

                if (value != null)
                {
                    break;
                }
            }

            if (setting.IsEncrypted)
            {
                value = SettingEncryptionService.Decrypt(setting, value);
            }

            return(value);
        }
Beispiel #6
0
        protected virtual async Task <ListResultDto <SettingGroupDto> > GetAllForProviderAsync(string providerName, string providerKey)
        {
            /*
             * 2020-11-19
             * [email protected]
             *
             * 之所以重构为这种看似硬编码的设计,是因为硬编码的都是常用的自带的配置
             *
             * 自定义的应用模块可以实现返回相同Dto的配置服务,然后通过路由的聚合功能,
             * 轻松加入到前端的设置管理(因为vue前端已设计为动态表单页面)
             *
             * 最初的设计才是不合理的,前端不能硬编码设置管理界面,这应该是后端的事情
             */

            var settingGroups = new List <SettingGroupDto>();

            #region 系统设置

            var sysSettingGroup = new SettingGroupDto(L["DisplayName:System"], L["Description:System"]);
            // 语言
            var languageSetting = sysSettingGroup.AddSetting(L["DisplayName:System.Language"], L["Description:System.Language"]);
            languageSetting.AddDetail(
                SettingDefinitionManager.Get(LocalizationSettingNames.DefaultLanguage),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage, providerName, providerKey),
                ValueType.Option)
            .AddOptions(LocalizationOptions.Languages.Select(l => new OptionDto(l.DisplayName, l.CultureName)));
            // 时区
            var timingSetting = sysSettingGroup.AddSetting(L["DisplayName:System.Timing"], L["Description:System.Timing"]);
            timingSetting.AddDetail(
                SettingDefinitionManager.Get(TimingSettingNames.TimeZone),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(TimingSettingNames.TimeZone, providerName, providerKey),
                ValueType.String);
            settingGroups.Add(sysSettingGroup);

            #endregion

            #region 安全设置

            var securitySettingGroup = new SettingGroupDto(L["DisplayName:Security"], L["Description:Security"]);

            // 用户账户
            var accountSetting = securitySettingGroup.AddSetting(L["DisplayName:Security.Account"], L["Description:Security.Account"]);
            // 启用本地登录
            accountSetting.AddDetail(
                SettingDefinitionManager.Get(AccountSettingNames.EnableLocalLogin),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(AccountSettingNames.EnableLocalLogin, providerName, providerKey),
                ValueType.Boolean);
            accountSetting.AddDetail(
                SettingDefinitionManager.Get(AccountSettingNames.IsSelfRegistrationEnabled),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(AccountSettingNames.IsSelfRegistrationEnabled, providerName, providerKey),
                ValueType.Boolean);

            settingGroups.Add(securitySettingGroup);

            #endregion

            #region 身份标识设置

            // 身份标识设置
            var identitySetting = new SettingGroupDto(L["DisplayName:Identity"], L["Description:Identity"]);

            #region 用户锁定

            var lockoutSetting = identitySetting.AddSetting(L["DisplayName:Identity.Lockout"], L["Description:Identity.Lockout"]);
            lockoutSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.Lockout.AllowedForNewUsers),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.AllowedForNewUsers, providerName, providerKey),
                ValueType.Boolean);
            lockoutSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.Lockout.LockoutDuration),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.LockoutDuration, providerName, providerKey),
                ValueType.Number);
            lockoutSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.Lockout.MaxFailedAccessAttempts),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, providerName, providerKey),
                ValueType.Number);

            #endregion

            #region 用户

            var userSetting = identitySetting.AddSetting(L["DisplayName:Identity.User"], L["Description:Identity.User"]);
            userSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.User.IsEmailUpdateEnabled),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsEmailUpdateEnabled, providerName, providerKey),
                ValueType.Boolean);
            userSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.User.IsUserNameUpdateEnabled),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsUserNameUpdateEnabled, providerName, providerKey),
                ValueType.Boolean);
            userSetting.AddDetail(
                SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsNewUserRegister),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsNewUserRegister, providerName, providerKey),
                ValueType.String);
            userSetting.AddDetail(
                SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsResetPassword),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsResetPassword, providerName, providerKey),
                ValueType.String);
            userSetting.AddDetail(
                SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsUserSignin),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsUserSignin, providerName, providerKey),
                ValueType.String);
            userSetting.AddDetail(
                SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsPhoneNumberConfirmed),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsPhoneNumberConfirmed, providerName, providerKey),
                ValueType.String);
            userSetting.AddDetail(
                SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsRepetInterval),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsRepetInterval, providerName, providerKey),
                ValueType.Number);

            #endregion

            #region 登录

            var signinSetting = identitySetting.AddSetting(L["DisplayName:Identity.SignIn"], L["Description:Identity.SignIn"]);
            signinSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation, providerName, providerKey),
                ValueType.Boolean);
            signinSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedEmail),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedEmail, providerName, providerKey),
                ValueType.Boolean);
            signinSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, providerName, providerKey),
                ValueType.Boolean);

            #endregion

            #region 密码

            var passwordSetting = identitySetting.AddSetting(L["DisplayName:Identity.Password"], L["Description:Identity.Password"]);
            passwordSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireDigit),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireDigit, providerName, providerKey),
                ValueType.Boolean);
            passwordSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredLength),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredLength, providerName, providerKey),
                ValueType.Number);
            passwordSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredUniqueChars),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredUniqueChars, providerName, providerKey),
                ValueType.Number);
            passwordSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireLowercase),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireLowercase, providerName, providerKey),
                ValueType.Boolean);
            passwordSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireUppercase),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireUppercase, providerName, providerKey),
                ValueType.Boolean);
            passwordSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireNonAlphanumeric),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireNonAlphanumeric, providerName, providerKey),
                ValueType.Boolean);

            #endregion

            #region 双因素

            var twoFactorSetting = identitySetting.AddSetting(L["DisplayName:Identity.TwoFactor"], L["Description:Identity.TwoFactor"]);
            twoFactorSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.TwoFactor.Behaviour),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.TwoFactor.Behaviour, providerName, providerKey),
                ValueType.Option)
            .AddOption(IdentityTwoFactorBehaviour.Optional.ToString(), IdentityTwoFactorBehaviour.Optional.ToString())
            .AddOption(IdentityTwoFactorBehaviour.Forced.ToString(), IdentityTwoFactorBehaviour.Forced.ToString())
            .AddOption(IdentityTwoFactorBehaviour.Disabled.ToString(), IdentityTwoFactorBehaviour.Disabled.ToString());
            twoFactorSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.TwoFactor.UsersCanChange),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.TwoFactor.UsersCanChange, providerName, providerKey),
                ValueType.Boolean);

            #endregion

            #region 组织机构

            var ouSetting = identitySetting.AddSetting(L["DisplayName:Identity.OrganizationUnit"], L["Description:Identity.OrganizationUnit"]);
            ouSetting.AddDetail(
                SettingDefinitionManager.Get(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount, providerName, providerKey),
                ValueType.Number);

            settingGroups.Add(identitySetting);

            #endregion

            #endregion

            #region 邮件设置

            var emailSettingGroup  = new SettingGroupDto(L["DisplayName:Emailing"], L["Description:Emailing"]);
            var defaultMailSetting = emailSettingGroup.AddSetting(L["DisplayName:Emailing.Default"], L["Description:Emailing.Default"]);
            defaultMailSetting.AddDetail(
                SettingDefinitionManager.Get(EmailSettingNames.DefaultFromAddress),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromAddress, providerName, providerKey),
                ValueType.String);
            defaultMailSetting.AddDetail(
                SettingDefinitionManager.Get(EmailSettingNames.DefaultFromDisplayName),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromDisplayName, providerName, providerKey),
                ValueType.String);

            var smtpSetting = emailSettingGroup.AddSetting(L["DisplayName:Emailing.Smtp"], L["Description:Emailing.Smtp"]);
            smtpSetting.AddDetail(
                SettingDefinitionManager.Get(EmailSettingNames.Smtp.EnableSsl),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.EnableSsl, providerName, providerKey),
                ValueType.Boolean);
            smtpSetting.AddDetail(
                SettingDefinitionManager.Get(EmailSettingNames.Smtp.UseDefaultCredentials),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UseDefaultCredentials, providerName, providerKey),
                ValueType.Boolean);
            smtpSetting.AddDetail(
                SettingDefinitionManager.Get(EmailSettingNames.Smtp.Domain),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Domain, providerName, providerKey),
                ValueType.String);
            smtpSetting.AddDetail(
                SettingDefinitionManager.Get(EmailSettingNames.Smtp.Host),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Host, providerName, providerKey),
                ValueType.String);
            smtpSetting.AddDetail(
                SettingDefinitionManager.Get(EmailSettingNames.Smtp.Port),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Port, providerName, providerKey),
                ValueType.Number);
            smtpSetting.AddDetail(
                SettingDefinitionManager.Get(EmailSettingNames.Smtp.UserName),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UserName, providerName, providerKey),
                ValueType.String);
            smtpSetting.AddDetail(
                SettingDefinitionManager.Get(EmailSettingNames.Smtp.Password),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Password, providerName, providerKey),
                ValueType.String);

            settingGroups.Add(emailSettingGroup);

            #endregion

            #region 文件设置

            var fileSettingGroup  = new SettingGroupDto(L["DisplayName:FileManagement"], L["Description:FileManagement"]);
            var fileSystemSetting = fileSettingGroup.AddSetting(L["DisplayName:FileManagement.FileSystem"], L["Description:FileManagement.FileSystem"]);
            fileSystemSetting.AddDetail(
                SettingDefinitionManager.Get(AbpFileManagementSettingNames.FileLimitLength),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(AbpFileManagementSettingNames.FileLimitLength, providerName, providerKey),
                ValueType.Number);
            fileSystemSetting.AddDetail(
                SettingDefinitionManager.Get(AbpFileManagementSettingNames.AllowFileExtensions),
                StringLocalizerFactory,
                await SettingManager.GetOrNullAsync(AbpFileManagementSettingNames.AllowFileExtensions, providerName, providerKey),
                ValueType.String);

            settingGroups.Add(fileSettingGroup);

            #endregion

            return(new ListResultDto <SettingGroupDto>(settingGroups));
        }