--- loncom/auth/lonlogin.pm 2009/03/16 18:10:05 1.115 +++ loncom/auth/lonlogin.pm 2009/10/06 21:58:30 1.126 @@ -1,7 +1,7 @@ # The LearningOnline Network # Login Screen # -# $Id: lonlogin.pm,v 1.115 2009/03/16 18:10:05 bisitz Exp $ +# $Id: lonlogin.pm,v 1.126 2009/10/06 21:58:30 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -46,7 +46,7 @@ sub handler { (join('&',$ENV{'QUERY_STRING'},$env{'request.querystring'}, $ENV{'REDIRECT_QUERY_STRING'}), ['interface','username','domain','firsturl','localpath','localres', - 'token']); + 'token','role','symb']); if (!defined($env{'form.firsturl'})) { &Apache::lonacc::get_posted_cgi($r,['firsturl']); } @@ -81,11 +81,15 @@ sub handler { &Apache::loncommon::start_page('Already logged in'); my $end_page = &Apache::loncommon::end_page(); + my $dest = '/adm/roles'; + if ($env{'form.firsturl'} ne '') { + $dest = $env{'form.firsturl'}; + } $r->print( $start_page .'

'.&mt('You are already logged in!').'

' - .'

'.&mt('Please either [_1]continue the current session[_2] or [_3]logout[_4].', - '','','','').'

' + .'

'.&mt('Please either [_1]continue the current session[_2] or [_3]log out[_4].', + '','','','').'

' .'

'.&mt('Login problems?').'

