---
name: "Lemonldap::NG::Portal::Captcha"
section: "3pm"
platform: "linux"
package: "liblemonldap-ng-portal-perl"
version: "2.21.2+ds-1+deb13u3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Lemonldap::NG::Portal::Captcha"
---

# Lemonldap::NG::Portal::Captcha(3pm)

Writing CAPTCHA modules for LemonLDAP::NG.

## NAME

Lemonldap:NG::Portal::Captcha - Writing CAPTCHA modules for LemonLDAP::NG.

## SYNOPSIS

```
  package Lemonldap::NG::Portal::Captcha::My;
  use strict;
  use Mouse;
  # Add constants used by this module
  our $VERSION = '0.1';
  extends 'Lemonldap::NG::Portal::Main::Plugin';
  sub init {
      my $self = shift;
      return 1;
  }
  sub init_captcha {
    my ( $self, $req ) = @_;
    # Read option from the manager configuration
    my $option = $self->conf->{captchaOptions}->{option1};
    # This can be used to inject custom JS code at the beginning
    # of the page
    my $script = <your html code>;
    $req->data->{customScript} .= $script;
    # This will add your custom HTML code to the protected form
    my $html = <your html code>;
    $req->captchaHtml($html);
  }
  sub check_captcha {
    my ( $self, $req ) = @_;
    my $captcha_input = $req->param('some_post_param');
    my $is_captcha_valid = <your code here>;
    if($is_captcha_valid) {
        return 1;
    } else {
        return 0;
    }
  }
  1;
```

## DESCRIPTION

Captcha modules only need to implement two methods: one for initializing the challenge, before the form is displayed, and the other to verify that the submitted response is correct.

## METHODS

### Accessors and methods provided by Lemonldap::NG::Portal::Main::Plugin

- p: portal object

  - conf: configuration hash (as reference)

  - logger alias for p-\>logger accessor

  - userLogger alias for p-\>userLogger accessor

  - error: alias for p-\>error method

  ### "Routes" management

Like each module that inherits from Lemonldap::NG::Portal::Plugin, you can define dedicated routes in a Captcha plugin.

- addAuthRoute: wrapper to Lemonldap::NG::Handler::PSGI::Try **addAuthRoute()** method

  - addUnauthRoute: wrapper to Lemonldap::NG::Handler::PSGI::Try **addUnauthRoute()** method

  ### Methods that must be provided by a Captcha module

*init\_captcha($req)*

This method is called when the protected form is built by LemonLDAP::NG. Your responsibility is to do any preparatory step, and provide LemonLDAP::NG with the HTML code that it has to display in the form to enable the Captcha.

This is done by setting `"$req->captchaHtml"`

*check\_captcha($req)*

This method is called after the user submitted the protected form. Your responibility is to check the user's response (usually provided as a POST field), and return 0 if the response is incorrect, 1 if the response is correct.

## LOGGING

Logging is provided by `"$self->logger"` and `"$self->userLogger"`. See Lemonldap::NG::Portal::Main::Plugin for a detailed description of logging levels.

## AUTHORS

- LemonLDAP::NG team \<http://lemonldap-ng.org/team\>

  ## BUG REPORT

Use OW2 system to report bug or ask for features: \<https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/issues\>

## DOWNLOAD

Lemonldap::NG is available at \<https://lemonldap-ng.org/download\>

## COPYRIGHT AND LICENSE

See COPYING file for details.

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 \<http://www.gnu.org/licenses/\>.
