_rwx_cmd_cs() { rwx_crypt "${@}"; } RWX_CRYPT_ROOT="${HOME}/home/crypt" rwx_crypt_device() { local device size local index=0 while [ -z "${device}" ]; do device="/dev/nbd${index}" if [ -b "${device}" ]; then size="$(cat /sys/block/nbd"${index}/size")" [ "${size}" -eq 0 ] || device="" else device="" break fi index=$((index + 1)) done if [ -n "${device}" ]; then echo "${device}" else rwx_log_error 1 "No device available" fi } rwx_crypt() { local action="${1}" local action_close="close" local action_open="open" local mapper="/dev/mapper" local mount_root="/media" local crypt_arg crypt_file crypt_map crypt_mount pass_phrase case "${action}" in "${action_close}" | "${action_open}") shift local user_id user_id="$(id --user)" [ "${user_id}" -eq 0 ] || rwx_log_error 1 "Not root" [ -n "${1}" ] || rwx_log_error 2 "No files" [ "${action}" = "${action_open}" ] && pass_phrase="$(rwx_read_passphrase)" for crypt_arg in "${@}"; do rwx_log_info crypt_file="${RWX_CRYPT_ROOT}/${crypt_arg}.qcow2" if [ -f "${crypt_file}" ]; then crypt_map="${mapper}/${crypt_arg}" crypt_mount="${mount_root}/${crypt_arg}" case "${action}" in "${action_open}") local nbd_device="$(rwx_crypt_device)" echo "device: ${nbd_device}" # TODO connect device # TODO open device # TODO make mount directory # TODO mount file system ;; "${action_close}") # TODO unmount file system # TODO remove mount directory # TODO close device # TODO disconnect device ;; *) ;; esac else rwx_log_error 3 "Not a file" fi done ;; *) rwx_log_info "Usage:" rwx_log_info "${action_close}|${action_open}" # TODO list ;; esac }