NDCT/ndct/cli/crypt.py

37 lines
986 B
Python
Raw Normal View History

2024-06-09 19:22:26 +01:00
import click
import json
from ast import literal_eval
from cryptography.fernet import Fernet
from ndct.core.crypt import Crypt
from ndct.core.log import log
from ndct.core.paths import DB_PATH
@click.command(short_help = 'Decrypt a file')
@click.option('-f', '--filename', type = click.Choice(['devices', 'deployments']), help = 'Filename', required = True)
def decrypt(filename):
'''
Summary:
Create a decrypted copy of a file in JSON format.
Takes:
filename: Name of decrypted file
'''
key = Crypt.get_key()
with open(DB_PATH + filename, 'rb') as encrypted_file:
data = encrypted_file.read()
fernet = Fernet(key)
decrypted_data = literal_eval(fernet.decrypt(data).decode())
with open(DB_PATH + filename + '.decrypted', 'w') as decrypted_file:
json.dump(decrypted_data, decrypted_file, indent=4)
log('Generated decrypted file {}.decrypted'.format(filename), 'info')
@click.group(short_help = 'Crypt commands')
def crypt():
pass
crypt.add_command(decrypt)