--- loncom/auth/publiccheck.pm 2006/04/13 19:07:33 1.2 +++ loncom/auth/publiccheck.pm 2006/07/21 19:42:12 1.9 @@ -1,7 +1,7 @@ # The LearningOnline Network # Cookie Based Access Handler # -# $Id: publiccheck.pm,v 1.2 2006/04/13 19:07:33 albertel Exp $ +# $Id: publiccheck.pm,v 1.9 2006/07/21 19:42:12 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,6 +40,7 @@ use Apache::lonacc(); sub handler { my $r = shift; + my $requrl=$r->uri; my %cookies=CGI::Cookie->parse($r->header_in('Cookie')); my $lonid=$cookies{'lonID'}; @@ -56,25 +57,66 @@ sub handler { } } if ($requrl=~m|^/public/| + || $requrl=~m|^/adm/help/.*\.hlp$| || (&Apache::lonnet::metadata($requrl,'copyright') eq 'public')) { - &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->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; + &process_public($r,$requrl); 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; } +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; __END__