43 lines
1.1 KiB
Text
43 lines
1.1 KiB
Text
|
#!/usr/bin/env python3
|
||
|
from os import environ
|
||
|
from os.path import abspath, isfile, join, relpath
|
||
|
from sys import argv
|
||
|
|
||
|
from bundlewrap.repo import Repository
|
||
|
|
||
|
|
||
|
path = environ.get('BW_REPO_PATH', '.')
|
||
|
repo = Repository(path)
|
||
|
|
||
|
if len(argv) < 3:
|
||
|
print('Usage: {} <source> <target> [encryption key, default \'encrypt\']'.format(argv[0]))
|
||
|
exit(1)
|
||
|
|
||
|
target = abspath(argv[2])
|
||
|
datapath = join(abspath(path), 'data')
|
||
|
|
||
|
if not isfile(argv[1]):
|
||
|
print('ERROR: Source file \'{}\' does not exist.'.format(argv[1]))
|
||
|
exit(1)
|
||
|
|
||
|
if not target.endswith('.vault'):
|
||
|
print('ERROR: Target file \'{}\' does not end in .vault'.format(argv[2]))
|
||
|
exit(1)
|
||
|
elif not target.startswith(datapath):
|
||
|
print('ERROR: Target file \'{}\' is not in BW_REPO_PATH/data/'.format(argv[2]))
|
||
|
exit(1)
|
||
|
|
||
|
if isfile(target):
|
||
|
if input('ERROR: Target file \'{}\' already exists, overwrite? [yN]'.format(argv[2])) not in ['y', 'Y']:
|
||
|
print('Abort')
|
||
|
exit(2)
|
||
|
|
||
|
if len(argv) > 3:
|
||
|
key = argv[3]
|
||
|
else:
|
||
|
key = 'encrypt'
|
||
|
|
||
|
repo.vault.encrypt_file(argv[1], relpath(target, start=datapath), key)
|
||
|
|
||
|
print('encryption successful')
|