#!/usr/bin/env perl

=head1 NAME

newpassword - change a users password

=head1 SYNOPSIS

 newpassword COURSEID USERID NEWPASSWORD

=head1 DESCRIPTION

Change the password for a user.

=head1 ARGUMENTS

=over

=item I<COURSEID>

The name of the course.

=item I<USERID>

The login name of the user you will change the password for.

=item I<NEWPASSWORD>

The new password.

=back

=cut

use strict;
use warnings;

BEGIN {
	use Mojo::File qw(curfile);
	use Env qw(WEBWORK_ROOT);

	$WEBWORK_ROOT = curfile->dirname->dirname;
}

use lib "$ENV{WEBWORK_ROOT}/lib";

use WeBWorK::CourseEnvironment;
use WeBWorK::DB;
use WeBWorK::Utils qw(cryptPassword);

if((scalar(@ARGV) != 3)) {
  print "\nSyntax is: newpassword CourseID User NewPassword";
  print "\n    (e.g.  newpassword MAT_123 jjones abracadabra\n\n";
  exit();
}

##### get command-line options #####

my $courseID = shift;
my $user = shift;
my $newP = shift;

##### main function #####

sub dopasswd {
  my ($db, $user, $newpass) = @_;
  my $passwordRecord = eval {$db->getPassword($user)};
  die "Can't get password for user |$user| $@" if $@ or not defined($passwordRecord);
  my $cryptedPassword = cryptPassword($newpass);
  $passwordRecord->password($cryptedPassword);
  eval {$db->putPassword($passwordRecord) };
  if ($@) {
    die "Errors $@ ";
  }
}

# bring up a minimal course environment
my $ce = WeBWorK::CourseEnvironment->new({
	webwork_dir => $ENV{WEBWORK_ROOT},
	courseName => $courseID
});

my $db = WeBWorK::DB->new($ce);

dopasswd($db, $user, $newP);
print "Changed password for $user in $courseID\n";
