Diff for /loncom/auth/lonlogout.pm between versions 1.9 and 1.24

version 1.9, 2003/05/23 21:18:56 version 1.24, 2007/01/12 15:54:12
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # (Cookie Based Access Handler  
 # 5/21/99,5/22,5/29,5/31,6/15,16/11,22/11,  
 # 01/06,01/13 Gerd Kortemeyer)  
 # 05/31,11/29,12/29 Gerd Kortemeyer  
   
 package Apache::lonlogout;  package Apache::lonlogout;
   
Line 38  use Apache::File; Line 34  use Apache::File;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::lonmenu;  use Apache::lonmenu;
 use CGI::Cookie();  use CGI::Cookie();
   use Apache::lonlocal;
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
   
       #Check for cookie
     my $requrl=$r->uri;      my $requrl=$r->uri;
     my %cookies=CGI::Cookie->parse($r->header_in('Cookie'));      my %cookies=CGI::Cookie->parse($r->header_in('Cookie'));
     my $lonid=$cookies{'lonID'};      my $lonid=$cookies{'lonID'};
     my $cookie;      my $cookie;
     if ($lonid) {      if (!$lonid) {
  my $handle=$lonid->value;   return FORBIDDEN;
         $handle=~s/\W//g;      }
         my $lonidsdir=$r->dir_config('lonIDsDir');  
         if ((-e "$lonidsdir/$handle.id") && ($handle ne '')) {      #check if cookie still valid
            my @profile;      my $handle=&LONCAPA::clean_handle($lonid->value);
            my %sessionhash;      my $lonidsdir=$r->dir_config('lonIDsDir');
     {      if ((!-e "$lonidsdir/$handle.id") || ($handle eq '')) {
              my $idf=Apache::File->new("$lonidsdir/$handle.id");   $r->log_reason("Cookie $handle not valid", $r->filename); 
              @profile=<$idf>;   return FORBIDDEN;
     }      }
             my $envi;  
             for ($envi=0;$envi<=$#profile;$envi++) {      #we've got a valid user
  chomp($profile[$envi]);      my @profile;
  my ($envname,$envvalue)=split(/=/,$profile[$envi]);      &Apache::lonnet::transfer_profile_to_env($lonidsdir,$handle);
                 $sessionhash{$envname}=$envvalue;      unlink("$lonidsdir/$handle.id");
             }      my %temp=('logout' => time);
             unlink("$lonidsdir/$handle.id");      &Apache::lonnet::put('email_status',\%temp);
     my %temp=('logout' => time);      &Apache::lonnet::log($env{'user.domain'},
     &Apache::lonnet::put('email_status',\%temp);   $env{'user.name'},
     &Apache::lonnet::log($sessionhash{'user.domain'},   $env{'user.home'},
                                  $sessionhash{'user.name'},   "Logout $ENV{'REMOTE_ADDR'}");
                                  $sessionhash{'user.home'},      &Apache::loncommon::content_type($r,'text/html');
                                  "Logout $ENV{'REMOTE_ADDR'}");      $r->send_http_header;
             $r->content_type('text/html');      return OK if $r->header_only;
             $r->send_http_header;  
             return OK if $r->header_only;  
 # -------------------------------------------------------- Menu script and info  # -------------------------------------------------------- Menu script and info
   
     my $windowinfo=&Apache::lonmenu::close();      my $windowinfo=&Apache::lonmenu::close();
       $windowinfo.=&Apache::lonnavmaps::close();
 # ---------------------------------------------------------------- Get handover  # ---------------------------------------------------------------- Get handover
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['handover']);      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['handover']);
     my $switch='';      my $switch='';
     my $bodytag='';      my $start_page='';
     my $relogmessage='';      my $relogmessage='';
     if ($ENV{'form.handover'}) {      if ($env{'form.handover'}) {
        $switch='<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url='.   $switch='<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url='.
    $ENV{'form.handover'}.'">';      $env{'form.handover'}.'">';
        $bodytag=&Apache::loncommon::bodytag('Switching Server ...');   $start_page=&Apache::loncommon::start_page('Switching Server ...',
    } else {     $switch);
        $bodytag=&Apache::loncommon::bodytag('Logged Out',undef,' ');      } else {
        $relogmessage=(<<ENDRELOG);   $start_page=&Apache::loncommon::start_page('Logged Out',undef,
 <h1>Goodbye!</h1>     {'no_inline_link' => 1,});
 Please either <a href="javascript:self.close();">close this window</a> or   my %lt=&Apache::lonlocal::texthash('gb' => 'Goodbye',
 <a href="/adm/login">log in again</a>.     'cw' => 'close this window',
      'li' => 'log in again',
      'pe' => 'Please either',
      'or' => 'or');
           my $relogin_server;
           if ($env{'request.sso.reloginserver'}) {
               $relogin_server = $env{'request.sso.reloginserver'};
           }
    my $login_url = $relogin_server.'/adm/'.
                           ($env{'request.sso.login'} ? 'roles': 'login');
    
    $relogmessage=(<<ENDRELOG);
    <h1>$lt{'gb'}!</h1>
       $lt{'pe'} <a href="javascript:self.close();">$lt{'cw'}</a> $lt{'or'}
    <a href="$login_url?domain=$env{'user.domain'}">$lt{'li'}</a>.
 ENDRELOG  ENDRELOG
    }  
           if ($env{'request.sso.login'}
       && defined($r->dir_config('lonSSOUserLogoutMessageFile'))) {
       open(my $fh,$r->dir_config('lonSSOUserLogoutMessageFile'));
       $relogmessage.= join('',<$fh>);
    }
   
       }
       my $end_page=&Apache::loncommon::end_page();
 # --------------------------------------------------------------- Screen Output  # --------------------------------------------------------------- Screen Output
             $r->print(<<ENDDOCUMENT);      $r->print(<<ENDDOCUMENT);
 <html>  $start_page
 <head><title>The LearningOnline Network with CAPA Logout</title>  
 $switch  
 </head>  
 $bodytag  
 $windowinfo  $windowinfo
 $relogmessage  $relogmessage
 </body>  $end_page
 </html>  
 ENDDOCUMENT  ENDDOCUMENT
             &Apache::lonnet::flushcourselogs();      &Apache::lonnet::flushcourselogs();
             return OK;       return OK; 
         } else {   
             $r->log_reason("Cookie $handle not valid", $r->filename);   
         }  
     }  
     return FORBIDDEN;  
 }  }
   
 1;  1;

Removed from v.1.9  
changed lines
  Added in v.1.24


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
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.