vcaptcha

1.1.0 • Public • Published

vCaptcha

Build Status Coverage Status Known Vulnerabilities codebeat badge

Simple but user-friendy Node.js captcha generator. It makes the user pick up 2 pictures (in sequence) among several (5 by default). Should be enough for low security forms.


vCAPTCHA preview


Getting Started

What it does :

  • generate base64 pictures to display in the client;
  • generate a phrase to help you pick up the right pictures;
  • generate pictures names only if you want a custom phrase;
  • generate a key, which is simply the hashed solution. This SHOULD NOT be passed to the client.
  • generate a unique identifier for each captcha, to help you retrieve it.

What it does if you pass a Redis Client :

  • store keys.
  • count & limit fails based on unique user identifier you provide
  • expire captchas.

Install

npm i --save vcaptcha

API

require('vcaptcha')(options)

  • Initialize vCaptcha
  • options <Object>
    • client Required: Redis client
    • fails Default: 10 - max fails allowed per userId
    • failMemory Default: 60 * 60 * 6 - Period of time before fails count resets

create(options, callback)

  • options <Object>
    • userId Required: unique client identifier
    • expiresIn Default: 60 * 2
    • language Default: 'en' - also supported: 'fr'
    • length Default: 5 - number of pictures to send to the client
  • callback <Function> returns (err, captcha, count)
    • captcha <Object>
      • unique captcha ID
      • data base64 pictures array
      • phrase explanation to solve the captcha
      • names pictures to find to solve the captcha, to create your own phrase
    • count fail count

solve(options, callback)

  • options <Object>
    • userId Required: unique client identifier
    • unique Required: captcha ID to solve
    • solution Required: guessed solution provided by the client.
  • callback <Function> returns (valid)
    • valid <Boolean> whether or not captcha is solved

Example

Try it on RunKit.

// INITIALIZE
const redis = require('redis');
const client = redis.createClient();
const vCaptcha = require('vcaptcha')({
  client,
  fails = 10,
  failMemory = 60 * 60 * 6
});
 
// CREATE A NEW CAPTCHA
vCaptcha.create({
  userId: '192.168.1.30',
  expiresIn: 60 * 2,
  language: 'en',
  length: 5
}, (err, captcha, count) => {
  // captcha can be sent to your client form
});
 
// SOLVE CAPTCHA
vCaptcha.solve({
  userId: '192.168.1.30',
  unique: body.unique,
  solution: body.solution
}, valid => {
  if (valid) {
    // user completed the captcha
  }
});

Client use

Example with Angular template.

<div class="captcha">
  <h5 *ngIf="error">Too many fails, come back later.</h5>
  <div *ngIf="!error" class="captcha-box">
    <label><span>{{ captcha.phrase }}</span></label>
    <ul class="thumbnails selector">
      <li *ngFor="let src of captcha.data; let i = index">
        <div class="thumbnail" [class.selected]="isSelected(i)" (click)="toggleSelect(i)">
          <img class="image" [src]="'data:image/png;base64,'+ src">
        </div>
      </li>
    </ul>
  </div>
</div>

Credit

Pictures are taken from deprecated VisualCaptcha.

Readme

Keywords

Package Sidebar

Install

npm i vcaptcha

Weekly Downloads

2

Version

1.1.0

License

MIT

Unpacked Size

183 kB

Total Files

12

Last publish

Collaborators

  • atmys