mirror of
https://github.com/rwinkhart/sshyp-labs.git
synced 2026-08-31 22:36:48 -04:00
Implement initial test for export-to-libmutton extension
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
[config]
|
||||
input = export
|
||||
output = /usr/lib/sshyp/export-to-libmutton.py
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from os import path, remove, system, walk
|
||||
from pathlib import Path
|
||||
from shutil import move, rmtree
|
||||
|
||||
# NOTE LARGELY UNTESTED, ALPHA EXTENSION
|
||||
# TODO strip .gpg extension, if present
|
||||
# TODO extract and move MFA data to dedicated field, if present
|
||||
|
||||
if __name__ == "__main__":
|
||||
_pasture = path.expanduser('~/.local/share/sshyp')
|
||||
|
||||
# set new gpg key; note that this changes sshyp's gpg key, not just libmutton's
|
||||
gpg_config()
|
||||
|
||||
# remove previous export if it exists
|
||||
if Path(f"{_pasture}.export").exists():
|
||||
rmtree(f"{_pasture}.export")
|
||||
|
||||
# prompt for unlock and display do not close warning
|
||||
decrypt(None)
|
||||
curses_radio(['okay'], 'entry conversion may take some time (especially on slower devices)\n\nselect "okay" '
|
||||
'to start\n\ndo not terminate this process!')
|
||||
|
||||
# iterate over entires, exporting them in the libmutton format
|
||||
if path.isdir(_pasture):
|
||||
_gpg_id = sshyp_data.get('CLIENT-GENERAL', 'gpg_id')
|
||||
for _dirPath, _dirNames, _filenames in walk(_pasture):
|
||||
for _filename in sorted(_filenames):
|
||||
# ensure parent directory within export tree exists
|
||||
Path(dirPath.replace(_pasture, _pasture + '.export')).mkdir(0o700, parents=True, exist_ok=True)
|
||||
|
||||
# manually decrypt due to potential lack of .gpg extension
|
||||
system(f"gpg -d '{_dirPath}/{_filename}' > '{_dirPath.replace(_pasture, _pasture + '.export')}/{_filename}'")
|
||||
|
||||
_old_contents, _new_contents = open(f"{_dirPath.replace(_pasture, _pasture + '.export')}/{_filename}", 'r').readlines(), ''
|
||||
|
||||
# add a new line reserved for libmutton's TOTP support (between username and URL)
|
||||
for _num in range(len(_old_contents)):
|
||||
match _num:
|
||||
case 0:
|
||||
_new_contents += _old_contents[0]
|
||||
case 1:
|
||||
_new_contents += _old_contents[1]
|
||||
case 2:
|
||||
_new_contents += ''
|
||||
case 3:
|
||||
_new_contents += _old_contents[2]
|
||||
case _:
|
||||
_new_contents += _old_contents[_num]
|
||||
|
||||
# write and manually encrypt the output file
|
||||
open(f"{_dirPath.replace(_pasture, _pasture + '.export')}/{_filename}", 'w').writelines(_new_contents)
|
||||
system(f"gpg -qr {str(_gpg_id)} -e '{_dirPath.replace(_pasture, _pasture + '.export')}/{_filename}'")
|
||||
remove(f"{_dirPath.replace(_pasture, _pasture + '.export')}/{_filename}")
|
||||
else:
|
||||
print(f"\n\u001b[38;5;9merror: no entry folder ({_pasture}) found\u001b[0m\n")
|
||||
s_exit(2)
|
||||
|
||||
Reference in New Issue
Block a user