{"id":13781643,"url":"https://github.com/NerdyLuffy/adonisjs-hcaptcha","last_synced_at":"2025-05-11T15:31:56.795Z","repository":{"id":42391788,"uuid":"422790995","full_name":"NerdyLuffy/adonisjs-hcaptcha","owner":"NerdyLuffy","description":"A middleware for AdonisJS to keep your web applications secure from bots using hCaptcha","archived":false,"fork":false,"pushed_at":"2023-05-27T02:22:28.000Z","size":892,"stargazers_count":11,"open_issues_count":0,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-09T21:08:12.415Z","etag":null,"topics":["adonis","adonis-framework","adonis-hcaptcha","adonisjs","hcaptcha"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NerdyLuffy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2021-10-30T05:17:50.000Z","updated_at":"2025-03-28T14:39:03.000Z","dependencies_parsed_at":"2024-01-15T09:05:08.192Z","dependency_job_id":"25d39790-25fb-4671-a109-8bd31974e0ca","html_url":"https://github.com/NerdyLuffy/adonisjs-hcaptcha","commit_stats":{"total_commits":47,"total_committers":4,"mean_commits":11.75,"dds":0.5319148936170213,"last_synced_commit":"5db55e33295aaa535f16c126898b775b89f753db"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NerdyLuffy%2Fadonisjs-hcaptcha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NerdyLuffy%2Fadonisjs-hcaptcha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NerdyLuffy%2Fadonisjs-hcaptcha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NerdyLuffy%2Fadonisjs-hcaptcha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NerdyLuffy","download_url":"https://codeload.github.com/NerdyLuffy/adonisjs-hcaptcha/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253588573,"owners_count":21932279,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adonis","adonis-framework","adonis-hcaptcha","adonisjs","hcaptcha"],"created_at":"2024-08-03T18:01:27.901Z","updated_at":"2025-05-11T15:31:56.425Z","avatar_url":"https://github.com/NerdyLuffy.png","language":"TypeScript","funding_links":[],"categories":["Packages"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://res.cloudinary.com/adonisjs/image/upload/q_100/v1558612869/adonis-readme_zscycu.jpg\" width=\"600px\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch2\u003eadonisjs-hcaptcha\u003c/h2\u003e\n  \u003cp\u003e\n    A package to keep your AdonisJS applications safe from bots, spam and protect your user privacy\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![github-actions-image]][github-actions-url] [![npm-image]][npm-url] [![license-image]][license-url] ![][typescript-image] [![synk-image]][synk-url]\n\n \u003c/div\u003e\n\n\u003chr/\u003e\n\n\u003ch2\u003e Installation \u003c/h2\u003e\nInstall and configure the package in your Adonis project.\n\n```bash\n# npm\nnpm i adonisjs-hcaptcha\nnode ace configure adonisjs-hcaptcha\n\n# yarn\nyarn add adonisjs-hcaptcha\nnode ace configure adonisjs-hcaptcha\n```\n\n\u003chr/\u003e\n\n\u003ch2\u003e Usage \u003c/h2\u003e\n\n\u003ch3\u003e Step 1: Registration \u003c/h3\u003e\n\nSignup for a account on [hCaptcha website](https://www.hcaptcha.com/signup-interstitial) \nLogin and follow the steps to get your \u003cb\u003esecret\u003c/b\u003e and \u003cb\u003esite\u003c/b\u003e key\n\n\u003ch3\u003e Step 2: Add variables in `.env` file \u003c/h3\u003e\n\n```txt\nHCAPTCHA_SECRET_KEY=YOUR_SECRET_KEY \nHCAPTCHA_SITE_KEY=YOUR_SITE_KEY\n```\n\n\u003ch3\u003e Step 3: Add validation in the `.env.ts` file \u003c/h3\u003e\n\n```ts\nimport Env from '@ioc:Adonis/Core/Env'\n\nexport default Env.rules({\n  // ....\n  HCAPTCHA_SITE_KEY: Env.schema.string(),\n  HCAPTCHA_SECRET_KEY: Env.schema.string(),\n})\n```\n\n\u003ch3\u003e Step 4: Add middleware to `start/kernel.ts` \u003c/h3\u003e\n\n```ts\nServer.middleware.registerNamed({\n  // ....\n  hcaptcha: () =\u003e import('App/Middleware/Hcaptcha'),\n})\n```\n\n\u003ch3\u003e Step 5: Add middleware to your route \u003c/h3\u003e\n\n```ts\nRoute.post('login', 'UserController.login').middleware('hcaptcha')\n```\nThe new middleware will check for `h-captcha-response` field in [request input](https://docs.adonisjs.com/guides/request#requestinput)\n\n\u003e `h-captcha-response` field will contain the unique one time non repeating token which will be validated with hCaptcha to make sure its not a bot\n\n\u003ch3\u003e Step 6: Check response in your controller \u003c/h3\u003e\n\n```ts\nexport default class UsersController {\n  public async index({ hcaptcha }: HttpContextContract) {\n    if (hcaptcha.success) {\n      // Do some action\n    }\n    // Throw error\n  }\n}\n\n```\n\n[github-actions-image]: https://img.shields.io/github/workflow/status/NerdyLuffy/adonisjs-hcaptcha/test?style=for-the-badge\n[github-actions-url]: https://github.com/NerdyLuffy/adonisjs-hcaptcha/actions/workflows/test.yml \"github-actions\"\n\n[npm-image]: https://img.shields.io/npm/v/adonisjs-hcaptcha.svg?style=for-the-badge\u0026logo=npm\n[npm-url]: https://npmjs.org/package/adonisjs-hcaptcha \"npm\"\n\n[license-image]: https://img.shields.io/npm/l/adonisjs-hcaptcha?color=blueviolet\u0026style=for-the-badge\n[license-url]: LICENSE.md \"license\"\n\n[typescript-image]: https://img.shields.io/badge/Typescript-294E80.svg?style=for-the-badge\u0026logo=typescript\n[typescript-url]:  \"typescript\"\n\n[synk-image]: https://img.shields.io/snyk/vulnerabilities/github/NerdyLuffy/adonisjs-hcaptcha?style=for-the-badge\n[synk-url]: https://snyk.io/test/github/NerdyLuffy/adonisjs-hcaptcha?targetFile=package.json \"synk\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNerdyLuffy%2Fadonisjs-hcaptcha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FNerdyLuffy%2Fadonisjs-hcaptcha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNerdyLuffy%2Fadonisjs-hcaptcha/lists"}