# Flask-xCaptcha
[![Build Status](https://app.travis-ci.com/bmaximuml/flask-xcaptcha.svg?branch=master)](https://app.travis-ci.com/bmaximuml/flask-xcaptcha)
The new xCaptcha implementation for Flask without Flask-WTF.
Can also be used as standalone
Compatible with:
* Google ReCaptcha (default)
* hCaptcha
* Any other similarly configured captcha
This project was forked from [Mardix's Flask-ReCaptcha](https://github.com/mardix/flask-recaptcha) project
---
## Installation
`pip install flask-xcaptcha`
## Usage - Minimal Implementation
### Google ReCaptcha - Using app variable
```python
from flask import Flask
from flask_xcaptcha import XCaptcha
app = Flask(__name__)
app.config.update(
XCAPTCHA_SITE_KEY=#<your_site_key>,
XCAPTCHA_SECRET_KEY=#<your_secret_key>
)
xcaptcha = XCaptcha(app=app)
```
### Google ReCaptcha - Without app variable
```python
from flask_xcaptcha import XCaptcha
xcaptcha = XCaptcha(
site_key=#<your_site_key>,
secret_key=#<your_secret_key>
)
```
### hCaptcha - Using app variable
```python
from flask import Flask
from flask_xcaptcha import XCaptcha
app = Flask(__name__)
app.config.update(
XCAPTCHA_SITE_KEY=#<your_site_key>,
XCAPTCHA_SECRET_KEY=#<your_secret_key>,
XCAPTCHA_VERIFY_URL=https://hcaptcha.com/siteverify,
XCAPTCHA_API_URL=https://hcaptcha.com/1/api.js,
XCAPTCHA_DIV_CLASS=h-captcha
)
xcaptcha = XCaptcha(app=app)
```
### hCaptcha - Without app variable
```python
from flask_xcaptcha import XCaptcha
xcaptcha = XCaptcha(
site_key=#<your_site_key>,
secret_key=#<your_secret_key>,
verify_url=https://hcaptcha.com/siteverify,
api_url=https://hcaptcha.com/1/api.js,
div_class=h-captcha
)
```
### App Config Variables
Flask-xCaptcha is configured through the standard Flask config API.
Add these to your app config as shown above to further configure your xCaptcha
Variable | Description | Allowed Values | Default | Required?
--- | --- | --- | --- | ---
XCAPTCHA_SITE_KEY | Site key provided by xCaptcha service | Your site key | | Required
XCAPTCHA_SECRET_KEY | Secret key provided by xCaptcha service | Your secret key | | Required
XCAPTCHA_ENABLED | Enable verification. If false, verification will be disabled | True / False | True | Optional
XCAPTCHA_THEME | Theme for the xCaptcha element | light / dark (service dependent) | "light" | Optional
XCAPTCHA_TYPE | Type of xCaptcha | service dependent | "image" | Optional
XCAPTCHA_SIZE | Size of xCaptcha | normal / compact (service dependent) | "normal" | Optional
XCAPTCHA_TABINDEX | Set the tabindex of the widget and popup | integer | 0 | Optional
XCAPTCHA_VERIFY_URL | The URL to verify the filled in xCaptcha at | URL | "https://www.google.com/recaptcha/api/siteverify" | Optional
XCAPTCHA_API_URL | The URL of the xCaptcha API JS script | URL | "//www.google.com/recaptcha/api.js" | Optional
XCAPTCHA_DIV_CLASS | The class of the div element surrounding the xCaptcha | string | "g-recaptcha" | Optional
XCAPTCHA_CALLBACK | The string that recaptcha finds on a button to see when a button is submitted | "OnSubmitCallback" | Optional
### In your template: `{{ xcaptcha }}`
Inside of the form you want to protect, include the tag: `{{ xcaptcha }}`
It will insert the code automatically
```html
<form method="post" action="/submit">
... your field
... your field
{{ xcaptcha }}
[submit button]
</form>
```
### Verify the captcha
In the view that's going to validate the captcha
```python
from flask import Flask
from flask_xcaptcha import XCaptcha
app = Flask(__name__)
app.config.update(
XCAPTCHA_SITE_KEY=#<your_site_key>,
XCAPTCHA_SECRET_KEY=#<your_secret_key>
)
xcaptcha = XCaptcha(app=app)
@route("/submit", methods=["POST"])
def submit():
if xcaptcha.verify():
# SUCCESS
pass
else:
# FAILED
pass
```
## API
### XCaptcha.__init__(app=None, site_key=None, secret_key=None, is_enabled=True, theme="light", xtype="image", size="normal", tabindex=0, verify_url="https://www.google.com/recaptcha/api/siteverify", api_url="//www.google.com/recaptcha/api.js", div_class="g-recaptcha",**kwargs)
Initialises the XCaptcha using values set in the app config (if an app is supplied), and otherwise using directly passed arguments
### XCaptcha.get_code()
Returns the HTML code to replace `{{ xcaptcha }}` with.
### XCaptcha.verify()
Returns a bool indicating whether or not the xCaptcha was successfully completed
## `{{ xcaptcha }}`
This will insert an HTML div element containing the captcha into a Jinja2 template
(c) 2023 Max Levine
Raw data
{
"_id": null,
"home_page": "https://github.com/bmaximuml/flask-xcaptcha",
"name": "Flask-xCaptcha",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "flask,recaptcha,hcaptcha,xcaptcha,validate",
"author": "Max Levine",
"author_email": "max@maxlevine.co.uk",
"download_url": "https://files.pythonhosted.org/packages/47/c2/b76f37eec67f7d59933307279f8dccf6cae913897ca63222094556fa9fbf/Flask-xCaptcha-0.5.5.tar.gz",
"platform": "any",
"description": "# Flask-xCaptcha\n\n[![Build Status](https://app.travis-ci.com/bmaximuml/flask-xcaptcha.svg?branch=master)](https://app.travis-ci.com/bmaximuml/flask-xcaptcha)\n\nThe new xCaptcha implementation for Flask without Flask-WTF.\n\nCan also be used as standalone\n\nCompatible with:\n\n* Google ReCaptcha (default)\n* hCaptcha\n* Any other similarly configured captcha\n\nThis project was forked from [Mardix's Flask-ReCaptcha](https://github.com/mardix/flask-recaptcha) project\n\n---\n\n## Installation\n\n`pip install flask-xcaptcha`\n\n## Usage - Minimal Implementation\n\n### Google ReCaptcha - Using app variable\n\n```python\nfrom flask import Flask\nfrom flask_xcaptcha import XCaptcha\n\napp = Flask(__name__)\napp.config.update(\n XCAPTCHA_SITE_KEY=#<your_site_key>,\n XCAPTCHA_SECRET_KEY=#<your_secret_key>\n)\nxcaptcha = XCaptcha(app=app)\n```\n\n### Google ReCaptcha - Without app variable\n\n```python\nfrom flask_xcaptcha import XCaptcha\n\nxcaptcha = XCaptcha(\n site_key=#<your_site_key>,\n secret_key=#<your_secret_key>\n)\n```\n\n### hCaptcha - Using app variable\n\n```python\nfrom flask import Flask\nfrom flask_xcaptcha import XCaptcha\n\napp = Flask(__name__)\napp.config.update(\n XCAPTCHA_SITE_KEY=#<your_site_key>,\n XCAPTCHA_SECRET_KEY=#<your_secret_key>,\n XCAPTCHA_VERIFY_URL=https://hcaptcha.com/siteverify,\n XCAPTCHA_API_URL=https://hcaptcha.com/1/api.js,\n XCAPTCHA_DIV_CLASS=h-captcha\n)\nxcaptcha = XCaptcha(app=app)\n```\n\n### hCaptcha - Without app variable\n\n```python\nfrom flask_xcaptcha import XCaptcha\n\nxcaptcha = XCaptcha(\n site_key=#<your_site_key>,\n secret_key=#<your_secret_key>,\n verify_url=https://hcaptcha.com/siteverify,\n api_url=https://hcaptcha.com/1/api.js,\n div_class=h-captcha\n)\n```\n\n### App Config Variables\n\nFlask-xCaptcha is configured through the standard Flask config API.\nAdd these to your app config as shown above to further configure your xCaptcha\n\nVariable | Description | Allowed Values | Default | Required?\n--- | --- | --- | --- | ---\nXCAPTCHA_SITE_KEY | Site key provided by xCaptcha service | Your site key | | Required\nXCAPTCHA_SECRET_KEY | Secret key provided by xCaptcha service | Your secret key | | Required\nXCAPTCHA_ENABLED | Enable verification. If false, verification will be disabled | True / False | True | Optional\nXCAPTCHA_THEME | Theme for the xCaptcha element | light / dark (service dependent) | \"light\" | Optional\nXCAPTCHA_TYPE | Type of xCaptcha | service dependent | \"image\" | Optional\nXCAPTCHA_SIZE | Size of xCaptcha | normal / compact (service dependent) | \"normal\" | Optional\nXCAPTCHA_TABINDEX | Set the tabindex of the widget and popup | integer | 0 | Optional\nXCAPTCHA_VERIFY_URL | The URL to verify the filled in xCaptcha at | URL | \"https://www.google.com/recaptcha/api/siteverify\" | Optional\nXCAPTCHA_API_URL | The URL of the xCaptcha API JS script | URL | \"//www.google.com/recaptcha/api.js\" | Optional\nXCAPTCHA_DIV_CLASS | The class of the div element surrounding the xCaptcha | string | \"g-recaptcha\" | Optional\nXCAPTCHA_CALLBACK | The string that recaptcha finds on a button to see when a button is submitted | \"OnSubmitCallback\" | Optional\n\n### In your template: `{{ xcaptcha }}`\n\nInside of the form you want to protect, include the tag: `{{ xcaptcha }}`\n\nIt will insert the code automatically\n\n```html\n<form method=\"post\" action=\"/submit\">\n ... your field\n ... your field\n\n {{ xcaptcha }}\n\n [submit button]\n</form>\n```\n\n### Verify the captcha\n\nIn the view that's going to validate the captcha\n\n```python\nfrom flask import Flask\nfrom flask_xcaptcha import XCaptcha\n\napp = Flask(__name__)\napp.config.update(\n XCAPTCHA_SITE_KEY=#<your_site_key>,\n XCAPTCHA_SECRET_KEY=#<your_secret_key>\n)\nxcaptcha = XCaptcha(app=app)\n\n@route(\"/submit\", methods=[\"POST\"])\ndef submit():\n\n if xcaptcha.verify():\n # SUCCESS\n pass\n else:\n # FAILED\n pass\n```\n\n## API\n\n### XCaptcha.__init__(app=None, site_key=None, secret_key=None, is_enabled=True, theme=\"light\", xtype=\"image\", size=\"normal\", tabindex=0, verify_url=\"https://www.google.com/recaptcha/api/siteverify\", api_url=\"//www.google.com/recaptcha/api.js\", div_class=\"g-recaptcha\",**kwargs)\n\nInitialises the XCaptcha using values set in the app config (if an app is supplied), and otherwise using directly passed arguments\n\n### XCaptcha.get_code()\n\nReturns the HTML code to replace `{{ xcaptcha }}` with.\n\n### XCaptcha.verify()\n\nReturns a bool indicating whether or not the xCaptcha was successfully completed\n\n## `{{ xcaptcha }}`\n\nThis will insert an HTML div element containing the captcha into a Jinja2 template\n\n(c) 2023 Max Levine\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "The new xCaptcha implementation for Flask without Flask-WTF",
"version": "0.5.5",
"split_keywords": [
"flask",
"recaptcha",
"hcaptcha",
"xcaptcha",
"validate"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d1a1e5ca66fb727925ac0ecb9b36dd7e047e7049b991a91abdfd08f8e8cf0207",
"md5": "1d6263fc49f01e991fdb132cbae6e1d8",
"sha256": "ff8fc70a26048e6668bd7a450dcf31ca4f49cacc7d5556d47dc7e3557016e8cf"
},
"downloads": -1,
"filename": "Flask_xCaptcha-0.5.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1d6263fc49f01e991fdb132cbae6e1d8",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 5254,
"upload_time": "2023-04-11T20:10:32",
"upload_time_iso_8601": "2023-04-11T20:10:32.665036Z",
"url": "https://files.pythonhosted.org/packages/d1/a1/e5ca66fb727925ac0ecb9b36dd7e047e7049b991a91abdfd08f8e8cf0207/Flask_xCaptcha-0.5.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "47c2b76f37eec67f7d59933307279f8dccf6cae913897ca63222094556fa9fbf",
"md5": "be4b8e2d6670d911be53e4fc3a7b7022",
"sha256": "8d1c0bfcf70ee10630e11636875dd51bd5e4e20fed339068cf19a101d5a9180e"
},
"downloads": -1,
"filename": "Flask-xCaptcha-0.5.5.tar.gz",
"has_sig": false,
"md5_digest": "be4b8e2d6670d911be53e4fc3a7b7022",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5391,
"upload_time": "2023-04-11T20:10:34",
"upload_time_iso_8601": "2023-04-11T20:10:34.753475Z",
"url": "https://files.pythonhosted.org/packages/47/c2/b76f37eec67f7d59933307279f8dccf6cae913897ca63222094556fa9fbf/Flask-xCaptcha-0.5.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-04-11 20:10:34",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "bmaximuml",
"github_project": "flask-xcaptcha",
"travis_ci": true,
"coveralls": false,
"github_actions": false,
"lcname": "flask-xcaptcha"
}