_rwx_cmd_cs() { rwx_crypt "${@}"; } RWX_CRYPT_ROOT="${HOME}/home/crypt" rwx_crypt() { local action="${1}" shift 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}") 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}" if [ -f "${crypt_file}" ]; then crypt_map="${mapper}/${crypt_arg}" crypt_mount="${mount_root}/${crypt_arg}" case "${action}" in "${action_open}") rwx_log_info "OPEN" local nbd_device nbd_size local nbd_index=0 while [ -z "${nbd_device}" ]; do if [ -f "/dev/nbd${nbd_index}" ]; then nbd_size="$(cat /sys/block/nbd"${nbd_index}/size")" [ "${nbd_size}" -eq 0 ] && nbd_device="/dev/nbd${nbd_index}" fi nbd_index=$((nbd_index + 1)) done [ -z "${nbd_device}" ] && rwx_log_error 4 "No device available" rwx_log_info "device: ${nbd_device}" # TODO connect device # TODO open device echo "${pass_phrase}" # TODO make mount directory # TODO mount file system ;; "${action_close}") rwx_log_info "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 }