Example #1
0
        private string GetMemberConfigValue(ConfigurationMemberAttribute attrib, object value)
        {
            string valueString;

            if (value == null)
            {
                valueString = string.Empty;
            }
            else if (value is DateTime)
            {
                valueString = ((DateTime)value).ToString("s");
            }
            else
            {
                valueString = value.ToString();
            }

            if (!attrib.Encrypted)
            {
                return(valueString);
            }

            if (string.IsNullOrEmpty(attrib.KeyFile))
            {
                return(Encryption.EncryptConfigurationValue(valueString));
            }

            try {
                return(Encryption.EncryptConfigurationValue(valueString, attrib.KeyFile));
            } catch (Exception ex) {
                ErrorHandling.LogException(ex);
                return(Encryption.EncryptConfigurationValue(valueString));
            }
        }
Example #2
0
        public string GeConfigurationValue(string name)
        {
            foreach (MemberInfo member in GetType().GetMember(name, MemberTypes.Property | MemberTypes.Field, BindingFlags.Public | BindingFlags.Instance))
            {
                object value;
                switch (member.MemberType)
                {
                case MemberTypes.Field:
                    value = ((FieldInfo)member).GetValue(this);
                    break;

                case MemberTypes.Property:
                    PropertyInfo property = (PropertyInfo)member;
                    if (!property.CanRead)
                    {
                        continue;
                    }
                    value = property.GetValue(this, null);
                    break;

                default:
                    continue;     // not a property or field
                }

                ConfigurationMemberAttribute attrib = member.GetCustomAttributes(true).OfType <ConfigurationMemberAttribute> ().FirstOrDefault();
                if (attrib != null)
                {
                    return(GetMemberConfigValue(attrib, value));
                }
            }

            return(null);
        }
Example #3
0
        protected void SetSettings(object configHolder, bool saveToDb)
        {
            if (!exeConfig)
            {
                return;
            }

            bool saveConfigToDb = BusinessDomain.DataAccessProvider != null && saveToDb;

            foreach (MemberInfo member in configHolder.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance))
            {
                ConfigurationMemberAttribute attrib = member.GetCustomAttributes(true).OfType <ConfigurationMemberAttribute> ().FirstOrDefault();
                if (attrib == null)
                {
                    continue;
                }

                object value;
                switch (member.MemberType)
                {
                case MemberTypes.Field:
                    value = ((FieldInfo)member).GetValue(configHolder);
                    break;

                case MemberTypes.Property:
                    PropertyInfo property = (PropertyInfo)member;
                    if (!property.CanRead)
                    {
                        continue;
                    }
                    value = property.GetValue(configHolder, null);
                    break;

                default:
                    continue;     // not a property or field
                }

                string valueString = GetMemberConfigValue(attrib, value);
                SaveMember(member, valueString, saveConfigToDb, attrib.DbKey);
            }
        }
