mirror of
https://github.com/rwinkhart/sshyp.git
synced 2026-09-03 23:57:17 -04:00
Added an entry re-encryption/optimization option to the tweak menu
Former-commit-id: f868668a456300bcd46fd75381485a4fa75bcbbb Former-commit-id: 4b812719f0d7cd17c8cc0c7f62903dba809f8a92
This commit is contained in:
+56
-1
@@ -230,6 +230,52 @@ def quick_unlock_config(_default):
|
|||||||
return _enabled
|
return _enabled
|
||||||
|
|
||||||
|
|
||||||
|
# re-encrypt/optimize all entries
|
||||||
|
def refresh_encryption():
|
||||||
|
_directory, _tmp_dir = sshyp_data.get('SSHYNC', 'local_dir').rstrip('/'), f"{home}/.config/sshyp/tmp/"
|
||||||
|
|
||||||
|
# warn the user of potential data loss and prompt to continue
|
||||||
|
_proceed = curses_radio(('yes', 'no'), "are you sure you wish to re-encrypt all entries with this key?"
|
||||||
|
"\n\n\n\n\nWARNING: proceeding with this action will remove/overwrite"
|
||||||
|
" any directories matching the following:"
|
||||||
|
f"\n\n{home}/.local/share/sshyp.old\n{home}/.local/share/sshyp.new\n\n")
|
||||||
|
if _proceed != 0:
|
||||||
|
return 3
|
||||||
|
|
||||||
|
# set new gpg key
|
||||||
|
gpg_config()
|
||||||
|
|
||||||
|
from os import walk
|
||||||
|
from os.path import isdir
|
||||||
|
from shutil import move, rmtree
|
||||||
|
from sshyp import decrypt, encrypt, optimized_edit, shm_gen
|
||||||
|
|
||||||
|
# remove existing conflicts
|
||||||
|
for _extension in ('.new', '.old'):
|
||||||
|
if exists(f"{_directory}{_extension}"):
|
||||||
|
rmtree(f"{_directory}{_extension}")
|
||||||
|
|
||||||
|
# decrypt, optimize, and re-encrypt each entry with the newly selected key
|
||||||
|
if isdir(_directory):
|
||||||
|
curses_terminate('\noptimizing and re-encrypting entries... please wait - do not terminate this process')
|
||||||
|
for _root, _dirs, _files in sorted(walk(_directory, topdown=True)):
|
||||||
|
for _filename in _files:
|
||||||
|
Path(_root.replace(_directory, _directory + '.new', 1)).mkdir(0o700, parents=True, exist_ok=True)
|
||||||
|
_shm_folder, _shm_entry = shm_gen()
|
||||||
|
decrypt(f"{_root}/{_filename[:-4]}", _shm_folder, _shm_entry, False)
|
||||||
|
_new_lines = optimized_edit(open(f"{_tmp_dir}{_shm_folder}/{_shm_entry}", 'r').readlines(), None, -1)
|
||||||
|
open(f"{_tmp_dir}{_shm_folder}/{_shm_entry}", 'w').writelines(_new_lines)
|
||||||
|
encrypt(f"{_root.replace(_directory, _directory + '.new', 1)}/{_filename[:-4]}", _shm_folder,
|
||||||
|
_shm_entry, sshyp_data.get('CLIENT-GENERAL', 'gpg_id'))
|
||||||
|
|
||||||
|
# create a backup of the original version and activate the new version
|
||||||
|
move(_directory, _directory + '.old')
|
||||||
|
move(_directory + '.new', _directory)
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 2
|
||||||
|
|
||||||
|
|
||||||
# runs secondary configuration menu
|
# runs secondary configuration menu
|
||||||
def global_menu(_device_type, _top_message):
|
def global_menu(_device_type, _top_message):
|
||||||
while True:
|
while True:
|
||||||
@@ -245,6 +291,7 @@ def global_menu(_device_type, _top_message):
|
|||||||
'[OPTIONAL, RECOMMENDED] set custom text editor',
|
'[OPTIONAL, RECOMMENDED] set custom text editor',
|
||||||
'[OPTIONAL, RECOMMENDED] enable/disable quick-unlock',
|
'[OPTIONAL, RECOMMENDED] enable/disable quick-unlock',
|
||||||
'[OPTIONAL, NOT IMPLEMENTED] su security mode',
|
'[OPTIONAL, NOT IMPLEMENTED] su security mode',
|
||||||
|
'[OPTIONAL] re-encrypt/optimize entries',
|
||||||
'[OPTIONAL, NOT IMPLEMENTED] extensions and updates'])
|
'[OPTIONAL, NOT IMPLEMENTED] extensions and updates'])
|
||||||
else:
|
else:
|
||||||
_options.extend(['manage quick-unlock'])
|
_options.extend(['manage quick-unlock'])
|
||||||
@@ -286,7 +333,15 @@ def global_menu(_device_type, _top_message):
|
|||||||
"function,\nyou must first log in to the sshyp server and run:\n\nsshyp whitelist "
|
"function,\nyou must first log in to the sshyp server and run:\n\nsshyp whitelist "
|
||||||
"setup (if not already done)\nsshyp whitelist add "
|
"setup (if not already done)\nsshyp whitelist add "
|
||||||
f"'{listdir(f'{home}/.config/sshyp/devices')[0].rstrip()}'\n")
|
f"'{listdir(f'{home}/.config/sshyp/devices')[0].rstrip()}'\n")
|
||||||
elif _choice == 8:
|
elif _choice == 7:
|
||||||
|
_success = refresh_encryption()
|
||||||
|
if _success == 1:
|
||||||
|
_term_message = "\na backup of your previous entry directory has been created:\n\n" \
|
||||||
|
f"{home}/.local/share/sshyp.old\n"
|
||||||
|
elif _success == 2:
|
||||||
|
_term_message = '\n\u001b[38;5;9merror: re-encryption failed: ' \
|
||||||
|
'entry directory not found\u001b[0m\n'
|
||||||
|
elif _choice > 5 and _choice != 7: # TODO update once displayed options are all implemented
|
||||||
_exit_signal = True
|
_exit_signal = True
|
||||||
curses_terminate(_term_message)
|
curses_terminate(_term_message)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
|
|||||||
Reference in New Issue
Block a user