PHPackages                             oliweb/statamic-cap - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. oliweb/statamic-cap

ActiveStatamic-addon[Security](/categories/security)

oliweb/statamic-cap
===================

Statamic addon for Cap CAPTCHA (proof-of-work) integration

v1.6.4(2mo ago)026MITPHPPHP ^8.2

Since May 7Pushed 1mo agoCompare

[ Source](https://github.com/oli217/statamic-cap)[ Packagist](https://packagist.org/packages/oliweb/statamic-cap)[ RSS](/packages/oliweb-statamic-cap/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (4)Versions (13)Used By (0)

statamic-cap
============

[](#statamic-cap)

Addon Statamic pour intégrer [Cap](https://github.com/tiagozip/cap) — un CAPTCHA proof-of-work auto-hébergé — dans les formulaires Statamic.

Basé sur [oliweb/laravel-cap](https://github.com/oli217/laravel-cap).

---

Prérequis
---------

[](#prérequis)

- PHP 8.2+
- Statamic 5.x ou 6.x
- Une instance Cap auto-hébergée

---

Installation
------------

[](#installation)

```
composer require oliweb/statamic-cap
```

Les assets (JS + CSS) sont servis automatiquement par l'addon via des routes dédiées. Aucun `vendor:publish` n'est nécessaire.

---

Configuration
-------------

[](#configuration)

### Via le panneau Statamic CP

[](#via-le-panneau-statamic-cp)

Accéder à **Tools &gt; Cap CAPTCHA** dans le panneau d'administration Statamic.

ChampDescriptionCap Endpoint URLURL complète de votre instance Cap, incluant le site-key (ex : `https://cap.example.com/votre-site-key/`)Secret KeyClé secrète générée dans le tableau de bord CapToken Field NameNom du champ hidden injecté par le widget (défaut : `cap-token`)Timeout (seconds)Délai avant abandon de la requête vers `/siteverify` (défaut : `5`)Fail OpenSi activé, laisse passer la requête en cas d'erreur de communication avec CapHide Attribution LinkSi activé, masque le lien « Cap » en bas à droite du widgetLes réglages sont sauvegardés dans `storage/statamic/addons/statamic-cap.yaml`.

### Via variables d'environnement

[](#via-variables-denvironnement)

Les variables d'environnement servent de valeurs par défaut et sont surchargées par les réglages CP.

```
CAP_ENDPOINT=https://cap.example.com/votre-site-key/
CAP_SECRET=votre-cle-secrete
CAP_TOKEN_FIELD=cap-token
CAP_TIMEOUT=5
CAP_FAIL_OPEN=false
CAP_HIDE_ATTRIBUTION=false
```

---

Utilisation
-----------

[](#utilisation)

### Tags Antlers

[](#tags-antlers)

TagDescription`{{ cap }}`Rendu du `` avec l'endpoint configuré`{{ cap:scripts }}`Injecte `window.CAP_CUSTOM_WASM_URL` + `` pour le widget`{{ cap:styles }}`Balise `` CSS du widget`{{ cap:config }}``` exposant `window.CAP_API_ENDPOINT` et `window.CAP_TOKEN_FIELD`#### Mode widget standard

[](#mode-widget-standard)

Charger les assets dans le layout et ajouter le widget dans un formulaire Statamic :

```

    {{ cap:styles }}

    {{ form:create handle="contact" }}
        {{ cap }}
        Envoyer
    {{ /form:create }}

    {{ cap:scripts }}

```

Le widget injecte automatiquement un champ hidden `cap-token` dans le formulaire parent lors de la vérification.

`{{ cap:scripts }}` injecte toujours `window.CAP_CUSTOM_WASM_URL` pointant vers la route locale du WASM, sans requête externe au runtime.

#### Mode programmatic

[](#mode-programmatic)

Utilisez `{{ cap:config }}` pour exposer l'endpoint en JavaScript, puis instanciez `Cap` directement sans afficher de widget visible :

```

    {{ cap:styles }}

    {{ cap:config }}
    {{ cap:scripts }}

        Envoyer

    document.getElementById('submit-btn').addEventListener('click', async (e) => {
        e.preventDefault();

        const cap = new Cap({ apiEndpoint: window.CAP_API_ENDPOINT });
        const { token } = await cap.solve();

        document.getElementById('cap-token').value = token;
        e.target.closest('form').submit();
    });

```

`Cap` crée automatiquement un élément `cap-widget` masqué en arrière-plan. Aucun widget visuel n'est rendu.

`window.CAP_API_ENDPOINT` et `window.CAP_TOKEN_FIELD` sont définis par `{{ cap:config }}` depuis la configuration PHP, sans hard-coding côté JavaScript.

#### Avec nonce CSP

[](#avec-nonce-csp)

```
{{ cap:config nonce="{ $cspNonce }" }}
{{ cap:scripts nonce="{ $cspNonce }" }}
{{ cap nonce="{ $cspNonce }" }}
```

#### Headers CSP

[](#headers-csp)

Le widget utilise des Web Workers et WebAssembly. Une CSP stricte doit inclure :

```
Content-Security-Policy:
  script-src 'nonce-{nonce}' 'strict-dynamic';
  worker-src blob:;
  wasm-unsafe-eval;
  connect-src 'self';

```

`worker-src blob:` — requis car le widget crée des workers via des URLs `Blob`. `wasm-unsafe-eval` — requis pour le calcul WebAssembly. `connect-src 'self'` — suffisant si le WASM est hébergé localement (voir ci-dessous).

### Validation automatique

[](#validation-automatique)

La vérification du token est automatique : l'addon écoute l'événement `FormSubmitted` de Statamic et rejette la soumission si le token est invalide ou absent. Aucune configuration supplémentaire n'est nécessaire.

En cas d'échec, une erreur de validation est retournée avec le message `statamic-cap::messages.validation_failed`.

---

WASM local (CSP stricte)
------------------------

[](#wasm-local-csp-stricte)

Par défaut, `{{ cap:scripts }}` injecte `window.CAP_CUSTOM_WASM_URL` pointant vers la route `/vendor/statamic-cap/cap_wasm_bg.wasm`. Cette route sert le fichier local s'il est présent, sinon redirige automatiquement vers le CDN jsDelivr.

Pour une auto-hébergement complet sans aucune requête externe, téléchargez le WASM localement :

```
php artisan cap:publish-wasm
```

Le fichier est sauvegardé dans `storage/app/statamic-cap/cap_wasm_bg.wasm` et servi automatiquement. La CSP peut alors se limiter à `connect-src 'self'` sans whitelister jsDelivr.

---

Traductions
-----------

[](#traductions)

Les traductions sont disponibles en anglais et en français. Les chaînes couvrent la validation, les messages d'erreur, les libellés du widget et la page de réglages CP.

Pour les personnaliser, copier et modifier le fichier dans votre projet :

```
lang/vendor/statamic-cap/{locale}/messages.php

```

---

Licence
-------

[](#licence)

MIT

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance87

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

12

Last Release

71d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/48fcf1e2370bf67b2856e949261d339ac202fd5cc67235225f9297bd39faef84?d=identicon)[oliweb](/maintainers/oliweb)

---

Tags

captchastatamicspam protectionproof-of-workcap

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/oliweb-statamic-cap/health.svg)

```
[![Health](https://phpackages.com/badges/oliweb-statamic-cap/health.svg)](https://phpackages.com/packages/oliweb-statamic-cap)
```

###  Alternatives

[statamic/statamic

Statamic

829179.5k](/packages/statamic-statamic)[statamic-rad-pack/runway

Eloquently manage your database models in Statamic.

135224.7k8](/packages/statamic-rad-pack-runway)[bbysaeth/typo3-altcha

TYPO3 form element for spam protection by utilizing the proof-of-work mechanism Altcha.

1124.2k1](/packages/bbysaeth-typo3-altcha)[duncanmcclean/statamic-cargo

Comprehensive e-commerce addon for Statamic. Build bespoke e-commerce sites without the complexity.

3518.3k](/packages/duncanmcclean-statamic-cargo)[s1syphos/php-simple-captcha

Simple captcha generator

2740.9k13](/packages/s1syphos-php-simple-captcha)[aryehraber/statamic-captcha

Protect your Statamic forms using a Captcha service

17211.2k](/packages/aryehraber-statamic-captcha)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
