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()
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)
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)
def masked_value(self): data = pickle_deepcopy(self.as_dict) masking(data, self.masking_fields) return json.dumps(data, ensure_ascii=False)