--- loncom/interface/resetpw.pm 2008/01/25 16:46:50 1.8 +++ loncom/interface/resetpw.pm 2010/03/22 20:11:22 1.24 @@ -1,6 +1,8 @@ # The LearningOnline Network # Allow access to password changing via a token sent to user's e-mail. # +# $Id: resetpw.pm,v 1.24 2010/03/22 20:11:22 droeschl Exp $ +# # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). @@ -24,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; @@ -41,15 +65,10 @@ sub handler { if ($r->header_only) { return OK; } - my $start_page = - &Apache::loncommon::start_page('Reset password','', - { - 'no_inline_link' => 1,}); - $r->print($start_page); 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']); @@ -58,7 +77,10 @@ sub handler { my $uname = &unescape($env{'form.uname'}); my $udom = $env{'form.udom'}; my $token = $env{'form.token'}; - $r->print(&mt('

'.&mt('Reset forgotten LON-CAPA password').'

')); + my $start_page = + &Apache::loncommon::start_page('Reset password'); + $r->print($start_page); + $r->print('

'.&mt('Reset forgotten LON-CAPA password').'

'); my $output; if ($token) { $output = &reset_passwd($r,$token,$contact_name,$contact_email); @@ -74,18 +96,26 @@ 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 =~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/) { + 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,10 +148,10 @@ sub get_uname { my %lt = &Apache::lonlocal::texthash( unam => 'username', udom => 'domain', - uemail => 'Email address in LON-CAPA', + 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.'); + 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:') .'