def masked_value(self):
     data = pickle_deepcopy(self.as_dict)
     masking(data, self.masking_fields)
     if self.command.loader == "json.dumps":
         return json.dumps(data, ensure_ascii=False)
     elif self.command.loader == "protobuf":
         protobuf_message = self.as_protobuf_message(data)
         return protobuf_message.SerializeToString()
Пример #2
0
 def _set_value(self, value):
     self._value = value
     dict_value = {self.description.name: copy.deepcopy(value)}
     masking(dict_value, self._masking_fields)
     message = "%(class_name)s: %(description_id)s filled by value: %(field_value)s"
     params = {
         log_const.KEY_NAME: log_const.FILLER_RESULT_VALUE,
         "class_name": self.__class__.__name__,
         "description_id": self.description.id,
         "field_value": str(dict_value[self.description.name])
     }
     log(message, None, params)
Пример #3
0
 def make_message(cls,
                  user=None,
                  params=None,
                  cls_name='',
                  log_store_for=0):
     params = params or {}
     if user:
         cls.update_user_params(user, params)
     params = pickle_deepcopy(params)
     masking(params)
     cls.update_other_params(user, params, cls_name, log_store_for)
     return params
    def test_depth(self):
        # вложенность любой длины не маскируется пока не встретим ключ для маскировки
        masking_fields = ['spec_token']
        depth_level = 0
        input_msg = {'a': {'b': {'c': 1, 'spec_token': '123456'}}}
        expected = {'a': {'b': {'c': 1, 'spec_token': '***'}}}
        masking(input_msg, masking_fields, depth_level)
        self.assertEqual(expected, input_msg)

        # проверка вложенной маскировки
        input_ = {'spec_token': [12, 12, {'key': [12, 12]}]}

        depth_level = 3
        expected = {'spec_token': ['***', '***', {'key': ['***', '***']}]}
        input_msg = copy.deepcopy(input_)
        masking(input_msg, masking_fields, depth_level)
        self.assertEqual(expected, input_msg)

        depth_level = 2
        expected = {
            'spec_token':
            ['***', '***', {
                'key': '*items-2*collections-0*maxdepth-1*'
            }]
        }
        input_msg = copy.deepcopy(input_)
        masking(input_msg, masking_fields, depth_level)
        self.assertEqual(expected, input_msg)

        depth_level = 1
        expected = {
            'spec_token': ['***', '***', '*items-2*collections-1*maxdepth-2*']
        }
        input_msg = copy.deepcopy(input_)
        masking(input_msg, masking_fields, depth_level)
        self.assertEqual(expected, input_msg)

        depth_level = 0
        expected = {'spec_token': '*items-4*collections-2*maxdepth-3*'}
        input_msg = copy.deepcopy(input_)
        masking(input_msg, masking_fields, depth_level)
        self.assertEqual(expected, input_msg)
    def test_masking(self):
        masking_fields = {'spec_token': 2}
        input_msg = {"spec_token": '123456'}
        expected = {"spec_token": '***'}
        masking(input_msg, masking_fields)
        self.assertEqual(expected, input_msg)

        # все простые типы маскируются как '***'
        input_msg = {"spec_token": {'int': 123, 'str': 'str', 'bool': True}}
        expected = {"spec_token": {'int': '***', 'str': '***', 'bool': '***'}}
        masking(input_msg, masking_fields)
        self.assertEqual(expected, input_msg)

        # если маскируемое поле окажется внутри банковского поля - то оно маскируется с заданной вложеностью
        input_msg = {
            'message': {
                'spec_token': ['12', ['12', {
                    'data': {
                        'key': '12'
                    }
                }]]
            }
        }
        expected = {
            'message': {
                'spec_token':
                ['***', ['***', '*items-1*collections-1*maxdepth-2*']]
            }
        }
        masking(input_msg, masking_fields)
        self.assertEqual(expected, input_msg)
    def test_check_set_components(self):
        input_message = {"set": {12, 13, 14}}
        expected = {"set": [12, 13, 14]}
        masking(input_message)
        self.assertEqual(expected, input_message)

        input_message = {"token": {12, 13, 14}}
        expected = {"token": "*items-3*collections-0*maxdepth-1*"}
        masking(input_message)
        self.assertEqual(expected, input_message)

        input_message = {"masked": {12, 13, 14}}
        expected = {"masked": ["***", "***", "***"]}
        masking(input_message, masking_fields={"masked": 2})
        self.assertEqual(expected, input_message)
    def test_bank_card(self):
        # 'message' in CARD_MASKING_FIELDS
        input_msg = {"message": "Слово до 1234567890123456"}
        expected = {"message": "Слово до ************3456"}
        masking(input_msg)
        self.assertEqual(expected, input_msg)

        input_msg = {"message": "Слово до 1234567890123456 и после"}
        expected = {"message": "Слово до ************3456 и после"}
        masking(input_msg)
        self.assertEqual(expected, input_msg)

        input_msg = {"message": "Склеено1234567890123456"}
        expected = {"message": "Склеено************3456"}
        masking(input_msg)
        self.assertEqual(expected, input_msg)

        # если это поле входит в банковские, но не проходит по регулярке - то не маскируем
        input_msg = {"message": "1234"}
        expected = {"message": "1234"}
        masking(input_msg)
        self.assertEqual(expected, input_msg)

        # маскировка так же применится к банковскому полю внутри коллекции
        input_msg = {'message': {'card': '1234567890123456'}}
        expected = {'message': {'card': '************3456'}}
        masking(input_msg, masking_fields=['token'])
        self.assertEqual(expected, input_msg)

        # если это не баковское поле - то не маскируем
        input_msg = {'here_no_cards': {'no_card': '1234567890123456'}}
        expected = {'here_no_cards': {'no_card': '1234567890123456'}}
        masking(input_msg)
        self.assertEqual(expected, input_msg)

        # проверки на целочисленный тип значений
        input_msg = {'message': 1234567890123456}
        expected = {'message': '************3456'}
        masking(input_msg)
        self.assertEqual(expected, input_msg)

        input_msg = {'message': {'card': 1234567890123456}}
        expected = {'message': {'card': '************3456'}}
        masking(input_msg)
        self.assertEqual(expected, input_msg)

        input_msg = {'message': 1234}
        expected = {'message': 1234}
        masking(input_msg)
        self.assertEqual(expected, input_msg)
Пример #8
0
 def masked_value(self):
     data = pickle_deepcopy(self.as_dict)
     masking(data, self.masking_fields)
     return json.dumps(data, ensure_ascii=False)