Diff for /loncom/auth/switchserver.pm between versions 1.4 and 1.23

version 1.4, 2005/10/28 21:51:43 version 1.23, 2010/03/10 21:25:29
Line 37  use Apache::lonlocal; Line 37  use Apache::lonlocal;
   
 sub init_env {  sub init_env {
     my ($r) = @_;      my ($r) = @_;
       
       if (-e $env{'user.environment'}) {
    return  $env{'user.environment'};
       }
     my $requrl=$r->uri;      my $requrl=$r->uri;
     my %cookies=CGI::Cookie->parse($r->header_in('Cookie'));      my $handle= &Apache::lonnet::check_for_valid_session($r);
     my $lonid=$cookies{'lonID'};      if ($handle ne '') {
     my $cookie;  
     if (!$lonid) { return undef; }  
   
     my $handle=$lonid->value;  
     $handle=~s/\W//g;  
     my $lonidsdir=$r->dir_config('lonIDsDir');  
     if ((!-e "$lonidsdir/$handle.id") || ($handle eq '')) {  
  $r->log_reason("Cookie $handle not valid", $r->filename);   
  return undef;   return undef;
     }      }
       my $lonidsdir=$r->dir_config('lonIDsDir');
     &Apache::lonnet::transfer_profile_to_env($lonidsdir,$handle);      &Apache::lonnet::transfer_profile_to_env($lonidsdir,$handle);
           
     return $handle;      return $r->dir_config('lonIDsDir')."/$handle.id";
   }
   
   sub do_redirect {
       my ($r,$url,$only_body,$extra_text) = @_;
       $r->send_http_header;
       my $start_page = 
    &Apache::loncommon::start_page('Switching Server ...',undef,
          {'redirect'       => [0.5,$url],
                                           'no_inline_link' => 1,
    'only_body'      => $only_body,});
       my $end_page   = &Apache::loncommon::end_page();
       $r->print($start_page.$extra_text.$end_page);
       return OK;
   
 }  }
   
 sub handler {  sub handler {
     my $r = shift;      my ($r) = @_;
       
           
     my $handle=&init_env($r);      my $handle=&init_env($r);
     if (!defined($handle)) { return FORBIDDEN; }      if (!defined($handle)) { return FORBIDDEN; }
   
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
     ['otherserver','role']);   ['otherserver','role','origurl','symb']);
      
     my $switch_to=$Apache::lonnet::hostname{$env{'form.otherserver'}};      my $switch_to=&Apache::lonnet::hostname($env{'form.otherserver'});
     if (!$env{'form.otherserver'}) {      if (! $env{'form.otherserver'}) {
  $env{'form.otherserver'}=&Apache::lonnet::spareserver(30000,undef,1);   $env{'form.otherserver'} =
  $switch_to=$Apache::lonnet::hostname{$env{'form.otherserver'}};      &Apache::lonnet::find_existing_session($env{'user.domain'},
      $env{'user.name'});
    if (! $env{'form.otherserver'}) {
       $env{'form.otherserver'} = 
    &Apache::lonnet::spareserver(30000,undef,1);
    }
   
    $switch_to=&Apache::lonnet::hostname($env{'form.otherserver'});
     }      }
   
     if (!defined($switch_to)) { return FORBIDDEN; }      if (!defined($switch_to)) { return FORBIDDEN; }
   
       if ($env{'user.name'} eq 'public'
    && $env{'user.domain'} eq 'public') {
    my $url = 'http://'.$switch_to.$r->uri;
    return &do_redirect($r,$url,1)
       }
   
     if ($env{'form.role'} &&       if ($env{'form.role'} && 
  !exists($env{'user.role.'.$env{'form.role'}})) { return FORBIDDEN; }   !exists($env{'user.role.'.$env{'form.role'}})) { return FORBIDDEN; }
   
     #remove session env, and log event      #remove session env, and log event
     unlink($r->dir_config('lonIDsDir')."/$handle.id");      unlink($handle);
     my %temp=('switchserver' => time.':'.$env{'form.otherserver'},      my %temp=('switchserver' => time.':'.$env{'form.otherserver'},
       $env{'form.role'});        $env{'form.role'});
     &Apache::lonnet::put('email_status',\%temp);      &Apache::lonnet::put('email_status',\%temp);
Line 86  sub handler { Line 109  sub handler {
  "Switch Server to $env{'form.otherserver'} with role $env{'form.role'} $ENV{'REMOTE_ADDR'}");   "Switch Server to $env{'form.otherserver'} with role $env{'form.role'} $ENV{'REMOTE_ADDR'}");
   
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;  
     return OK if $r->header_only;      #expire the cookie
       my $c = new CGI::Cookie(-name    => 'lonID',
       -value   => '',
       -expires => '-10y',);
       $r->header_out('Set-cookie' => $c);
   
       if ($r->header_only) {
    $r->send_http_header;
    return OK;
       }
 # -------------------------------------------------------- Menu script and info  # -------------------------------------------------------- Menu script and info
         
     my $windowinfo=&Apache::lonmenu::close();      my $windowinfo=
     $windowinfo.=&Apache::lonnavmaps::close();   &Apache::lonnavmaps::close();
 # ---------------------------------------------------------------- Get handover  # ---------------------------------------------------------------- Get handover
   
     my %info=('ip'       => $ENV{'REMOTE_ADDR'},      my %info=('ip'       => $ENV{'REMOTE_ADDR'},
Line 99  sub handler { Line 131  sub handler {
       'username' => $env{'user.name'},        'username' => $env{'user.name'},
       'role'     => $env{'form.role'},        'role'     => $env{'form.role'},
       'server'   => $r->dir_config('lonHostID'));        'server'   => $r->dir_config('lonHostID'));
       if ($env{'form.origurl'}) {
           $info{'origurl'} = $env{'form.origurl'};
       }
       if ($env{'form.symb'}) {
           $info{'symb'} = $env{'form.symb'};
       }
       if ($env{'request.sso.login'}) {
    $info{'sso.login'} = $env{'request.sso.login'};
       }
       if ($env{'request.sso.reloginserver'}) {
           $info{'sso.reloginserver'} = $env{'request.sso.reloginserver'};
       }
     my $token = &Apache::lonnet::tmpput(\%info,$env{'form.otherserver'});      my $token = &Apache::lonnet::tmpput(\%info,$env{'form.otherserver'});
     my $switch='<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url=http://'.$switch_to.'/adm/migrateuser?token='.$token.'">';      my $url ='http://'.$switch_to.'/adm/login?'.
     my $bodytag=&Apache::loncommon::bodytag('Switching Server ...');   'domain='.$env{'user.domain'}.
    '&amp;username='.$env{'user.name'}.
    '&amp;token='.$token;
 # --------------------------------------------------------------- Screen Output  # --------------------------------------------------------------- Screen Output
     $r->print(<<ENDDOCUMENT);  
    <html>  
        <head><title>The LearningOnline Network with CAPA Logout</title>  
        $switch  
        </head>  
        $bodytag  
        $windowinfo  
        </body>  
        </html>  
 ENDDOCUMENT  
   
     &Apache::lonnet::flushcourselogs();      &Apache::lonnet::flushcourselogs();
     return OK;      return &do_redirect($r,$url,0,$windowinfo);
 }  }
   
 1;  1;

Removed from v.1.4  
changed lines
  Added in v.1.23


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.