#!/bin/bash

# Copyright Jean-Philippe Guillemin <h1p8r10n@gmail.com>. This program is free software;
# you can redistribute it and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 of the License,
# or (at your option) any later version. Please take a look at http://www.gnu.org/copyleft/gpl.htm

# zenencfs is a simple GTK/NCURSES frontend to encfs
# v0.2 Fri Aug  5 22:54:25 CEST 2016


# Take a look at "Xdialog" and use it instead of "dialog" in case X is running
if [[ "$DISPLAY" && "$(which Xdialog 2>&1 | grep -v "which: no")" ]]; then
	dialog="Xdialog --wrap --left --icon security"
	shortttl='3000'
	longttl='8000'
	xflag='yes'
	securedialog='Xdialog --title Password --stdout --wrap --ignore-eof --password --icon security --inputbox'
else
	dialog="dialog"
	shortttl=''
	longttl=''
	xflag='no'
	securedialog='dialog --title Password --stdout --insecure --fixed-font --smooth --passwordbox'
fi

# Gettext internationalization
export TEXTDOMAIN="zencfs"
export TEXTDOMAINDIR="/usr/share/locale"
. gettext.sh


if [ ! "$@" ]; then
	$dialog --title "$(eval_gettext 'Bad folder name')" --msgbox "$(eval_gettext 'You must provide an ENCFS Folder')" 8 65 
	exit 1
fi

arg="$(dirname "$@"/.)"

if [ "$(echo "$arg" | grep "\.encfs$")" ]; then
	# $dialog --title "$(eval_gettext 'Bad folder name')" --msgbox "$(eval_gettext 'ENCFS Folder must have ".encfs" suffix')" 8 65 
	foldernoext="$(basename -s .encfs "$arg")"
	folderext="$(basename "$arg")"
	pathtofolder="$(dirname "$arg")"
else
	foldernoext="$(basename "$arg")"
	folderext="$(basename "$arg").encfs"
	pathtofolder="$(dirname "$arg")"
fi


if [ "$(/bin/mount | grep "^encfs.*$pathtofolder/$foldernoext.*" )" ] ; then
	$dialog --title "$(eval_gettext 'Closing')" --msgbox "$(eval_gettext 'Closing ENCFS Folder') \"$foldernoext\"" 8 65 
	mountpoint="$(/bin/mount | grep "^encfs.*$pathtofolder/$foldernoext.*" | sed -n 's|^encfs on \(.*\) type .*|\1|p')"
	fusermount -u "$mountpoint" && rmdir "$mountpoint" \
		|| $dialog --title "$(eval_gettext 'Error')" --msgbox "$(eval_gettext 'Failed to close ENCFS Folder') \"$folderext\"" 8 65
else
	if [ -d "$pathtofolder/$folderext" ]; then
		password="$(${securedialog} "$(eval_gettext 'Opening ENCFS Folder') \"$folderext\"" 12 80)"
		[ $? != 0 ] && exit 1
		mkdir -p "$pathtofolder/$foldernoext"
		echo -n $password |  encfs --standard --stdinpass "$pathtofolder/$folderext" "$pathtofolder/$foldernoext" \
		|| $dialog --title "$(eval_gettext 'Error')" --msgbox "$(eval_gettext 'Failed to open ENCFS Folder') \"$folderext\"" 8 65 
	else
		password="$(${securedialog} "$(eval_gettext 'Creating ENCFS Folder') \"$folderext\"" 12 80)"
		[ $? != 0 ] && exit 1
		mkdir -p "$pathtofolder/$folderext"
		mkdir -p "$pathtofolder/$foldernoext.TMP"
		echo -n $password |  encfs --standard --stdinpass "$pathtofolder/$folderext" "$pathtofolder/$foldernoext.TMP" \
		|| $dialog --title "$(eval_gettext 'Error')" --msgbox "$(eval_gettext 'Failed to create ENCFS Folder') \"$folderext\"" 8 65 
		if [ -d "$pathtofolder/$foldernoext" ]; then
			cp -rf "$pathtofolder/$foldernoext"/* "$pathtofolder/$foldernoext.TMP"
			mountpoint="$(/bin/mount | grep "^encfs.*$pathtofolder/$foldernoext.*" | sed -n 's|^encfs on \(.*\) type .*|\1|p')"
			fusermount -u "$mountpoint" && rmdir "$mountpoint"
			$dialog --title "$(eval_gettext 'Closing')" --msgbox "$(eval_gettext 'Done moving data to ENCFS Folder') \"$folderext\"" 8 65 
		fi
	fi
fi

exit 0




