32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
from os import walk
|
|
from os.path import join, basename, splitext
|
|
from re import search
|
|
|
|
converters = {
|
|
'32_random_bytes_as_base64_for': lambda x: vault.random_bytes_as_base64_for(x, length=32),
|
|
'decrypt': lambda x: vault.decrypt(x),
|
|
'decrypt_file': lambda x: vault.decrypt_file(x),
|
|
'password_for': lambda x: vault.password_for(x),
|
|
}
|
|
|
|
def demagify(data):
|
|
if isinstance(data, str):
|
|
match = search(r'^\!([0-9a-zA-Z_-]{,255})\:(.*)$', data)
|
|
if match:
|
|
magicstring, content = match.groups()
|
|
return converters[magicstring](content).value
|
|
else:
|
|
return data
|
|
elif isinstance(data, dict):
|
|
return type(data)({key: demagify(value) for key, value in data.items()})
|
|
elif isinstance(data, (list, set, tuple)):
|
|
return type(data)([demagify(element) for element in data])
|
|
else:
|
|
return data
|
|
|
|
for root, dirs, files in walk(join(repo_path, "nodes")):
|
|
for filename in files:
|
|
if filename.endswith(".py"):
|
|
node = join(root, filename)
|
|
with open(node, 'r', encoding='utf-8') as f:
|
|
nodes[splitext(basename(filename))[0]] = demagify(eval(f.read()))
|