Implement obfuscation
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user