Diff for /loncom/auth/publiccheck.pm between versions 1.1 and 1.9

version 1.1, 2006/04/05 22:34:18 version 1.9, 2006/07/21 19:42:12
Line 31  package Apache::publiccheck; Line 31  package Apache::publiccheck;
   
 use strict;  use strict;
 use Apache::Constants qw(:common :http :methods);  use Apache::Constants qw(:common :http :methods);
 use Apache::File;  
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonlocal;  use Apache::lonlocal;
 use CGI::Cookie();  use CGI::Cookie();
 use Fcntl qw(:flock);  use Fcntl qw(:flock);
   use Apache::lonacc();
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
   
     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'};
Line 56  sub handler { Line 57  sub handler {
  }   }
     }      }
     if ($requrl=~m|^/public/|      if ($requrl=~m|^/public/|
    || $requrl=~m|^/adm/help/.*\.hlp$|
  || (&Apache::lonnet::metadata($requrl,'copyright') eq 'public')) {   || (&Apache::lonnet::metadata($requrl,'copyright') eq 'public')) {
         &Apache::lonnet::logthis('Granting public access: '.$requrl);          &process_public($r,$requrl);
  if ($env{'user.name'} ne 'public'   
     && $env{'user.domain'} ne 'public') {  
     my $cookie=  
  &Apache::lonauth::success($r,'public','public','public');  
     my $lonidsdir=$r->dir_config('lonIDsDir');  
     &Apache::lonnet::transfer_profile_to_env($lonidsdir,$cookie);  
     $r->header_out('Set-cookie',"lonID=$cookie; path=/");  
  }  
  &Apache::loncommon::get_posted_cgi($r);  
         $env{'request.state'} = "published";  
         $env{'request.publicaccess'} = 1;  
         $env{'request.filename'} = $r->filename;  
         return OK;          return OK;
     }      } elsif (&Apache::lonnet::is_portfolio_url($requrl)) {
    my (undef,$udom,$unum,$file_name,$group) = 
       &Apache::lonnet::parse_portfolio_url($requrl);
           my $access = &process_portfolio($udom,$unum,$file_name,$group);
           if ($access) {
               &process_public($r,$requrl,$access);
               return OK;
           } 
       } elsif ($requrl eq '/adm/restrictedaccess') {
           &process_public($r,$requrl);
    return OK;
       } 
     return DECLINED;      return DECLINED;
 }  }
   
   sub process_public {
       my ($r,$requrl,$access) = @_;
       &Apache::lonnet::logthis('Granting public access: '.$requrl);
       if ($env{'user.name'} ne 'public' && $env{'user.domain'} ne 'public') {
           my $cookie=&Apache::lonauth::success($r,'public','public','public');
           my $lonidsdir=$r->dir_config('lonIDsDir');
           &Apache::lonnet::transfer_profile_to_env($lonidsdir,$cookie);
    $r->err_header_out('Set-cookie',"lonID=$cookie; path=/");
       }
       &Apache::lonacc::get_posted_cgi($r);
       $env{'request.state'} = "published";
       $env{'request.publicaccess'} = 1;
       $env{'request.filename'} = $r->filename;
       return;
   }
   
   sub process_portfolio {
       my ($udom,$unum,$file_name,$group) = @_;
       my $current_perms = &Apache::lonnet::get_portfile_permissions($udom,$unum);
       my %access_controls = &Apache::lonnet::get_access_controls($current_perms,$group,$file_name);
       my $access = '';
       my $now = time;
       foreach my $key (keys(%{$access_controls{$file_name}})) {
           my ($num,$scope,$end,$start) = ($key =~ /^([^:]+):([a-z]+)_(\d*)_?(\d*)$/);
           if ($start > $now) {
               next;
           }
           if ($end && $end<$now) {
               next;
           }
           if ($scope eq 'public') {
               $access = 'public';
               last;
           }
           if ($scope eq 'guest') {
               $access = 'guest';
           }
       }
       return $access;
   }
   
 1;  1;
   
 __END__  __END__

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


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