NAME
    Captcha::Stateless::Text - stateless, text-based CAPTCHAs

DESCRIPTION
    A module to make stateless, text-based CAPTCHAs easy to implement.  It
    supports:

     * Simple math:
         "7 + 3 = ?"
         answer = 10
     * Character selection:
         "Provide the second, third, and sixth characters from B-G-Q-E-O-S"
         answer = GQS

SYNOPSIS
     use Captcha::Stateless::Text;

     my $captcha = Captcha::Stateless::Text->new();

     # Recommend setting these to values that *you* derive
     # Must be 16 bytes / 128 bits
     $captcha->set_iv('gkbx5g9hsvhqrosg');
     # 32 bytes / 256 bits for AES256
     $captcha->set_key('tyDjb39dQ20pdva0lTpyuiowWfxSSwa9');

     # Grab a question/answer data structure
     my $qa = $captcha->getQA_chars();
     #    __or__
     my $qa = $captcha->getQA_math();

     # For getQA_chars(), $qa will look similar to this:
     my $qa_chars = {
       'q' => 'Provide the first and fifth characters from A-W-N-Z-L-X'
       'a' => 'AL',
       'enc_payload' => <<base-64 and url-encoded encrypted data>>,
     },
     # For getQA_math(), $qa will look similar to this:
     my $qa_math = {
       'q' => '7 + 3',
       'a' => '10',
       'enc_payload' => <<base-64 and url-encoded encrypted data>>,
     };

     # Your job now is to present the user with the question ($qa->{q}), to
     # not lose the enc_payload (use a HTML <input type="hidden"> field), to
     # collect the user's answer, and then validate it, like this:
     my $is_valid = $captcha->validate($user_answer, $enc_payload_from_qa);
     if ($is_valid) {
       print "You win!\n";
     } else {
       print "You lose!\n";
     }

SUBROUTINES
    The two subroutines that generate the questions and answers have a few
    options that can be specified to control their behavior.

     my $qa = $captcha->getQA_chars($q_len, $a_len, $q_sort);

     OPT   DEFAULT DESCRIPTION
     --------------------------------------------------------------------
     $q_len   6    The character length of the question string.
     $a_len   3    The number of characters in the answer.
     $q_sort  1    Sort the answer characters, so that users will always
                   be asked for characters flowing left-to-right, or
                   require them to "jump around" in the question string.

     my $qa = $captcha->getQA_math($a_max, $a_min);

     OPT   DEFAULT DESCRIPTION
     --------------------------------------------------------------------
     $a_max  11    The maximum value of the answer.
     $a_min   2    The minimum value of the answer.

COPYRIGHT
    Copyright (C) 2024, Lester Hightower <hightowe@cpan.org>

LICENSE
    This software is licensed under the OSI certified Artistic License, one
    of the licenses of Perl itself.

    <http://en.wikipedia.org/wiki/Artistic_License>



perl v5.34.0                      2024-04-2.::lib::Captcha::Stateless::Text(3)
