NAME

Data::Passphrase::Apache - HTTP service for checking passphrase strength

SYNOPSIS

In httpd.conf:

<Location />
    Require valid-user
    SSLRequireSSL
    
    PerlHandler +Data::Passphrase::Apache
    SetHandler  perl-script
    
    # turn on debugging (default: 0)
    PerlSetVar PassphraseDebug 1
    
    # use a remote service for form_handler (default: localhost)
    PerlSetVar PassphraseLocation \
               "https://example.com/passphrase/validate"
    
    # set location of rules file (default: /etc/passphrase_rules)
    PerlSetVar PassphraseRules \
               /usr/local/etc/passphrase_rules
</Location>

HTTP client:

use constant LOCATION => 'https://itso.iu.edu/validate/http';

use LWP::UserAgent;

my $username = $ENV{LOGNAME};
for (;;) {
    print 'Passphrase (clear): ';
    chomp (my $passphrase = <STDIN>);

    my $user_agent = LWP::UserAgent->new();
    my $response   = $user_agent->post(LOCATION, {
        passphrase => $passphrase,
        username   => $username,
    });
    $code          = $response->code   ();
    $message       = $response->message();
    $score         = $response->score  ();

    print "$code $message, score: $score\%\n";
}

SOAP client:

use SOAP::Lite +autodispatch =>
    proxy    => 'http://itso.iu.edu/validate/soap',
    uri      => 'http://passphrase.iu.edu/Data/Passphrase';

my $username = $ENV{LOGNAME};
for (;;) {
    print 'Passphrase (clear): ';
    chomp (my $passphrase = <STDIN>);

    my $response = SOAP::Lite
        ->uri('http://passphrase.iu.edu/Data/Passphrase')
        ->proxy('http://itso.iu.edu/validate/soap')
        ->validate_passphrase({
            username   => $username,
            passphrase => $passphrase,
        })->result()
        or die $!;
    print "$result->{code} $result->{message}, score: $result->{score}\%\n";
}

DESCRIPTION

This mod_perl module provides HTTP and SOAP interfaces to Data::Passphrase. A trivial form handler is also included, mostly as an example. By default, the various interfaces are accessible by the following URIs:

Interface     URI
---------     ---
HTTP          https://example.com/http
SOAP          https://example.com/soap
WSDL          https://example.com/wsdl
form example  https://example.com/form

HTTP Interface

An application or user may submit the passphrase to be checked via the query parameter passphrase. The module also supports a username parameter, which defaults to $r->user(). Sites may wish to configure rules to check passphrases based on user-related data, so the username parameter may be useful for testing.

The response consists of an HTTP response code and status message in the header, and a JSON representation of the code, message, and score in the body. If a passphrase is deemed to weak via a certain rule, the error code associated with that rule is returned. Usually, these error codes are in the 4xx range. If a passphrase passes all rules, 200 is returned.

This module supports GET and POST request methods, but POST is usually appropriate to avoid passphrases being recorded in server logs. RESTful URLs are not used for the same reason.

SOAP Interface

SOAP semantics are provided by SOAP::Lite with a corresponding WSDL provided by Pod::WSDL. This interface exposes only the validate_passphrase() procedural method; there is no object-oriented RPC functionality.

Form Example

The form handler is just a trivial example for use in testing or as a starting point.

AUTHOR

Andrew J. Korty <ajk@iu.edu>

SEE ALSO

Data::Passphrase(3), Pod::WSDL(3), SOAP::Lite(3)