Auth-Kokolores
view release on metacpan or search on metacpan
lib/Auth/Kokolores.pm view on Meta::CPAN
$server->{'no_close_by_child'} = 1;
# commandline options
my $cmdline = {};
GetOptions( $cmdline,
"help|h",
"config|c:s",
"foreground|f",
"loglevel|l:i",
);
if ($cmdline->{'help'}) {
$self->print_usage;
exit 0;
}
if (defined($cmdline->{'config'}) && $cmdline->{'config'} ne "") {
$server->{'config_file'} = $cmdline->{'config'};
}
# read and apply configuration file
my $config = Auth::Kokolores::Config->new_from_file( $server->{'config_file'} );
$config->apply_config( $self );
$server->{'port'} = $self->{'socket_path'}.'|unix';
$self->{'plugins'} = Auth::Kokolores::Plugins->new_from_config( $self, $config->Plugin );
# cmdline values which overwrite config/defaults
if ($cmdline->{'foreground'}) {
$server->{'background'} = undef;
$server->{'setsid'} = undef;
$server->{'log_file'} = undef;
}
if( $cmdline->{'loglevel'} ) {
$server->{'log_level'} = $cmdline->{'loglevel'};
}
return;
}
sub post_configure_hook {
my $self = shift;
$self->{'plugins'}->init( $self );
return;
}
sub post_bind_hook {
my $self = shift;
$self->_set_process_stat('master');
$self->set_socket_permissions;
return;
}
sub set_socket_permissions {
my $self = shift;
if( ! defined $self->{'socket_mode'} ) {
return;
}
my $mode = oct($self->{'socket_mode'});
$self->log(2, sprintf('setting socket mode to: %o', $mode));
chmod( $mode, $self->{'socket_path'} )
or $self->log(1, 'could not change mode of socket: '.$!);
return;
}
sub child_init_hook {
my $self = shift;
$self->{'plugins'}->child_init( $self );
$self->_set_process_stat('virgin child');
return;
}
sub child_finish_hook {
my $self = shift;
$self->{'plugins'}->shutdown( $self );
return;
}
sub authenticate {
my ( $self, $r ) = @_;
my $failed = 0;
foreach my $plugin ( $self->{'plugins'}->all_plugins ) {
my $ok = $plugin->authenticate( $r );
if( ! defined $ok ) {
$self->log(3, 'plugin '.$plugin->name.': next');
next;
} elsif( $ok && $self->{'satisfy'} eq 'any' ) {
$self->log(3, 'plugin '.$plugin->name.': success (any)');
return Auth::Kokolores::Response->new_success;
} elsif( !$ok && $self->{'satisfy'} ne 'any' ) {
$self->log(3, 'plugin '.$plugin->name.': failed (all)');
return Auth::Kokolores::Response->new_fail;
} elsif( $ok ) {
$self->log(3, 'plugin '.$plugin->name.': success');
} else {
$self->log(3, 'plugin '.$plugin->name.': failed');
$failed++;
}
}
if( $failed == 0 ) {
return Auth::Kokolores::Response->new_success;
}
return Auth::Kokolores::Response->new_fail;
}
sub pre_process_kokolores_request {
my ( $self, $r ) = @_;
foreach my $plugin ( $self->{'plugins'}->all_plugins ) {
my $pre_response = $plugin->pre_process( $r );
if( defined $pre_response ) {
return $pre_response;
}
}
return;
}
( run in 0.732 second using v1.01-cache-2.11-cpan-5511b514fd6 )