#!/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
# Version 0.1 - Thu Aug  4 10:35:57 CEST 2016
# Version 0.2 - Fri Aug  5 22:54:25 CEST 2016
# Version 0.2.1 - Sat Aug  6 10:12:42 CEST 2016


# Default CLI options
ENCFS="/usr/bin/encfs --standard"

# 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'
	pwdialogoptions="--stdout --wrap --ignore-eof --password --icon security --inputbox"
else
	dialog="dialog"
	shortttl=''
	longttl=''
	xflag='no'
	pwdialogoptions="--stdout --insecure --fixed-font --smooth --passwordbox"
fi

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

inputfolder="$@"

if [ ! "$inputfolder" ]; then 
	inputfolder="$($dialog \
				--title "$(eval_gettext 'Zen ENCFS')" \
				--stdout --inputbox "$(eval_gettext 'Enter the full path of ENCFS Folder or relative to') \"$HOME\"" 12 75)"
	[ $? != 0 ] && exit 1
fi

if [ ! "$inputfolder" ]; then 
	$dialog --title "$(eval_gettext 'No folder')" --msgbox "$(eval_gettext 'ENCFS Folder path is needed, exiting...')" 10 75
	exit 1
fi

if [ -e "$inputfolder" ] ; then
	folder="$inputfolder"
else
	folder="$HOME/$(basename "$inputfolder")"
fi

pathfolder="$(dirname "$folder"/.)"

if [ "$(echo "$pathfolder" | grep "\.encfs$")" ]; then
	foldernoext="$(basename -s .encfs "$pathfolder")"
	folderext="$(basename "$pathfolder")"
	path="$(dirname "$pathfolder")"
else
	foldernoext="$(basename "$pathfolder")"
	folderext="$(basename "$pathfolder").encfs"
	path="$(dirname "$pathfolder")"
fi


if [ "$(/bin/mount | grep "^encfs.*$path/$foldernoext.*" )" ] ; then
	$dialog \
			--title "$(eval_gettext 'ENCFS Close')" \
			--ok-label "OK" \
			--cancel-label "Cancel" \
			--yesno "$(eval_gettext 'Closing ENCFS Folder') \"$path/$foldernoext\"" 10 75 
	[ $? != 0 ] && exit 1
	mountpoint="$(/bin/mount | grep "^encfs.*$path/$foldernoext.*" | sed -n 's|^encfs on \(.*\) type .*|\1|p')"
	fusermount -u -z "$mountpoint" && rmdir "$mountpoint"  \
		|| $dialog --title "$(eval_gettext 'Error')" --msgbox "$(eval_gettext 'Failed to close ENCFS Folder') \"$folderext\"" 10 75 
else
	if [ -d "$path/$folderext" ]; then
		password="$($dialog \
				--title "$(eval_gettext 'ENCFS Open')" \
				$pwdialogoptions "$(eval_gettext 'Enter password to open ENCFS Folder') \"$path/$folderext\"" 12 75)"
		[ $? != 0 ] && exit 1
		mkdir -p "$path/$foldernoext"
		echo -n "$password" |  $ENCFS --stdinpass "$path/$folderext" "$path/$foldernoext" \
		|| $dialog --title "$(eval_gettext 'Error')" --msgbox "$(eval_gettext 'Failed to open ENCFS Folder') \"$folderext\"" 10 75 && rmdir "$path/$foldernoext"
	else
		password="$($dialog \
				--title "$(eval_gettext 'ENCFS Create')" \
				$pwdialogoptions "$(eval_gettext 'Enter password to create ENCFS Folder') \"$path/$folderext\"" 12 75)"
		[ $? != 0 ] && exit 1
		[ ! "$password" ] && $dialog --title "$(eval_gettext 'Error')" --msgbox "$(eval_gettext 'Null passwords are not allowed')" 10 75 && exit 1
		mkdir -p "$path/$folderext"
		mkdir -p "$path/$foldernoext.TMP"
		echo -n "$password" |  $ENCFS --stdinpass "$path/$folderext" "$path/$foldernoext.TMP" \
		|| $dialog --title "$(eval_gettext 'Error')" --msgbox "$(eval_gettext 'Failed to create ENCFS Folder') \"$folderext\"" 10 75 
		if [ -d "$path/$foldernoext" ]; then
			cp -rf "$path/$foldernoext"/* "$path/$foldernoext.TMP"
			mountpoint="$(/bin/mount | grep "^encfs.*$path/$foldernoext.*" | sed -n 's|^encfs on \(.*\) type .*|\1|p')"
			fusermount -u -z "$mountpoint" && rmdir "$mountpoint"
			$dialog --title "$(eval_gettext 'Done')" --msgbox "$(eval_gettext 'Done copying data to ENCFS Folder') \"$folderext\"" 10 75 
		fi
	fi
fi

exit 0




