--- loncom/auth/lonauth.pm 2003/07/17 15:24:46 1.54
+++ loncom/auth/lonauth.pm 2005/11/10 19:19:08 1.71
@@ -1,7 +1,7 @@
# The LearningOnline Network
# User Authentication Module
#
-# $Id: lonauth.pm,v 1.54 2003/07/17 15:24:46 www Exp $
+# $Id: lonauth.pm,v 1.71 2005/11/10 19:19:08 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -25,13 +25,6 @@
#
# http://www.lon-capa.org/
#
-# 5/21/99,5/22,5/25,5/26,5/27,5/29,6/2,6/11,6/14,6/15
-# 16/11,12/16,
-# 1/14,2/24,2/28,2/29,3/7,5/29,5/30,5/31,6/1,6/5,6/29,
-# 7/1,7/10,10/2,10/5,10/9,10/26,10/30,11/10,
-# 05/28,05/29 Gerd Kortemeyer
-# 07/28,08/03 Gerd Kortemeyer
-# 8/20 Gerd Kortemeyer
package Apache::lonauth;
@@ -43,9 +36,11 @@ use CGI::Cookie();
use DynaLoader; # for Crypt::DES version
use Crypt::DES;
use Apache::loncommon();
-use Apache::lonnet();
+use Apache::lonnet;
use Apache::lonmenu();
use Fcntl qw(:flock);
+use Apache::lonlocal;
+use POSIX qw(mktime);
my %FORM;
@@ -55,27 +50,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,
@@ -106,7 +121,9 @@ sub success {
if (($userenv{'interface'}) && (!$FORM{'interface'})) {
$FORM{'interface'}=$userenv{'interface'};
}
- $ENV{'environment.remote'}=$userenv{'remote'};
+ $env{'environment.remote'}=$userenv{'remote'};
+ if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; }
+
# --------------- Do not trust query string to be put directly into environment
foreach ('imagesuppress','appletsuppress',
'embedsuppress','fontenhance','blackwhite',
@@ -136,16 +153,32 @@ 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";
+ my $timezone='UTC';
+ my $timediff=POSIX::mktime(localtime())-POSIX::mktime(gmtime());
+ if ($timediff) {
+ my $hours=int($timediff/3600);
+ my $minutes=abs(int(($timediff-$hours*3600)/60));
+ my $sign="+";
+ if ($timediff<0) {
+ $sign="-";
+ }
+ $timezone.=$sign.abs($hours).':'.substr("0$minutes",-2);
+ }
+ print $idf "server.timezone=$timezone\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.role.adv=$env{'user.adv'}\n";
print $idf "request.host=$ENV{'REMOTE_ADDR'}\n";
+ if ($public) {
+ print $idf "environment.remote=off\n";
+ }
if ($FORM{'interface'}) {
$FORM{'interface'}=~s/\W//gs;
print $idf "browser.interface=$FORM{'interface'}\n";
- $ENV{'browser.interface'}=$FORM{'interface'};
+ $env{'browser.interface'}=$FORM{'interface'};
foreach ('imagesuppress','appletsuppress',
'embedsuppress','fontenhance','blackwhite') {
if (($FORM{$_} eq 'true') ||
@@ -157,9 +190,9 @@ sub success {
if ($userroles ne '') { print $idf "$userroles"; }
$idf->close();
}
- $ENV{'request.role'}='cm';
- $ENV{'request.role.adv'}=$ENV{'user.adv'};
- $ENV{'browser.type'}=$clientbrowser;
+ $env{'request.role'}='cm';
+ $env{'request.role.adv'}=$env{'user.adv'};
+ $env{'browser.type'}=$clientbrowser;
# -------------------------------------------------------------------- Log this
&Apache::lonnet::log($domain,$username,$authhost,
@@ -176,20 +209,35 @@ sub success {
# ------------------------------------------------------------ Get cookie ready
+ if ($public or $lowerurl eq 'noredirect') { return $cookie; }
+
$cookie="lonID=$cookie; path=/";
# -------------------------------------------------------- Menu script and info
my $windowinfo=&Apache::lonmenu::open($clientos);
my $startupremote=&Apache::lonmenu::startupremote($lowerurl);
+ 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 $continuelink;
+ if (($env{'browser.interface'} eq 'textual') ||
+ ($env{'environment.remote'} eq 'off')) {
+ $continuelink="".&mt('Continue')."";
+ }
# ------------------------------------------------- Output for successful login
$r->send_cgi_header(< 'Welcome',
+ 'mes' => 'Welcome to the LearningOnline Network with CAPA. Please wait while your session is being set up',
+ 'pro' => 'Problems',
+ 'log' => 'loginproblems.html',
+ );
$r->print(<
@@ -199,12 +247,12 @@ $startupremote
$bodytag
$setflags
$windowinfo
-Welcome!
-Welcome to the LearningOnline Network with CAPA.
-Please wait while your session
-is being set up.
-Problems?
+$lt{'wel'}
+$lt{'mes'}.
+$lt{'pro'}?
+$remoteinfo
$maincall
+$continuelink