#!/bin/bash

#set -o errexit
#set -o nounset
#set -o pipefail
#set -o xtrace

zkk_crypt_conf=/etc/zkk-crypt/zkk-crypt.conf

if [ ! -f ${zkk_crypt_conf} ] ; then
  echo "${zkk_crypt_conf} missing"
  exit 11
fi

. ${zkk_crypt_conf}
keyfile=${zkk_keysdir}/${zkk_lukskey}

args=""
lv_name=""
vg_name="${zkk_vg}"

while [[ $# -gt 0 ]]
do
key="$1"
case $key in
    -n|--name)
    lv_name="$2"
    args=${args}" $1 $2_enc"
    shift # past argument
    shift # past value
    ;;
    -*)    # unknown option
    if ! [[ "$2" == "-"* ]] ; then
      args=${args}" $1"
      shift # past value
    fi
    args=${args}" $1"
    shift # past argument
    ;;
    *)
    args=${args}" $1"
    shift # past value
    ;;
esac
done

## check for missing args
if [ -z ${lv_name} ] ; then
  echo "No name for logical volume found"
  exit 3
fi

if [ -z ${vg_name} ] ; then
  echo "No name for volume group found"
  exit 4
fi

if ! [ -z "${zkk_standard_lv_opts}" ] ; then
  args=${zkk_standard_lv_opts}" $args"
fi

if lvcreate -y -Wy -Zy $args ; then
  if [ -b /dev/${vg_name}/${lv_name}_enc ] ; then
    cryptsetup -q luksFormat /dev/${vg_name}/${lv_name}_enc --key-file $keyfile
    echo "dec-${vg_name}-${lv_name} /dev/${vg_name}/${lv_name}_enc $keyfile luks" >> ${zkk_clucrypttab}
    cryptsetup luksOpen /dev/${vg_name}/${lv_name}_enc dec-${vg_name}-${lv_name} --key-file $keyfile
    echo "Created LUKS device \"${lv_name}\" for VG \"${vg_name}\""
    logger "Created LUKS device ${lv_name} for volume group ${vg_name}"
    echo "/dev/mapper/dec-${vg_name}-${lv_name}"
  else
    echo "LV /dev/${vg_name}/${lv_name}_enc was not found"
    logger "logical volume /dev/${vg_name}/${lv_name}_enc was not found"
    exit 1
  fi
fi