' .$end_page ); @@ -103,13 +107,28 @@ sub handler { $env{'form.interface'}=~s/\W//g; my $httpbrowser=$ENV{"HTTP_USER_AGENT"}; - - my $fullgraph=($env{'form.interface'} ne 'textual'); my $iconpath= &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL')); + my $lonhost = $r->dir_config('lonHostID'); my $domain = &Apache::lonnet::default_login_domain(); + my %domconfig = &Apache::loncommon::get_domainconf($domain); + if ($lonhost ne '') { + if (ref($domconfig{login}) eq 'HASH') { + if (ref($domconfig{login}{loginvia}) eq 'HASH') { + if ($domconfig{login}{loginvia}{$lonhost}) { + my $loginvia = $domconfig{login}{loginvia}{$lonhost}; + my %servers = &Apache::lonnet::get_servers($domain); + if (($servers{$loginvia} ne '') && ($loginvia ne $lonhost)) { + $r->print(&redirect_page($loginvia)); + return OK; + } + } + } + } + } + if (($env{'form.domain'}) && (&Apache::lonnet::domain($env{'form.domain'},'description'))) { $domain=$env{'form.domain'}; @@ -117,7 +136,6 @@ sub handler { my $role = $r->dir_config('lonRole'); my $loadlim = $r->dir_config('lonLoadLim'); my $servadm = $r->dir_config('lonAdmEMail'); - my $lonhost = $r->dir_config('lonHostID'); my $tabdir = $r->dir_config('lonTabDir'); my $include = $r->dir_config('lonIncludes'); my $expire = $r->dir_config('lonExpire'); @@ -172,8 +190,18 @@ sub handler { if ($uextkey>2147483647) { $uextkey-=4294967296; } # -------------------------------------------------------- Store away log token + my $tokenextras; + if ($env{'form.role'}) { + $tokenextras = '&role='.&escape($env{'form.role'}); + } + if ($env{'form.symb'}) { + if (!$tokenextras) { + $tokenextras = '&'; + } + $tokenextras .= '&symb='.&escape($env{'form.symb'}); + } my $logtoken=Apache::lonnet::reply( - 'tmpput:'.$ukey.$lkey.'&'.$firsturl, + 'tmpput:'.$ukey.$lkey.'&'.$firsturl.$tokenextras, $lonhost); # ------------------- If we cannot talk to ourselves, we are in serious trouble @@ -235,17 +263,12 @@ return OK; $servadm=~s/\,/\
/g; # ----------------------------------------------------------- Front page design -my $pgbg= -($fullgraph?&Apache::loncommon::designparm('login.pgbg',$domain):'#FFFFFF'); -my $font= -($fullgraph?&Apache::loncommon::designparm('login.font',$domain):'#000000'); -my $link= -($fullgraph?&Apache::loncommon::designparm('login.link',$domain):'#0000FF'); -my $vlink= -($fullgraph?&Apache::loncommon::designparm('login.vlink',$domain):'#0000FF'); +my $pgbg=&Apache::loncommon::designparm('login.pgbg',$domain); +my $font=&Apache::loncommon::designparm('login.font',$domain); +my $link=&Apache::loncommon::designparm('login.link',$domain); +my $vlink=&Apache::loncommon::designparm('login.vlink',$domain); my $alink=&Apache::loncommon::designparm('login.alink',$domain); -my $mainbg= -($fullgraph?&Apache::loncommon::designparm('login.mainbg',$domain):'#FFFFFF'); +my $mainbg=&Apache::loncommon::designparm('login.mainbg',$domain); my $logo=&Apache::loncommon::designparm('login.logo',$domain); my $img=&Apache::loncommon::designparm('login.img',$domain); my $domainlogo=&Apache::loncommon::domainlogo($domain); @@ -270,7 +293,8 @@ my $shownewuserlink = my $now=time; my $js = (< + ENDSCRIPT # --------------------------------------------------- Print login screen header -my %add_entries = (topmargin => "0", - leftmargin => "0", - marginheight => "0", - marginwidth => "0", +my %add_entries = ( bgcolor => "$mainbg", text => "$font", link => "$link", @@ -326,7 +348,6 @@ my %lt=&Apache::lonlocal::texthash( 'perc' => 'percent', 'load' => 'Server Load', 'userload' => 'User Load', - 'about' => 'About LON-CAPA', 'catalog' => 'Course Catalog', 'log' => 'Log in', 'help' => 'Log-in Help', @@ -347,10 +368,13 @@ $r->print(<$jsh>); } # ---------------------------------------------------------- Serve rest of page -if ($fullgraph) { $r->print( '
'); -} + +# +# If the loadbalancing yielded just http:// because perhaps there's no loadbalancing? +# then just us a relative link to authenticate: +# $r->print(< @@ -389,7 +413,7 @@ my $contactblock = &contactdisplay(\%lt, $version,$authdomain,\$helpdeskscript); my $loginform=(< +
:
@@ -402,7 +426,6 @@ my $loginform=(< LFORM -if ($fullgraph) { if ($showbanner) { $r->print(< @@ -415,12 +438,9 @@ if ($fullgraph) { HEADER } - if ($showmainlogo) { - $r->print('
 
'."\n". - ' '."\n"); - } $r->print(<$domainlogo
+
 
+
$logintitle @@ -438,18 +458,19 @@ HEADER $forgotpw
$contactblock
$newuserlink - $coursecatalog

- $lt{'about'} + $coursecatalog - -
 
+ +ENDTOP + if ($showmainlogo) { + $r->print(' '."\n"); + } +$r->print(<  ENDTOP -} - -if($announcements){$r->print('
 
');} -if ($fullgraph) { $r->print(<
@@ -488,18 +509,33 @@ $r->print(< $helpdeskscript ENDDOCUMENT -} my %endargs = ( 'noredirectlink' => 1, ); $r->print(&Apache::loncommon::end_page(\%endargs)); return OK; } +sub redirect_page { + my ($desthost) = @_; + my $protocol = $Apache::lonnet::protocol{$desthost}; + $protocol = 'http' if ($protocol ne 'https'); + my $url = $protocol.'://'.&Apache::lonnet::hostname($desthost).'/'; + if ($env{'form.firsturl'} ne '') { + $url .='?firsturl='.$env{'form.firsturl'}; + } + my $start_page = &Apache::loncommon::start_page('Switching Server',undef, + {'redirect' => [0,$url],}); + my $end_page = &Apache::loncommon::end_page(); + return $start_page.$end_page; +} + sub contactdisplay { my ($lt,$servadm,$showadminmail,$version,$authdomain,$helpdeskscript) = @_; my $contactblock; @@ -517,6 +553,7 @@ sub contactdisplay { my $thisurl = &escape('/adm/login'); $$helpdeskscript = <<"ENDSCRIPT"; ENDSCRIPT } 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.