37 lines
986 B
Python
37 lines
986 B
Python
|
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)
|