|
|
|
@ -80,6 +80,45 @@ def base36decode(number):
|
|
|
|
|
return int(number, 36)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def obfuscate_list(user, data):
|
|
|
|
|
"""
|
|
|
|
|
Obfuscate data in a list of dictionaries.
|
|
|
|
|
"""
|
|
|
|
|
if user.has_perm("core.bypass_obfuscation"):
|
|
|
|
|
return
|
|
|
|
|
for index, item in enumerate(data):
|
|
|
|
|
for key, value in item.items():
|
|
|
|
|
# Obfuscate a ratio of the field
|
|
|
|
|
if key in settings.OBFUSCATE_FIELDS:
|
|
|
|
|
length = len(value) - 1
|
|
|
|
|
split = int(length * settings.OBFUSCATE_KEEP_RATIO)
|
|
|
|
|
first_part = value[:split]
|
|
|
|
|
second_part = value[split:]
|
|
|
|
|
second_len = len(second_part)
|
|
|
|
|
second_part = "*" * second_len
|
|
|
|
|
data[index][key] = first_part + second_part
|
|
|
|
|
# Obfuscate value based on fields
|
|
|
|
|
# Example: 2022-02-02 -> 2022-02-**
|
|
|
|
|
# 14:11:12 -> 14:11:**
|
|
|
|
|
elif key in settings.OBFUSCATE_FIELDS_SEP:
|
|
|
|
|
if "-" in value:
|
|
|
|
|
sep = "-"
|
|
|
|
|
value_spl = value.split("-")
|
|
|
|
|
hide_num = settings.OBFUSCATE_DASH_NUM
|
|
|
|
|
elif ":" in value:
|
|
|
|
|
sep = ":"
|
|
|
|
|
value_spl = value.split(":")
|
|
|
|
|
hide_num = settings.OBFUSCATE_COLON_NUM
|
|
|
|
|
|
|
|
|
|
first_part = value_spl[:hide_num]
|
|
|
|
|
second_part = value_spl[hide_num:]
|
|
|
|
|
for index_x, x in enumerate(second_part):
|
|
|
|
|
x_len = len(x)
|
|
|
|
|
second_part[index_x] = "*" * x_len
|
|
|
|
|
result = sep.join([*first_part, *second_part])
|
|
|
|
|
data[index][key] = result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def hash_list(user, data, hash_keys=False):
|
|
|
|
|
"""
|
|
|
|
|
Hash a list of dicts or a list with SipHash42.
|
|
|
|
|