#!/bin/bash

if [ "$#" -ne 2 ]; then
	echo "Usage: $0 create|open|close <file>" 1>&2
	exit 1
fi
cmd="$1"
file="$2"

point="$file-mnt"
dmname="`basename "$file"`"

case "$1" in
create)
	# Make a nice empty file to use as backing.
	mkdir -p "$point"
	dd if=/dev/zero of="$file" bs=1M count=20 >/dev/null

	# Mount it up.
	sudo losetup -f "$file"
	sudo losetup -j "$file"
	which=`sudo losetup -j "$file"  | awk -F: '{ print $1 }'`
	sudo cryptsetup -y luksFormat -c blowfish -s 256 "$which"
	sudo cryptsetup luksOpen "$which" "$dmname"
	sudo mkfs.ext4 -j "/dev/mapper/$dmname"
	sudo fsck -y "/dev/mapper/$dmname"
	sudo mount "/dev/mapper/$dmname" "$point"
	sudo chown $USER "$point"

	echo "backup now mounted on '$point'"
	;;
open)
	mkdir -p "$point"

	sudo losetup -f "$file"
	which=`sudo losetup -j "$file" | awk -F: '{ print $1 }'`
	sudo cryptsetup luksOpen "$which" "$dmname"
	sudo mount "/dev/mapper/$dmname" "$point"

	echo "backup now mounted on '$point'"
	;;
close)
	which=`sudo losetup -j "$file"  | awk -F: '{ print $1 }'`

	sudo umount "$point"
	sudo cryptsetup luksClose "$dmname"
	sudo losetup -d "$which"

	rmdir "$point"
	echo "backup now unmounted"
	;;

update)
	"$0" open "$file"
	sh "$point/UPDATE"
	"$0" close "$file"
	;;

esac
