Mojolicious-Plugin-BasicAuthPlus

 view release on metacpan or  search on metacpan

t/auth-ldap.t  view on Meta::CPAN

use Mojo::IOLoop;
use Test::More;
use Test::Mojo;
use Mojo::ByteStream 'b';

# Make sure sockets are working
my $id = Mojo::IOLoop->server({address => '127.0.0.1'} => sub { });
plan skip_all => 'working sockets required for this test!'
    unless Mojo::IOLoop->acceptor($id)->handle->sockport;    # Test server

# We need access to a test LDAP server, set some environment variables for
# yours, e.g.
# setenv MOJO_TEST_LDAP_HOST ldap.someplace.com
# setenv MOJO_TEST_LDAP_BASEDN "dc=MYDOMAIN,dc=com"
# setenv MOJO_TEST_LDAP_USERPASS user:pass

plan skip_all => 'SKIPPING LDAP TESTS, TEST ENVIRONMENT VARIABLES NOT SET'
  unless $ENV{MOJO_TEST_LDAP_HOST} && $ENV{MOJO_TEST_LDAP_BASEDN} && $ENV{MOJO_TEST_LDAP_USERPASS};

# Lite app
use Mojolicious::Lite;

# Silence
app->log->level('error');

plugin 'basic_auth_plus';

# Explicit username and password
get '/ldap-auth' => sub {
    my $self = shift;

    return $self->render(text => 'authorized')
        if $self->basic_auth(
            realm => {
              # Anonymous bind. on some less-standard ldap configs you might
              # need more parameters, but this should usually work
              host   => $ENV{MOJO_TEST_LDAP_HOST} || 'MISSINGLDAPSERVER',
              basedn => $ENV{MOJO_TEST_LDAP_BASEDN} || 'dc=MYDOMAIN,dc=com'
            }
        );

    $self->render(text => 'denied');
};

under sub {
    my $self = shift;
    return $self->basic_auth(
        realm =>  {
              host   => $ENV{MOJO_TEST_LDAP_HOST} || 'MISSINGLDAPSERVER',
              basedn => $ENV{MOJO_TEST_LDAP_BASEDN} || 'dc=MYDOMAIN,dc=com'
        });
};

get '/under-ldap-bridge' => sub {
    shift->render(text => 'authorized');
};


# Tests
my $t = Test::Mojo->new;
my $encoded;

# Fails #

# Under bridge fail
diag "ldap-auth";
$encoded = b("bad:auth")->b64_encode->to_string;
chop $encoded;
$t->get_ok('/ldap-auth', {Authorization => "Basic $encoded"}, 'bad credentials')
   ->status_is(401)->content_is('denied');
diag "ldap bridge";
$t->get_ok('/under-ldap-bridge', {Authorization => "Basic $encoded"}, 'bad credentials')
   ->status_is(401)->content_is('');

# blank password



( run in 1.428 second using v1.01-cache-2.11-cpan-140bd7fdf52 )