# The LearningOnline Network # Login Screen NSDL version # # $Id: lonlogin.pm,v 1.4 2003/08/29 14:50:13 www Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # LON-CAPA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ # # 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14, # 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9, # 1/17/01 Gerd Kortemeyer # # 2/7/02,2/8,2/12,2/14,2/15,2/19 Josh Brunskole # # 7/10/02 Jeremy Bowers package Apache::lonlogin; use strict; use Apache::Constants qw(:common); use Apache::File (); use Apache::lonnet(); use Apache::loncommon(); sub handler { my $r = shift; $r->content_type('text/html'); &Apache::loncommon::no_cache($r); $r->send_http_header; return OK if $r->header_only; &Apache::loncommon::get_unprocessed_cgi ($ENV{'QUERY_STRING'}.'&'.$ENV{'request.querystring'}, ['interface','username','domain','firsturl','localpath','localres']); # ----------------------------------------------------------- Process Interface $ENV{'form.interface'}=~s/\W//g; my $textbrowsers=$r->dir_config('lonTextBrowsers'); my $httpbrowser=$ENV{"HTTP_USER_AGENT"}; foreach (split(/\:/,$textbrowsers)) { if ($httpbrowser=~/$_/i) { $ENV{'form.interface'}='textual'; } } my $fullgraph=($ENV{'form.interface'} ne 'textual'); my $port_to_use=$r->dir_config('lonhttpdPort'); if (!defined($port_to_use)) { $port_to_use='8080'; } my $iconpath= 'http://'.$ENV{'HTTP_HOST'}.':'.$port_to_use. $r->dir_config('lonIconsURL'); my $domain = $r->dir_config('lonDefDomain'); my $role = $r->dir_config('lonRole'); my $loadlim = $r->dir_config('lonLoadLim'); my $servadm = $r->dir_config('lonAdmEMail'); my $sysadm = $r->dir_config('lonSysEMail'); my $lonhost = $r->dir_config('lonHostID'); my $tabdir = $r->dir_config('lonTabDir'); my $include = $r->dir_config('lonIncludes'); my $expire = $r->dir_config('lonExpire'); # --------------------------------------------- Default values for login fields my $authusername=($ENV{'form.username'}?$ENV{'form.username'}:''); my $authdomain=($ENV{'form.domain'}?$ENV{'form.domain'}:$domain); # ---------------------------------------------------------- Determine own load my $loadavg; { my $loadfile=Apache::File->new('/proc/loadavg'); $loadavg=<$loadfile>; } $loadavg =~ s/\s.*//g; my $loadpercent=100*$loadavg/$loadlim; my $userloadpercent=&Apache::lonnet::userload(); # ------------------------------------------------------- Do the load balancing my $otherserver='http://'.$ENV{'SERVER_NAME'}; my $firsturl= ($ENV{'request.firsturl'}?$ENV{'request.firsturl'}:$ENV{'form.firsturl'}); my $escfirsturl=&Apache::lonnet::escape($firsturl); # ---------------------------------------- Are we access server and overloaded? if (($role eq 'access') && (($userloadpercent>100.0)||($loadpercent>100.0))) { my $unloaded=Apache::lonnet::spareserver($loadpercent,$userloadpercent); if ($unloaded) { $otherserver=$unloaded; } } # -------------------------------------------------------- Set login parameters my @hexstr=('0','1','2','3','4','5','6','7', '8','9','a','b','c','d','e','f'); my $lkey=''; for (0..7) { $lkey.=$hexstr[rand(15)]; } my $ukey=''; for (0..7) { $ukey.=$hexstr[rand(15)]; } my $lextkey=hex($lkey); if ($lextkey>2147483647) { $lextkey-=4294967296; } my $uextkey=hex($ukey); if ($uextkey>2147483647) { $uextkey-=4294967296; } # -------------------------------------------------------- Store away log token my $logtoken=Apache::lonnet::reply( 'tmpput:'.$ukey.$lkey.'&'.$firsturl, $lonhost); # ------------------- If we cannot talk to ourselves, we are in serious trouble if ($logtoken eq 'con_lost') { my $spares=''; foreach (keys %Apache::lonnet::hostname) { if ($_ ne $lonhost) { $spares.='
'. $Apache::lonnet::hostname{$_}.''; if ($Apache::lonnet::spareid{$_}) { $spares.=' (preferred)'; } } } $r->print(< The LearningOnline Network with CAPA

This LON-CAPA server is temporarily not available for login

Please attempt to login to one of the following servers:

$spares

If the problem persists, please contact $servadm.

ENDTROUBLE return OK; } # ----------------------------------------------- Apparently we are in business my $domainlogo=&Apache::loncommon::domainlogo(); $servadm=~s/\,/\
/g; $sysadm=~s/\,/\
/g; # --------------------------------------------------- Print login screen header $r->print(< The LearningOnline Network with CAPA Login ENDHEADER # ---------------------------------------------------- Serve out DES JavaScript { my $jsh=Apache::File->new($include."/londes.js"); $r->print(<$jsh>); } # ----------------------------------------------------------- Front page design my $pgbg= ($fullgraph?&Apache::loncommon::designparm('login.pgbg'):'#FFFFFF'); my $font= ($fullgraph?&Apache::loncommon::designparm('login.font'):'#000000'); my $link= ($fullgraph?&Apache::loncommon::designparm('login.link'):'#0000FF'); my $vlink= ($fullgraph?&Apache::loncommon::designparm('login.vlink'):'#0000FF'); my $alink=&Apache::loncommon::designparm('login.alink'); my $mainbg= ($fullgraph?&Apache::loncommon::designparm('login.mainbg'):'#FFFFFF'); my $sidebg= ($fullgraph?&Apache::loncommon::designparm('login.sidebg'):'#FFFFFF'); my $logo=&Apache::loncommon::designparm('login.logo'); my $img=&Apache::loncommon::designparm('login.img'); # ---------------------------------------------------------- Serve rest of page $r->print(< ENDSCRIPT if ($fullgraph) { $r->print( ''); } $r->print(< ENDSERVERFORM if ($fullgraph) { $r->print(<

Welcome to the LON-CAPA NSDL Gateway

Sign up for a Guest Login

 
Accessibility Options
About LON-CAPA
ENDTOP } else { $r->print('

The LearningOnline Network with CAPA

Text-based Interface Login

'); } $r->print('
'); unless ($fullgraph) { $r->print(<Select Accessibility Options Suppress rendering of images
Suppress Java applets
Suppress rendering of embedded multimedia
Increase font size
Switch to black and white mode

If you have accessibility needs that are not addressed by this interface, please contact the system administrator at $sysadm.


Remember these settings for next login
ENDACCESSOPTIONS } else { $r->print(< ENDNOOPT } $r->print(<
User Authentication

   User Name:

   Password:
   Domain:
   Help
ENDLOGIN if ($fullgraph) { $r->print(<

   Domain:   $domain
   Server:   $lonhost ($role)
   Load:   $loadpercent percent
   User Load:   $userloadpercent percent

   System Administration:
      $sysadm
   Server Administration:
      $servadm
 
$domainlogo
 
ENDDOCUMENT } $r->print(''); return OK; } 1; __END__