Skip to main content

Implement CAPTCHA verification for Flask in a straightforward manner.

Project description

Flask-Tjfu-Captcha 1.0.0

Implement CAPTCHA verification for Flask in a straightforward manner.

Primary Dependencies

  1. captcha >=0.5.0
  2. cryptocode >=0.1
  3. Flask

Installation

pip install flask-tjfu-captcha

Getting Started

from datetime import timedelta

from flask import Flask
from flask_tjfu_captcha import TjfuCaptcha

app = Flask(__name__)
tjfu_captcha = TjfuCaptcha(
    app,
    True  # Must be in Debug mode
)


@app.route('/get_captcha')
def get_captcha():
    return tjfu_captcha.generate_image_captcha(
        secret_key="YOUR_SECRET_KEY",
        length=4,
        expires_in=timedelta(minutes=5),
        only_digits=True
    ).to_dict()


@app.route('/verify_captcha')
@tjfu_captcha.required_captcha(
    "YOUR_SECRET_KEY"
)
def verify_captcha():
    return "OK"


if __name__ == '__main__':
    app.run(debug=True)

/get_captcha will generate a JSON with two attributes:

  • encrypted_code: encoded information of the generated captcha.
  • img_base64: base64 encoded string of the captcha image.
{
  "encrypted_code": "...",
  "img_base64": "..."
}

/verify_captcha uses required_captcha to enforce captcha verification before executing requests within verify_captcha. To pass captcha verification, the client must provide two headers: Tjfu-Captcha-Code containing the captcha code visible in the captcha image requested, and Tjfu-Captcha-Encrypted-Code containing the encoded information mentioned above.

GET http://0.0.0.0:5000/verify_captcha
Tjfu-Captcha-Encrypted-Code: <encrypted_code>
Tjfu-Captcha-Code: <code>

Skipping Captcha Verification in Debug Mode

To bypass captcha verification during testing, you can use the Tjfu-Captcha-Debugging-Ignore header with any value, and TjfuCaptcha must be in Debug mode.

from flask import Flask
from flask_tjfu_captcha import TjfuCaptcha

app = Flask(__name__)
tjfu_captcha = TjfuCaptcha(
    app,
    True  # Must be in Debug mode
)
GET http://0.0.0.0:5000/verify_captcha
Tjfu-Captcha-Debugging-Ignore: <you can put any value>

Customization

You can customize headers for captcha verification using TJFU_CAPTCHA_ENCRYPTED_CODE_HEADER_KEY, TJFU_CAPTCHA_CAPTCHA_CODE_HEADER_KEY, TJFU_CAPTCHA_DEBUGGING_IGNORE_HEADER_KEY, and TJFU_CAPTCHA_FONTS to adjust captcha image fonts.

from flask import Flask

app = Flask(__name__)

app.config['TJFU_CAPTCHA_FONTS'] = "['your_font_path', 'your_other_font_path']"
# Change Tjfu-Captcha-Encrypted-Code header to Request-ID
app.config['TJFU_CAPTCHA_ENCRYPTED_CODE_HEADER_KEY'] = 'Request-ID'
# Change Tjfu-Captcha-Code header to My-Captcha-Code
app.config['TJFU_CAPTCHA_CAPTCHA_CODE_HEADER_KEY'] = 'My-Captcha-Code'
# Change Tjfu-Captcha-Debugging-Ignore header to Ignore-Captcha
app.config['TJFU_CAPTCHA_DEBUGGING_IGNORE_HEADER_KEY'] = 'Ignore-Captcha'

You can also customize responses for missing headers (on_missing_header) and invalid captcha codes (on_invalid_captcha_code).

from flask import Flask
from flask_tjfu_captcha import TjfuCaptcha

app = Flask(__name__)
tjfu_captcha = TjfuCaptcha(
    app,
    True
)


def on_missing_header(header, status_code):
    return {
        "error": f"Missing header: {header}",
        "status_code": status_code
    }


def on_invalid_captcha_code(status_code):
    return {
        "error": "Invalid captcha code",
        "status_code": status_code
    }


tjfu_captcha.on_missing_header(
    on_missing_header
)

tjfu_captcha.on_invalid_captcha_code(
    on_invalid_captcha_code
)

Changelog

Version 1.0.0 - Initial Release - June 22, 2024

  • Initial release of the library with core functionalities:
    • Perform initialization and Captcha verification
    • Provide functions for customization

Each section in this changelog provides a summary of what was added, changed, fixed, or removed in each release of the software. This helps users and developers understand the evolution of the project over time and highlights important updates or improvements made in each version.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask-tjfu-captcha-1.0.0.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

flask_tjfu_captcha-1.0.0-py3-none-any.whl (4.6 kB view details)

Uploaded Python 3

File details

Details for the file flask-tjfu-captcha-1.0.0.tar.gz.

File metadata

  • Download URL: flask-tjfu-captcha-1.0.0.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.10.12

File hashes

Hashes for flask-tjfu-captcha-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a588d7fb3d2c928fc22b5cb7c3590bdb96746ff19262224c26375fce5970b2e7
MD5 6ed2d38fabe6f3de747b690774d63344
BLAKE2b-256 c41d5b2eb69d1f425f6d36c142aefc32003a5a12f231596835b3b1dc28813898

See more details on using hashes here.

File details

Details for the file flask_tjfu_captcha-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for flask_tjfu_captcha-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 877bfb6fdee0b9a87768c3d1647efcf87dce6671a034bbeffda3b5749972a05b
MD5 5f02aa5bd67dbf15e91f79d2d98a01ae
BLAKE2b-256 84c7f7129993915557621be363dad9a9424703f6f8a46f32e4b1e74bac9b9b5f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page