#!/usr/bin/perl
#---------------------------------------------------------------
# Project         : Mandrake Linux
# Module          : mountloop
# File            : drakloop
# Version         : $Id: drakloop,v 1.6 2003/03/05 16:52:42 flepied Exp $
# Author          : Frederic Lepied
# Created On      : Tue Jun 11 22:44:24 2002
#---------------------------------------------------------------

use lib qw(/usr/lib/libDrakX);
use interactive;

use MDK::Common::System;
use common;

my $in = 'interactive'->vnew;

sub xdie {
    my $s = shift;

    $in->ask_warn(N("Error"), $s);
    $in->exit(1);
}

my $space = (MDK::Common::System::df("/home"))[1] / 1024;

my $size = "10";
my $dir;
my $validated = 0;
my $pass;
my $pass2;
my $status = N("Encrypted folder creation");
my $enc;
my $encrypt = [ "aes128", "aes192", "aes256" ];

while (! $validated) {
    if ($in->ask_from_({ title => N("Loopback filesystem creation"),
			 messages => $status
		     },
		       [
			{ label => N("Directory"), val => \$dir },
			{ label => N("Size in Mb"), val => \$size },
			{ label => N("Pass phrase"), val => \$pass, hidden => 1 },
			{ label => N("Confirmation"), val => \$pass2, hidden => 1 },
			{ label => N("Encryption"), val => \$enc, list => $encrypt, type => 'combo' },
			],
		       )) {
	# We have clicked "OK"
	if ( ! $dir || ! $size || ! $enc || ! $pass || ! $pass2) {
	    $status = N("empty field");
	} elsif ( $size > $space ) {
	    $status = N("Not enough space");
	} elsif ( $pass ne $pass2  ) {
	    $status = N("passwords mismatch");
	} elsif ( length($pass) < 20 ) {
	    $status = N("password must be at least of 20 characters");
	} else {
	    $validated = 1;
	}
    } else {
	$in->exit(1);
    }
}

system("mkdir -p $dir && dd if=/dev/zero of=$dir/encfile bs=${size}M count=1") and xdie(N("folder creation failure"));

open F, "|encsetup $enc $dir/encfile";
print F $pass;
close F or xdie(N("encsetup failed"));

open F, "|mountloop $enc $dir/encfile $dir";
print F $pass;
close F or xdie(N("mountloop failed"));

my $home = $ENV{HOME};

open F, ">>$home/.mountlooprc";
print F "$enc $dir/encfile $dir\n";
close F or xdie(N("writing to $home/.mountlooprc failed"));

$in->exit;

# drakloop ends here
