File:  [LON-CAPA] / loncom / auth / lonauth.pm
Revision 1.3: download - view: text, annotated - select for diffs
Thu Dec 16 20:30:55 1999 UTC (24 years, 6 months ago) by www
Branches: MAIN
CVS tags: HEAD
lonauth imports roles into environment

    1: # The LearningOnline Network
    2: # User Authentication Module
    3: # 5/21/99,5/22,5/25,5/26,5/27,5/29,6/2,6/11,6/14,6/15
    4: # 16/11,12/16 Gerd Kortemeyer
    5: 
    6: package Apache::lonauth;
    7: 
    8: use Apache::Constants qw(:common);
    9: use Apache::File;
   10: use CGI qw(:standard);
   11: use CGI::Cookie();
   12: use Apache::lonnet();
   13: 
   14: # ------------------------------------------------------------ Successful login
   15: 
   16: sub success {
   17:     my ($r, $lowerurl, $username, $domain, $authhost) = @_;
   18:     my $lonids=$r->dir_config('lonIDsDir');
   19: # See if old ID present, but overlooked
   20:     my $cookie;
   21:     if ($cookie=<$lonids/$username\_*\_$domain\_$authhost.id>) {
   22: 	$cookie=~s/\.id//;
   23:         $cookie=~s/$lonids\///;
   24:     } else {
   25:         my $now=time;
   26:         $cookie="$username\_$now\_$domain\_$authhost";
   27:         my $userroles=Apache::lonnet::reply(
   28: 					    "dump:$domain:$username:roles",
   29:                                             $authhost);
   30:         $userroles=~s/&/\n/g;
   31:         {
   32: 	    my $idf=Apache::File->new(">$lonids/$cookie.id");
   33:             print $idf "username=$username\n";
   34:             print $idf "userdomain=$domain\n";
   35:             print $idf "userhome=$authhost\n";
   36:             print $idf "$userroles\n";
   37:         }
   38:     }
   39:     $cookie="lonID=$cookie; path=/";
   40:     $r->send_cgi_header(<<ENDHEADER);
   41: Content-type: text/html
   42: Set-cookie: $cookie
   43: 
   44: ENDHEADER
   45:     $r->print(<<ENDSUCCESS);
   46: <html>
   47: <head>
   48: <title>Successful Login to the LearningOnline Network</title>
   49: </head>
   50: <frameset rows="80,*" border=0>
   51: <frame scrolling="no" name="loncontrol" src="/adm/menu">
   52: <frame name="loncontent" src="$lowerurl">
   53: </frameset>
   54: </html>
   55: ENDSUCCESS
   56: }
   57: 
   58: # --------------------------------------------------------------- Failed login!
   59: 
   60: sub failed {
   61:     my ($r,$message) = @_;
   62:     $r->send_cgi_header(<<ENDFHEADER);
   63: Content-type: text/html
   64: 
   65: ENDFHEADER
   66:     $r->print(<<ENDFAILED);
   67: <html>
   68: <head>
   69: <title>Unsuccessful Login to the LearningOnline Network</title>
   70: </head>
   71: <html>
   72: <body bgcolor="#FFFFFF">
   73: <h1>Sorry ...</h1>
   74: <h2>$message to use the Learning<i>Online</i> Network</h2>
   75: </body>
   76: </html>
   77: ENDFAILED
   78: }
   79: 
   80: # ---------------------------------------------------------------- Main handler
   81: 
   82: sub handler {
   83:     my $r = shift;
   84: 
   85:     my $buffer;
   86:     $r->read($buffer,$r->header_in('Content-length'));
   87:     my @pairs=split(/&/,$buffer);
   88:     my $pair; my $name; my $value; my %FORM;
   89:     foreach $pair (@pairs) {
   90:        ($name,$value) = split(/=/,$pair);
   91:        $FORM{$name}=$value;
   92:     } 
   93: 
   94:     if ((!$FORM{'uname'}) || (!$FORM{'upass'}) || (!$FORM{'udom'})) {
   95: 	failed($r,'Username, password and domain need to be specified');
   96:         return OK;
   97:     }
   98:     $FORM{'uname'} =~ s/\W//g;
   99:     $FORM{'upass'} =~ s/\W//g;
  100:     $FORM{'udom'}  =~ s/\W//g;
  101: 
  102:     my $role   = $r->dir_config('lonRole');
  103:     my $domain = $r->dir_config('lonDefDomain');
  104:     my $prodir = $r->dir_config('lonUsersDir');
  105: 
  106: # ---------------------------------------------------------------- Authenticate
  107:     my $authhost=Apache::lonnet::authenticate($FORM{'uname'},
  108:                                               $FORM{'upass'},
  109:                                               $FORM{'udom'});
  110:     
  111: # --------------------------------------------------------------------- Failed?
  112: 
  113:     if ($authhost eq 'no_host') {
  114: 	failed($r,'Username and/or password could not be authenticated');
  115:         return OK;
  116:     }
  117: 
  118:     my %cookies=CGI::Cookie->parse($r->header_in('Cookie'));
  119:     my $lonurl=$cookies{'lonURL'};
  120:     if (!$lonurl) { failed($r,'Cookies need to be activated'); return OK; }
  121:     my $lowerurl=$lonurl->value;
  122: 
  123:     success($r,$lowerurl,$FORM{'uname'},$FORM{'udom'},$authhost);
  124:     return OK;
  125: }
  126: 
  127: 1;
  128: __END__

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>