#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Long qw(:config no_ignore_case);
use Perun::Agent;
use Perun::Common qw(printMessage);
use Term::ReadKey;

sub help {
	return qq{
	Reset password. UserId or login is required. Namespace is required.
	New password is read from STDIN or file if -f is specified.
	------------------------------------------------------
	Available options:
	--userId      | -u user id
	--login       | -l login
	--namespace   | -n namespace
	--file        | -f path to file with new password (default STDIN)
	--batch       | -b batch
	--help        | -h prints this help

	};
}

my ($userId, $login, $namespace, $newpasswd, $filename, $batch);
GetOptions ("help|h"  => sub {
		print help();
		exit 0;
	}, "batch|b"    => \$batch,
	"userId|u=i"    => \$userId,
	"login|l=s"     => \$login,
	"namespace|n=s" => \$namespace,
	"file|f=s"      => \$filename) || die help();

# Check options
unless (defined $userId or defined $login) { die "ERROR: userId or login is required \n";}
unless (defined $namespace) { die "ERROR: namespace is is required \n";}

my $agent = Perun::Agent->new();
my $usersAgent = $agent->getUsersAgent;

if (defined $filename) {
	open PWD, $filename or die "ERROR: filename cannot be opened\n";
	$newpasswd=<PWD>;
	close PWD;
} else {
	print "Enter new password: \n";
	ReadMode('noecho');
	$newpasswd=<STDIN>;
	ReadMode(0);
}
chomp($newpasswd);
unless (defined $newpasswd) { die "\nERROR: newpassword cannot be empty \n";}

if (defined $userId) {
	$usersAgent->changePassword( user => $userId, namespace => $namespace, oldPassword => 'null', newPassword => $newpasswd, checkOldPassword => 0);
	printMessage("\nPassword of user $userId successfully reset", $batch);
} else {
	$usersAgent->changePassword( login => $login, namespace => $namespace, oldPassword => 'null', newPassword => $newpasswd, checkOldPassword => 0);
	printMessage("\nPassword of user $login successfully reset", $batch);
}

