#!/bin/bash
#
# piilo.sh - piilo
# piiloleikki-scripti by Katja (fly5.kapsi.fi)
#
# toimii mut vähän hölmö vielä. ei tällä oikeestaan muuta tee
# ku käyttää tiedoston-jota-ei-haluu-muiden-näkevän säilyttämiseen
# kryptattuna, niin et se on kuitenki helposti käytettävissä..
# nähny monen käyttävän salasana-tiedostoa, mut ite en luota pistää
# plain tekstinä niitä talteen.. tiedä sit onko tää parempi, mut
# ainaki tuntuu turvallisemmalta :P
#
## valmistelu
# tarvitset fusen ja encfs:n, sekä fuse-kernelmoduulin ladattuna

## asetuksia, eli jos ei muuta käsketä niin näillä mennään
#
# missä säilytetään asetukset
asetusdir="$HOME/.piilo"
# loki
virheloki=$asetusdir/virheloki.log
# piilo-hakemisto
piilo=/home/katja/Omat/piilo/enc
# piilo mount
paikka=/home/katja/Omat/piilo/mnt
# sala tiedosto
sala="pass.txt"
# ja polun kanssa
salainen="$paikka/$sala"
# editori
editori="emacs"

## ja nyt se alkaa

function helppi
{
	echo -e "Käyttö: `basename $0` [valitsin] [valitsin]\n"
	echo -e "Kukapa ei pitäisi piiloleikistä, ainakaan jos se tapahtuu"
	echo -e "kryptatulla tiedostojärjestelmällä user-spacessa.."
	echo -e "Tämä on oma pieni apuvälineeni tuohon piiloleikkiin."
	echo -e "\nPakolliset valitsimet: (valitse vain yksi)"
	echo -e "  -m, --mount\t\tmounttaa/liitä piilo"
	echo -e "  -u, --umount\t\tunmounttaa/irrota piilo"
	echo -e "\nMuut valitsimet:"
	echo -e "  -piilo [hakemisto]\taseta piilo-hakemisto (KESKEN)"
	echo -e "  -paikka [hakemisto]\taseta mount-hakemisto (KESKEN)"
# ehkä myöhemmin
#	 echo -e "	-c, --config [config]\tlue asetukset tiedostosta"
	echo ""
	echo -e "  -p, -pass, \t\tavaa sala(sana)isen tiedoston luettavaksi"
	echo -e "  -h, --help\t\ttämä helppi"
	echo -e "\nVirheloki löytyy: $virheloki"
exit 0
}

# annetaan tarvittaessa käyttöohjeita
if [ -z "$*" ]; then
	helppi
fi

function virhetark
{
if [ "$?" -eq 0 ]; then
debecho -e "..OK\n"
else
debecho 'VIRHE! VIRHE! Nyt kävi huonosti!'
exit
fi
}


# ei säästellä vanhoja lokeja, korvataan vanhat
# päivämäärällä ja uudella infolla
echo "yyyy-mm-dd-hh-mm-ss" > $virheloki
echo "`date +"%Y-%m-%d-%H-%M-%S"`" >> $virheloki

# debug echo / lokiin talteen
debecho () {
  if [ ! -z "$DEBUG" ]; then
	 echo -e "$1" >> $virheloki
  fi
}
# lokitetaan vähän tapahtumia
DEBUG=on

# asetushakemisto
mkdir -p "$asetusdir"

debecho "Tehdään tarkistuksia:"

# pid
pid=$$

debecho "Prosessin `basename $0` ID (pid): $pid"

debecho "Valitsimet=\"$*\""
debecho "piilo=$piilo"
debecho "paikka=$paikka"

debecho "Löytyykö encfs.."
# löytyykö ohjelmat
if [ -z "`which encfs`" ]; then
debecho "..voivoi ei löydy. Asenna ensin encfs."
	exit 1
fi
debecho "..ok"

