#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH

BIN=$(basename $0)
DEV=$1
TEST_DEV="test_${DEV##*/}"
# echo $TEST_DEV, like sdb
LOG_FILE="/var/log/usb_crypt.log"

UCRYPT_PATH="/opt/ucrypt"
CURPATH=$(cd "$(dirname $0)";pwd)

OSVER=$(cat /etc/.kyinfo | grep milestone | awk -F= '{print $2}' | tr -d ' ')

function adddate {
    while IFS= read -r line; do
        echo "$(date +"%Y-%m-%d %H:%m:%S"): $line"
    done
}

if [[ $# -ne 1 ]]; then 
	echo "Usage: $BIN <device>" | adddate >>$LOG_FILE 2>&1
	echo "FAILED" >"$UCRYPT_PATH/usb_crypt_shell"
	exit 1
fi

if [[ ! -d "$UCRYPT_PATH" ]]; then 
	mkdir -p $UCRYPT_PATH
fi

## 产生 Info_file 文件
INFO_FILE=/tmp/info_file
INFO_SIZE=1024
dd if=/dev/zero of=$INFO_FILE bs=$INFO_SIZE count=1 >/dev/null 2>&1

## 格式化usb设备为usb加密设备
ucryptsetup format $DEV BkaX25ytu9gtxzQg --batch-mode=1 --info-file=$INFO_FILE --info-size=$INFO_SIZE >>/dev/null 2>&1
if [[ $? -ne 0 ]]; then
	echo "Format ucrypt $DEV failed" | adddate >>$LOG_FILE 2>&1
	echo "FAILED" >"$UCRYPT_PATH/usb_crypt_shell"
	exit 2
fi

## 打开usb加密设备
ucryptsetup open $DEV $TEST_DEV BkaX25ytu9gtxzQg >>/dev/null 2>&1
if [[ $? -ne 0 ]]; then
	ucryptsetup close $TEST_DEV >>/dev/null 2>&1
	if [[ -b $DEV ]]; then
		dd if=/dev/zero of=$DEV bs=10M count=1 oflag=direct >>/dev/null 2>&1
	fi
	echo "Open ucrypt $DEV failed" | adddate >>$LOG_FILE 2>&1
	echo "FAILED" >"$UCRYPT_PATH/usb_crypt_shell"
	exit 3
fi

## 格式化usb加密设备
sync
if [[ ${OSVER:0:3} == "3.3" || ${OSVER:0:3} == "3.4" || ${OSVER:0:3} == "3.5" ]];then
	mkfs.ext4 -O sparse_super,^metadata_csum -m 0 /dev/mapper/$TEST_DEV >>/dev/null 2>&1
else
	mkfs.ext4 -O sparse_super -m 0 /dev/mapper/$TEST_DEV >>/dev/null 2>&1
fi
sleep 1
sync

## 获取usb加密设备的uuid
UUID=`blkid /dev/mapper/$TEST_DEV | awk '{ print $2 }' | sed 's/\"//g'`
UUID=${UUID##*=}

## 关闭usb加密设备
ucryptsetup close $TEST_DEV >>/dev/null 2>&1

if [[ ! -z "$UUID" ]]; then
	UUID=`ucryptsetup UUID $DEV`
fi

## 注册usb加密设备
ucrypt setFlag $DEV
if [[ $? -ne 0 ]];then
        echo "Register ucrypt $DEV failed" | adddate >>$LOG_FILE 2>&1
        echo "FAILED" >"$UCRYPT_PATH/usb_crypt_shell"
        exit 3
fi

echo "Format ucrypt $DEV finished" | adddate >>$LOG_FILE 2>&1
echo $UUID >"$UCRYPT_PATH/usb_crypt_shell"
exit 0

