# Auth-basic authentication with Lemonldap::NG rights management

# This specific handler is intended to be called directly by Apache

package Lemonldap::NG::Handler::AuthBasic;

use strict;
use Lemonldap::NG::Handler::ApacheMP2;
use Lemonldap::NG::Handler::Lib::AuthBasic;

BEGIN {
    our @ISA = ('Lemonldap::NG::Handler::Main');
}

our $VERSION = '2.0.0';

# PUBLIC METHODS

sub handler {
    my $class;
    $class = $#_ ? shift : __PACKAGE__;
    my ($res) = $class->run(@_);
    return $res;
}

# For an obscur reason, inheritance isn't possible with ApacheMP2.pm.

*FORBIDDEN         = *Lemonldap::NG::Handler::ApacheMP2::FORBIDDEN;
*HTTP_UNAUTHORIZED = *Lemonldap::NG::Handler::ApacheMP2::HTTP_UNAUTHORIZED;
*REDIRECT          = *Lemonldap::NG::Handler::ApacheMP2::REDIRECT;
*OK                = *Lemonldap::NG::Handler::ApacheMP2::OK;
*DECLINED          = *Lemonldap::NG::Handler::ApacheMP2::DECLINED;
*DONE              = *Lemonldap::NG::Handler::ApacheMP2::DONE;
*SERVER_ERROR      = *Lemonldap::NG::Handler::ApacheMP2::SERVER_ERROR;
*AUTH_REQUIRED     = *Lemonldap::NG::Handler::ApacheMP2::AUTH_REQUIRED;
*MAINTENANCE       = *Lemonldap::NG::Handler::ApacheMP2::MAINTENANCE;

*_lmLog             = *Lemonldap::NG::Handler::ApacheMP2::_lmLog;
*addToHtmlHead      = *Lemonldap::NG::Handler::ApacheMP2::addToHtmlHead;
*args               = *Lemonldap::NG::Handler::ApacheMP2::args;
*flatten_bb         = *Lemonldap::NG::Handler::ApacheMP2::flatten_bb;
*get_server_port    = *Lemonldap::NG::Handler::ApacheMP2::get_server_port;
*header_in          = *Lemonldap::NG::Handler::ApacheMP2::header_in;
*hostname           = *Lemonldap::NG::Handler::ApacheMP2::hostname;
*is_initial_req     = *Lemonldap::NG::Handler::ApacheMP2::is_initial_req;
*method             = *Lemonldap::NG::Handler::ApacheMP2::method;
*newRequest         = *Lemonldap::NG::Handler::ApacheMP2::newRequest;
*print              = *Lemonldap::NG::Handler::ApacheMP2::print;
*redirectFilter     = *Lemonldap::NG::Handler::ApacheMP2::redirectFilter;
*remote_ip          = *Lemonldap::NG::Handler::ApacheMP2::remote_ip;
*set_header_in      = *Lemonldap::NG::Handler::ApacheMP2::set_header_in;
*set_header_out     = *Lemonldap::NG::Handler::ApacheMP2::set_header_out;
*set_user           = *Lemonldap::NG::Handler::ApacheMP2::set_user;
*setPostParams      = *Lemonldap::NG::Handler::ApacheMP2::setPostParams;
*setServerSignature = *Lemonldap::NG::Handler::ApacheMP2::setServerSignature;
*thread_share       = *Lemonldap::NG::Handler::ApacheMP2::thread_share;
*unparsed_uri       = *Lemonldap::NG::Handler::ApacheMP2::unparsed_uri;
*unset_header_in    = *Lemonldap::NG::Handler::ApacheMP2::unset_header_in;
*uri                = *Lemonldap::NG::Handler::ApacheMP2::uri;
*uri_with_args      = *Lemonldap::NG::Handler::ApacheMP2::uri_with_args;
*unparsed_uri       = *Lemonldap::NG::Handler::ApacheMP2::unparsed_uri;

__PACKAGE__->init();

1;

__END__

=head1 NAME

=encoding utf8

Lemonldap::NG::Handler::AuthBasic - Perl extension to be able to authenticate
users by basic web system but to use Lemonldap::NG to control authorizations.

=head1 SYNOPSIS

Create your own package:

  package My::Package;
  use Lemonldap::NG::Handler::AuthBasic;
  
  # IMPORTANT ORDER
  our @ISA = qw (Lemonldap::NG::Handler::AuthBasic);
  
  __PACKAGE__->init ( {
    # Local storage used for sessions and configuration
    localStorage        => "Cache::DBFile",
    localStorageOptions => {...},
    # How to get my configuration
    configStorage       => {
        type                => "DBI",
        dbiChain            => "DBI:mysql:database=lemondb;host=$hostname",
        dbiUser             => "lemonldap",
        dbiPassword         => "password",
    }
    # Uncomment this to activate status module
    # status                => 1,
  } );

Call your package in <apache-directory>/conf/httpd.conf

  PerlRequire MyFile
  PerlHeaderParserHandler My::Package

=head1 DESCRIPTION

This library provides a way to use Lemonldap::NG to manage authorizations
without using Lemonldap::NG for authentications. This can be used in conjunction
with a normal Lemonldap::NG installation but to manage non-browser clients.

=head1 SEE ALSO

L<Lemonldap::NG::Handler(3)>,
L<http://lemonldap-ng.org/>

=head1 AUTHOR

=over

=item Clement Oudot, E<lt>clem.oudot@gmail.comE<gt>

=item François-Xavier Deltombe, E<lt>fxdeltombe@gmail.com.E<gt>

=item Xavier Guimard, E<lt>x.guimard@free.frE<gt>

=back

=head1 BUG REPORT

Use OW2 system to report bug or ask for features:
L<http://jira.ow2.org>

=head1 DOWNLOAD

Lemonldap::NG is available at
L<http://forge.objectweb.org/project/showfiles.php?group_id=274>

=head1 COPYRIGHT AND LICENSE

=over

=item Copyright (C) 2008-2010 by Xavier Guimard, E<lt>x.guimard@free.frE<gt>

=item Copyright (C) 2012-2013 by François-Xavier Deltombe, E<lt>fxdeltombe@gmail.com.E<gt>

=item Copyright (C) 2010-2012 by Clement Oudot, E<lt>clem.oudot@gmail.comE<gt>

=back

This library is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see L<http://www.gnu.org/licenses/>.

=cut