debecho "Löytyykö fusermount.."
if [ -z "`which fusermount`" ]; then
	debecho "..voivoi ei löydy. Asenna ensin fusermount (fuse/fuse-utils)."
	exit 1
fi
debecho "..ok"

debecho "Onko fuse-moduuli ladattuna.."
# moduuli ladattuna?
if [ -z "`lsmod | grep fuse`" ]; then
	debecho "..voivoi ei ole. Lataa ensin kernelimoduuli \"fuse\""
	debecho "VIRHE: \"fuse\"-moduuli puuttuu."
	echo "VIRHE: \"fuse\"-moduuli puuttuu."
	exit 1
fi
debecho "..ok"

while [ $# -gt 0 ]; do # kunnes ei enempää parametrei
	case "$1" in
		-h|--help) # helppiä
			helppi
			kill -STOP $pid
	;;
		-u|--umount) # unmounttia
			if [ "$varattu" = "true" ]; then
				echo "Et voi sekä liittää että irroittaa samaanaikaan, valitse jompikumpi."
				debecho "Et voi sekä liittää että irroittaa samaanaikaan, valitse jompikumpi."
			exit 1
			fi
			fusermount -u $paikka
			if [ "$?" -eq 0 ]; then
				debecho "Umount / irrotus onnistui."
				echo "Umount / irrotus onnistui."
			varattu=true
			else
				echo "VIRHE! Voivoi, virhe umountissa / irrotuksessa."
				debecho "VIRHE! Voivoi, virhe umountissa / irrotuksessa."
			exit
			fi
	;;
		-m|--mount) # mounttia
			if [ "$varattu" = "true" ]; then
				echo "VIRHE! Et voi sekä liittää että irroittaa samaanaikaan."
				debecho "VIRHE! Et voi sekä liittää että irroittaa samaanaikaan."
			exit 1
			fi
			encfs $piilo $paikka
			if [ "$?" -eq 0 ]; then
				debecho "Mountaus / liittäminen onnistui."
				echo "Mountaus / liittäminen onnistui."
			varattu=true
			else
				echo "VIRHE! Et voi sekä liittää että irroittaa samaanaikaan."
				debecho "VIRHE! Et voi sekä liittää että irroittaa samaanaikaan."
			exit
			fi
	;;
		-piilo) # se salainen piilo
			if [ ! -d "$2" ]; then
				echo "VIRHE! Ei ole hakemisto: \"$2\""
				debecho "VIRHE! Ei ole hakemisto: \"$2\""
				exit 1
			else
				piilo="$2"
				shift # säätää / siirtää tota $# numeroo kohilleen
			fi
	;;
		-paikka) # se mount paikka
				paikka="$2"
				shift
	;;
		-p|-pass|--password) # salainen tiedosto
			debecho "Mountataan."
			encfs $piilo $paikka
			virhetark
			if [ ! -f "$salainen" ]; then
				echo "VIRHE! Ei ole tiedosto: \"$salainen\""
				debecho "VIRHE! Ei ole tiedosto: \"$salainen\""
				debecho "Umountataan piilo."
				fusermount -u $paikka
				exit 1
			fi
			debecho "$editori: $salainen"
			$editori $salainen
			virhetark
			debecho "Umountataan piilo."
			fusermount -u $paikka
			virhetark	
	;;
	esac
	shift # seuraava paketti parametreja
done

if [ "$?" -eq 0 ]; then
	debecho "Loppu hyvin, kaikki hyvin :)"
	echo "Piiloleikki päättyi onnistuneesti."
else
	echo "VIRHE! Voivoi, virhe jossain mutta missä."
exit
fi

#cat $HOME/.piilo/virheloki.log

exit 0

##
# Muutosloki:
# 10.07.2007 - eka versio, vielä kesken mutta toimii
##
# Tehtävää:
# - conffi tiedostot voi pistää käyttöön
# - piilo ja paikka pitäs toimii paremmin
# - vois trapata signaaleja ja unmountata jos jotain yllättävää..
# - paljon säädettävää, ei jaksa listata :P
##
