--- loncom/auth/lonauth.pm 2005/07/05 21:30:14 1.68 +++ loncom/auth/lonauth.pm 2006/04/20 04:30:02 1.75 @@ -1,7 +1,7 @@ # The LearningOnline Network # User Authentication Module # -# $Id: lonauth.pm,v 1.68 2005/07/05 21:30:14 albertel Exp $ +# $Id: lonauth.pm,v 1.75 2006/04/20 04:30:02 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -49,27 +49,47 @@ sub success { my ($r, $username, $domain, $authhost,$lowerurl) = @_; my $lonids=$r->dir_config('lonIDsDir'); + my $public=($username eq 'public' && $domain eq 'public'); + # See if old ID present, if so, remove - my $filename; - opendir(DIR,$lonids); - while ($filename=readdir(DIR)) { - if ($filename=~/^$username\_\d+\_$domain\_$authhost\.id$/) { - unlink($lonids.'/'.$filename); - } - } - closedir(DIR); + my ($filename,$cookie,$userroles); + my $now=time; -# Give them a new cookie + if ($public) { + my $max_public=100; + my $oldest; + my $oldest_time=0; + for(my $next=1;$next<=$max_public;$next++) { + if (-e $lonids."/publicuser_$next.id") { + my $mtime=(stat($lonids."/publicuser_$next.id"))[9]; + if ($mtime<$oldest_time || !$oldest_time) { + $oldest_time=$mtime; + $oldest=$next; + } + } else { + $cookie="publicuser_$next"; + last; + } + } + if (!$cookie) { $cookie="publicuser_$oldest"; } + } else { + opendir(DIR,$lonids); + while ($filename=readdir(DIR)) { + if ($filename=~/^$username\_\d+\_$domain\_$authhost\.id$/) { + unlink($lonids.'/'.$filename); + } + } + closedir(DIR); - my $cookie; - my $now=time; - $cookie="$username\_$now\_$domain\_$authhost"; +# Give them a new cookie + $cookie="$username\_$now\_$domain\_$authhost"; + # Initialize roles - my $userroles=Apache::lonnet::rolesinit($domain,$username,$authhost); - + $userroles=Apache::lonnet::rolesinit($domain,$username,$authhost); + } # ------------------------------------ Check browser type and MathML capability my ($httpbrowser,$clientbrowser,$clientversion,$clientmathml, @@ -93,6 +113,8 @@ sub success { my %userenv=Apache::lonnet::dump('environment',$domain,$username); my ($tmp) = keys(%userenv); if ($tmp !~ /^(con_lost|error|no_such_host)/i) { + # default remote control to off + if ($userenv{'remote'} ne 'on') { $userenv{'remote'} = 'off'; } foreach my $key (keys(%userenv)) { $userenv.="environment.$key=$userenv{$key}\n"; } @@ -132,13 +154,14 @@ sub success { print $idf "browser.localpath=$FORM{'localpath'}\n"; print $idf "browser.localres=$FORM{'localres'}\n"; } + print $idf "server.domain=".$r->dir_config('lonDefDomain')."\n"; print $idf "request.course.fn=\n"; print $idf "request.course.uri=\n"; print $idf "request.course.sec=\n"; print $idf "request.role=cm\n"; print $idf "request.role.adv=$env{'user.adv'}\n"; print $idf "request.host=$ENV{'REMOTE_ADDR'}\n"; - if ($username eq 'public' && $domain eq 'public') { + if ($public) { print $idf "environment.remote=off\n"; } if ($FORM{'interface'}) { @@ -175,9 +198,8 @@ sub success { # ------------------------------------------------------------ Get cookie ready - if ($username eq 'public' && $domain eq 'public') { - return $cookie; - } + if ($public or $lowerurl eq 'noredirect') { return $cookie; } + $cookie="lonID=$cookie; path=/"; # -------------------------------------------------------- Menu script and info my $windowinfo=&Apache::lonmenu::open($clientos); @@ -185,8 +207,10 @@ sub success { my $remoteinfo=&Apache::lonmenu::load_remote_msg($lowerurl); my $setflags=&Apache::lonmenu::setflags(); my $maincall=&Apache::lonmenu::maincall(); - my $bodytag=&Apache::loncommon::bodytag('Successful Login'); - my $add=&addcontent(); + my $start_page=&Apache::loncommon::start_page('Successful Login', + $startupremote); + my $end_page =&Apache::loncommon::end_page(); + my $continuelink; if (($env{'browser.interface'} eq 'textual') || ($env{'environment.remote'} eq 'off')) { @@ -194,11 +218,10 @@ sub success { } # ------------------------------------------------- Output for successful login - $r->send_cgi_header(<header_out('Set-cookie' => $cookie); + $r->send_http_header; -ENDHEADER my %lt=&Apache::lonlocal::texthash( 'wel' => 'Welcome', 'mes' => 'Welcome to the LearningOnline Network with CAPA. Please wait while your session is being set up', @@ -206,12 +229,7 @@ ENDHEADER 'log' => 'loginproblems.html', ); $r->print(< - -Successful Login to the LearningOnline Network with CAPA -$startupremote - -$bodytag +$start_page $setflags $windowinfo

$lt{'wel'}

@@ -220,8 +238,7 @@ $lt{'mes'}.

$remoteinfo $maincall $continuelink - - +$end_page ENDSUCCESS } @@ -229,59 +246,40 @@ ENDSUCCESS sub failed { my ($r,$message) = @_; - my $bodytag=&Apache::loncommon::bodytag('Unsuccessful Login'); - my $add=&addcontent(); - $r->send_cgi_header(< &mt('Sorry ...'), + 'please' => + &mt('Please [_1]log in again[_2].', + "", + ''), + 'problemspage' => &mt('loginproblems.html'), + 'problems' => 'Problems', + ); + &Apache::loncommon::content_type($r,'text/html'); + $r->send_http_header; -ENDFHEADER $r->print(< - -Unsuccessful Login to the LearningOnline Network with CAPA - -$bodytag -

Sorry ...

+$start_page +

$lt{'sorry'}

$message

-

Please log in again.

+

$lt{'please'}

-Problems?

- - +$lt{'problems'}

+$end_page ENDFAILED } -# --------------------------------------------------------------------- Charset - -sub addcontent { - my $encoding=&Apache::lonlocal::current_encoding; - if ($encoding) { - return '; charset='.$encoding; - } else { - return ''; - } -} - # ------------------------------------------------------------------ Rerouting! sub reroute { - my $r=shift; - my $bodytag=&Apache::loncommon::bodytag('Rerouting'); - $r->send_cgi_header(<print(< - -Rerouting Login to the LearningOnline Network with CAPA - -$bodytag -

Sorry ...

-Please log in again. - - -ENDRFAILED + my ($r) = @_; + &Apache::loncommon::content_type($r,'text/html'); + $r->send_http_header; + my $msg='

Sorry ...

+ Please log in again.'; + &Apache::loncommon::simple_error_page($r,'Rerouting',$msg); } # ---------------------------------------------------------------- Main handler @@ -307,24 +305,20 @@ sub handler { my $lonidsdir=$r->dir_config('lonIDsDir'); if ((-e "$lonidsdir/$handle.id") && ($handle ne '')) { # Indeed, a valid token is found - $r->send_cgi_header(<send_http_header; + my $start_page = + &Apache::loncommon::start_page('Already logged in'); + my $end_page = + &Apache::loncommon::end_page(); $r->print(< - -Already logged in - -$bodytag +$start_page

You are already logged in

Please either continue the current session or logout.

Problems?

- - +$end_page ENDFAILED return OK; }