#!/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{
	Changes password. UserId or login is required. Namespace is required.
	Old and new password is read from STDIN or file if -f is specified
	(expected file format is: "oldPass\nnewPass").
	--------------------------------------------------------------------
	Available options:
	--userId      | -u user id
	--login       | -l login
	--namespace   | -n namespace
	--file        | -f path to file with passwords (default STDIN)
	--batch       | -b batch
	--help        | -h prints this help

	};
}

my ($userId, $login, $namespace, $oldpasswd, $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";
	$oldpasswd=<PWD>;
	$newpasswd=<PWD>;
	close PWD;
} else {
	print "\nEnter old password: ";
	ReadMode('noecho');
	$oldpasswd=<STDIN>;
	print "\nEnter new password: ";
	$newpasswd=<STDIN>;
	ReadMode(0);
}
chomp($oldpasswd);
unless (defined $oldpasswd) { die "\nERROR: oldpassword cannot be empty \n";}
chomp($newpasswd);
unless (defined $newpasswd) { die "\nERROR: newpassword cannot be empty \n";}

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