Example #4
0
        protected void Load(object configHolder, bool loadLocal)
        {
            bool saveNeeded       = false;
            bool loadConfigFromDb = BusinessDomain.DataAccessProvider != null;

            foreach (MemberInfo member in configHolder.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance))
            {
                // Get the data type and skip everything that is not a field or property
                Type memberType;
                switch (member.MemberType)
                {
                case MemberTypes.Field:
                    memberType = ((FieldInfo)member).FieldType;
                    break;

                case MemberTypes.Property:
                    PropertyInfo property = (PropertyInfo)member;
                    if (!property.CanWrite)
                    {
                        continue;
                    }
                    memberType = property.PropertyType;
                    break;

                default:
                    continue;     // Skip methods, events etc.
                }

                // Check if this is a configuration property and get the extended attributes
                ConfigurationMemberAttribute attrib = null;
                foreach (object customAttrib in member.GetCustomAttributes(true))
                {
                    attrib = customAttrib as ConfigurationMemberAttribute;
                    if (attrib != null)
                    {
                        break;
                    }
                }

                // If the field is not marked with the appropriate attribute or
                // only user-specific settings are required and it is not user-specific, skip it
                if (attrib == null)
                {
                    continue;
                }

                // The default value cannot be null
                if (attrib.DefaultValue == null)
                {
                    continue;
                }

                if (string.IsNullOrEmpty(attrib.DbKey) != loadLocal)
                {
                    continue;
                }

                string value = null;
                ConfigurationMemberAttribute saveToDbAttrib = null;
                if (string.IsNullOrEmpty(attrib.DbKey))
                {
                    if (!TryGetSetting(member.Name, out value))
                    {
                        saveNeeded = true;
                    }
                }
                else if (loadConfigFromDb)
                {
                    if (attrib.MigrateToDb && TryGetSetting(member.Name, out value))
                    {
                        DeleteSetting(member.Name);
                        saveNeeded = true;
                    }

                    ConfigEntry ent = ConfigEntry.GetByName(attrib.DbKey);
                    if (ent == null)
                    {
                        saveToDbAttrib = attrib;
                    }
                    else
                    {
                        value = ent.Value;
                    }
                }

                if (value == null)
                {
                    if (!customDefaults.TryGetValue(member.Name, out value))
                    {
                        value = attrib.DefaultValue;
                    }
                    attrib = null;
                }

                try {
                    // Set the property with the data from the configuration file
                    SetMember(configHolder, member, memberType, value, attrib);
                } catch {
                    // If the data is corrupted set the default value
                    SetMember(configHolder, member, memberType, value, null);
                }

                if (saveToDbAttrib != null)
                {
                    string valueString = GetMemberConfigValue(saveToDbAttrib, value);
                    SaveMember(member, valueString, true, saveToDbAttrib.DbKey);
                }
            }

            if (!saveNeeded)
            {
                return;
            }

            SetSettings(configHolder, false);
            SaveSettings();
        }
Example #5
0
        protected static void SetMember(object configHolder, MemberInfo member, Type type, string value, ConfigurationMemberAttribute attrib)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            if (attrib != null && attrib.Encrypted)
            {
                if (!string.IsNullOrEmpty(value))
                {
                    string keyFile = PlatformHelper.IsWindows ?
                                     attrib.KeyFile :
                                     (string.IsNullOrWhiteSpace(attrib.UnixKeyFile) ? attrib.KeyFile : attrib.UnixKeyFile);

                    if (string.IsNullOrEmpty(keyFile))
                    {
                        value = Encryption.DecryptConfigurationValue(value);
                    }
                    else
                    {
                        try {
                            value = Encryption.DecryptConfigurationValue(value, keyFile);
                        } catch (Exception ex) {
                            ErrorHandling.LogException(ex);
                            value = Encryption.DecryptConfigurationValue(value);
                        }
                    }
                }
            }

            string memberTypeName = type.Name.ToLowerInvariant();

            switch (memberTypeName)
            {
            case "string":
                SetMemberValue(configHolder, member, value);
                break;

            case "boolean":
                SetMemberValue(configHolder, member, Convert.ToBoolean(value));
                break;

            case "datetime":
                DateTime dateTime;
                try {
                    dateTime = Convert.ToDateTime(value);
                } catch (FormatException) {
                    dateTime = DateTime.MinValue;
                }

                SetMemberValue(configHolder, member, dateTime);
                break;

            case "decimal":
                SetMemberValue(configHolder, member, Convert.ToDecimal(value));
                break;

            case "single":
                SetMemberValue(configHolder, member, Convert.ToSingle(value));
                break;

            case "double":
                SetMemberValue(configHolder, member, Convert.ToDouble(value));
                break;

            default:
                if (memberTypeName.StartsWith("int32"))
                {
                    SetMemberValue(configHolder, member, Convert.ToInt32(value));
                }
                else if (memberTypeName.StartsWith("int"))
                {
                    SetMemberValue(configHolder, member, Convert.ToInt64(value));
                }
                else if (type.IsEnum)
                {
                    SetMemberValue(configHolder, member, Enum.Parse(type, value));
                }
                break;
            }
        }