Apache2-AuthAny

 view release on metacpan or  search on metacpan

lib/Apache2/AuthAny/AuthzHandler.pm  view on Meta::CPAN

package Apache2::AuthAny::AuthzHandler;

use strict;
use Apache2::Const -compile => qw(OK DECLINED HTTP_UNAUTHORIZED);
use Data::Dumper qw(Dumper);

use Apache2::AuthAny::DB qw();
our $VERSION = '0.201';

sub handler {
    my $r = shift;

    my $cf = Apache2::Module::get_config('Apache2::AuthAny',
                                         $r->server,
                                         $r->per_dir_config) || {};

    my %require;
    foreach my $req (@{ $r->requires }) {
        my ($k, @v) = split /\s+/, $req->{requirement};
#        warn "\$k => $k, \@v => @v";
        unless ($k) {
            my $msg = "Configuration error. Lone Require";
            $r->log->error("Apache2::AuthAny::AuthzHandler: $msg");
            die $msg;
        }
        $k = lc($k);

        if ($k eq 'valid-user') {
            $require{'valid-user'} = 1;

        } elsif ($k eq 'identified-user') {
            $require{'identified-user'} = 1;

         } elsif ($k eq 'authenticated') {
             $require{'authenticated'} = 1;

         } elsif ($k eq 'session') {
             $require{'session'} = 1;

        } elsif ($k eq 'user') {
            foreach my $user (@v) {
                $require{user}{$user} = 1;
            }

        } elsif ($k eq 'role') {
            foreach my $role (@v) {
                push @{ $require{role} }, $role;
            }

        } else {
            my $msg = "invalid Require statement 'Require $req->{requirement}'";
            die "$msg";
        }
    }

#    warn Dumper(\%require);
    unless (%require) {
        my $msg = "Apache2::AuthAny::AuthzHandler: No 'Require'. WTF";
        $r->log->error($msg);
        die $msg;
        #return Apache2::Const::DECLINED;
    }

    my $user_permitted = 0;
    $r->log->info("Authz: %require: '" . Dumper(\%require) . "'");



( run in 0.919 second using v1.01-cache-2.11-cpan-39bf76dae61 )