Ejemplo n.º 1
0
        public void Get(object parent, List <RawKey> result, bool isEncrypt, DataEntitySplitJointHelper.GenCustomKeyType genCustomKeyType)
        {
            //如果是加密,则类型必须是明文
            if (isEncrypt && !SensitiveFieldDataTypeEnum.PLAINTEXT.Equals(attribute.DataType))
            {
                return;
            }

            //如果是解密,则类型必须是密文
            if (!isEncrypt && !SensitiveFieldDataTypeEnum.CIPHER.Equals(attribute.DataType))
            {
                return;
            }

            var fieldVal = getter(parent);

            if (string.IsNullOrWhiteSpace(fieldVal))
            {
                return;
            }

            if (!GetKeyType(parent, genCustomKeyType, out var keyType))
            {
                return;
            }

            result.Add(new RawKey {
                Key = fieldVal, Type = keyType
            });
        }
Ejemplo n.º 2
0
 private bool GetKeyType(object parent, DataEntitySplitJointHelper.GenCustomKeyType genCustomKeyType, out KeyType keyType)
 {
     keyType = attribute.SecurityKeyType;
     if (attribute.NeedGenCustomKeyType)
     {
         keyType = genCustomKeyType(parent, fieldName);
     }
     return(!default(KeyType).Equals(keyType));
 }
Ejemplo n.º 3
0
        private void Copy(object parent, DataEntitySplitJointHelper.GenCustomKeyType genCustomKeyType)
        {
            if (relativeSetter == null)
            {
                return;
            }
            var fieldVal = getter(parent);

            relativeSetter(parent, fieldVal);
        }
Ejemplo n.º 4
0
        public void Get(object parent, List <RawKey> result, bool isEncrypt, DataEntitySplitJointHelper.GenCustomKeyType genCustomKeyType)
        {
            var meValue = meExpr == null ? parent : meExpr(parent);

            if (meValue == null)
            {
                return;
            }
            for (int i = 0; i < children.Count; ++i)
            {
                children[i].Get(meValue, result, isEncrypt, genCustomKeyType);
            }
        }
Ejemplo n.º 5
0
        public void Get(object parent, List <RawKey> result, bool isEncrypt, DataEntitySplitJointHelper.GenCustomKeyType genCustomKeyType)
        {
            if (child == null)
            {
                return;
            }
            int len = lenFunc(parent);

            for (int i = 0; i < len; ++i)
            {
                var elem = accessFunc(parent, i);
                if (elem == null)
                {
                    continue;
                }
                child.Get(elem, result, isEncrypt, genCustomKeyType);
            }
        }
Ejemplo n.º 6
0
        internal static List <RawKey> Get <T>(List <T> input, bool isEncrypt, DataEntitySplitJointHelper.GenCustomKeyType genCustomKeyType, out Expr expr)
        {
            expr = Expressions.GetFor(typeof(T));
            List <RawKey> oneResult = new List <RawKey>();

            if (input.Count == 1)
            {
                expr.Get(input[0], oneResult, isEncrypt, genCustomKeyType);
                return(oneResult);
            }

            //取出一个,然后算出一个list的大小来,避免List多次扩容
            expr.Get(input[0], oneResult, isEncrypt, genCustomKeyType);
            List <RawKey> result = new List <RawKey>(input.Count * oneResult.Count);

            result.AddRange(oneResult);
            for (int i = 1; i < input.Count; ++i)
            {
                expr.Get(input[i], result, isEncrypt, genCustomKeyType);
            }
            return(result);
        }
Ejemplo n.º 7
0
        public void Set(object parent, IDictionary <KeyType, IDictionary <string, string> > processedData, bool isEncrypt, DataEntitySplitJointHelper.GenCustomKeyType genCustomKeyType)
        {
            if (isEncrypt && processedData == null)
            {
                Copy(parent, genCustomKeyType);
                return;
            }

            //如果是加密,并且字段是明文
            if (isEncrypt && SensitiveFieldDataTypeEnum.PLAINTEXT.Equals(attribute.DataType))
            {
                if (!GetKeyType(parent, genCustomKeyType, out var keyType))
                {
                    return;
                }

                string resultVal = null;
                var    fieldVal  = getter(parent);
                if (string.IsNullOrWhiteSpace(fieldVal))
                {
                    return;
                }

                if (processedData != null)
                {
                    processedData.TryGetValue(keyType, out var map);
                    if (map != null)
                    {
                        map.TryGetValue(fieldVal, out resultVal);
                    }
                }
                if (resultVal != null)
                {
                    setter(parent, resultVal);
                }
            }

            //如果是解密,并且字段是密文
            if (!isEncrypt && SensitiveFieldDataTypeEnum.CIPHER.Equals(attribute.DataType))
            {
                if (relativeSetter == null)
                {
                    return;
                }

                if (!GetKeyType(parent, genCustomKeyType, out var keyType))
                {
                    return;
                }

                var resultVal = GetResultVal(parent, processedData, keyType);
                relativeSetter(parent, resultVal);
            }
        }
Ejemplo n.º 8
0
        public void Set(object parent, IDictionary <KeyType, IDictionary <string, string> > data, bool isEncrypt, DataEntitySplitJointHelper.GenCustomKeyType genCustomKeyType)
        {
            var meValue = meExpr == null ? parent : meExpr(parent);

            if (meValue == null)
            {
                return;
            }
            for (int i = 0; i < children.Count; ++i)
            {
                children[i].Set(meValue, data, isEncrypt, genCustomKeyType);
            }
        }
Ejemplo n.º 9
0
        public void Set(object parent, IDictionary <KeyType, IDictionary <string, string> > data, bool isEncrypt, DataEntitySplitJointHelper.GenCustomKeyType genCustomKeyType)
        {
            if (child == null)
            {
                return;
            }
            int len = lenFunc(parent);

            for (int i = 0; i < len; ++i)
            {
                var elem = accessFunc(parent, i);
                if (elem == null)
                {
                    continue;
                }
                child.Set(elem, data, isEncrypt, genCustomKeyType);
            }
        }