--- loncom/interface/resetpw.pm 2009/09/23 20:17:53 1.17.10.1
+++ loncom/interface/resetpw.pm 2010/09/19 15:04:40 1.22.2.2
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Allow access to password changing via a token sent to user's e-mail.
#
-# $Id: resetpw.pm,v 1.17.10.1 2009/09/23 20:17:53 gci Exp $
+# $Id: resetpw.pm,v 1.22.2.2 2010/09/19 15:04:40 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -26,6 +26,28 @@
# http://www.lon-capa.org/
#
#
+
+=pod
+
+=head1 NAME
+
+Apache::resetpw: reset user password.
+
+=head1 SYNOPSIS
+
+Handles resetting of forgotten passwords.
+
+This is part of the LearningOnline Network with CAPA project
+described at http://www.lon-capa.org.
+
+=head1 OVERVIEW
+
+A user with an e-mail address associated with his/her LON-CAPA username
+can reset a forgotten password, using a link sent to the e-mail address
+if the authentication type for the account is "internal".
+
+=cut
+
package Apache::resetpw;
use strict;
@@ -46,15 +68,17 @@ sub handler {
my $contact_name = &mt('LON-CAPA helpdesk');
my $contact_email = $r->dir_config('lonSupportEMail');
my $server = $r->dir_config('lonHostID');
- my $defdom = $r->dir_config('lonDefDomain');
+ my $defdom = &Apache::lonnet::default_login_domain();
&Apache::lonacc::get_posted_cgi($r);
&Apache::lonlocal::get_language_handle($r);
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['token']);
my @emailtypes = ('permanentemail','critnotification','notification');
my $uname = &unescape($env{'form.uname'});
+ my $useremail = $env{'form.useremail'};
my $udom = $env{'form.udom'};
my $token = $env{'form.token'};
+ my $case_change;
my $start_page =
&Apache::loncommon::start_page('Reset password','',
{
@@ -66,9 +90,20 @@ sub handler {
$output = &reset_passwd($r,$token,$contact_name,$contact_email);
} elsif ($uname && $udom) {
my $domdesc = &Apache::lonnet::domain($udom,'description');
+ my $homeserver = &Apache::lonnet::homeserver($uname,$udom);
+ if ($homeserver eq 'no_host') {
+ my $lc_uname = lc($uname);
+ if ($lc_uname ne $uname) {
+ $homeserver = &Apache::lonnet::homeserver($lc_uname,$udom);
+ unless ($homeserver eq 'no_host') {
+ $uname = $lc_uname;
+ $useremail = lc($env{'form.useremail'});
+ $case_change = 1;
+ }
+ }
+ }
my $authtype = &Apache::lonnet::queryauthenticate($uname,$udom);
if ($authtype =~ /^internal/) {
- my $useremail = $env{'form.useremail'};
if ($useremail !~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/) {
$output = &invalid_state('baduseremail',$domdesc,
$contact_name,$contact_email);
@@ -76,18 +111,33 @@ sub handler {
my %userinfo =
&Apache::lonnet::get('environment',\@emailtypes,
$udom,$uname);
- my $email = '';
- my $emailtarget;
+ my @allemails;
foreach my $type (@emailtypes) {
- $email = $userinfo{$type};
- if ($email =~ /[^\@]+\@[^\@]+/) {
- $emailtarget = $type;
- last;
+ my $email = $userinfo{$type};
+ my @items;
+ if ($email =~ /,/) {
+ @items = split(',',$userinfo{$type});
+ } else {
+ @items = ($email);
+ }
+ foreach my $item (@items) {
+ if ($item =~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/) {
+ if ($case_change) {
+ my $lcitem = lc($item);
+ unless(grep(/^\Q$lcitem\E$/,@allemails)) {
+ push(@allemails,$lcitem);
+ }
+ } else {
+ unless(grep(/^\Q$item\E$/,@allemails)) {
+ push(@allemails,$item);
+ }
+ }
+ }
}
}
- if ($email =~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/) {
- if ($useremail eq $email) {
- $output = &send_token($uname,$udom,$email,$server,
+ if (@allemails > 0) {
+ if (grep(/^\Q$useremail\E$/,@allemails)) {
+ $output = &send_token($uname,$udom,$useremail,$server,
$domdesc,$contact_name,
$contact_email);
} else {
@@ -118,34 +168,32 @@ sub handler {
sub get_uname {
my ($defdom) = @_;
my %lt = &Apache::lonlocal::texthash(
- unam => 'username',
- udom => 'domain',
+ unam => 'LON-CAPA username',
+ udom => 'LON-CAPA domain',
uemail => 'E-mail address in LON-CAPA',
proc => 'Proceed');
- my $msg = &mt('If you use the same account for other campus services besides LON-CAPA, (e.g., e-mail, course registration, etc.), a separate centrally managed mechanism likely exists to reset a password. However, if your account is used for just LON-CAPA access you will probably be able to reset a password from this page.');
- $msg .= '
'.&mt('Three conditions must be met:')
+ my $msg = '
'.&mt('To be able to reset a forgotten password:')
.'
'.&mt('Please enter the username and domain of the LON-CAPA account, and the associated e-mail address, for which you are setting a password.').'
'.
+ &mt('In most cases the GCI WebCenter username is the same as your e-mail address, in which case you will enter the same information twice.').'
'.&mt('The new password must contain at least 7 characters.').' '.
+ &mt('Your new password will be sent to the LON-CAPA server in an encrypted form.').'