Skip to main content

Intigin dynamic-backend adapter — thin in-app WSGI middleware for view-source protection.

Project description

intigin

Thin in-app WSGI adapter for Intigin dynamic-backend protection. It wraps your app so the same Intigin bundle that protects static sites also protects your server-rendered pages — view-source shows only a loader shell, and the real HTML is reconstructed client-side.

The adapter does almost nothing: the browser bundle does the heavy lifting. On a page navigation it returns a clean loader shell (no payload, no cookie); when the bundle asks for the page (a same-URL fetch carrying an X-Intigin-Payload header) it encodes the finished HTML into the frozen wire format and returns it. The bundle at https://{host}/{token}.js decodes and reconstructs the page, then reveals, polls, and hot-swaps live like a static Intigin page — no backend round-trip on updates.

Install

pip install intigin

Use

Wrap your WSGI callable with a scoped Gateway API key (dashboard → Settings → Gateway API). The adapter resolves your public bundle token from the key once at boot, so no token is hardcoded:

from intigin import Intigin

app.wsgi_app = Intigin(app.wsgi_app, api_key="iga_...", host="intigin.com")   # recommended

Flask uses app.wsgi_app; Django wraps application in wsgi.py. A raw 32-hex token="..." is also accepted for a zero-config demo.

Behavior

  • Cookieless. The payload rides the bundle's marker fetch (the browser's own session), so nothing payload-related appears in the source and no cookie is set — cookie blockers don't affect it.
  • Non-HTML passes through untouched; only top-level HTML navigations are wrapped.
  • Fail-closed. A bad/missing key or any wrap error disables the adapter (serves your app unprotected, logged to stderr) or returns a self-contained restricted page — never the raw HTML for a failed encode.
  • Kill-switch. INTIGIN_ADAPTER_MODE=wrap|passthrough|off (env). passthrough/off removes the adapter from the path.

Conformance

python -m intigin --selftest

Verifies the frozen wire format — base64("IGP1" + FLAGS + BODY), BODY = xor(deflate(utf8(html)), sha256(token)) — against the browser bundle's decoder.

Concealment, not encryption. The scramble key is derived from the public bundle token, so this defeats view-source and naive scrapers, not cryptanalysis. Object-level authorization stays in your own routes.

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

intigin-1.0.2.tar.gz (7.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

intigin-1.0.2-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file intigin-1.0.2.tar.gz.

File metadata

  • Download URL: intigin-1.0.2.tar.gz
  • Upload date:
  • Size: 7.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for intigin-1.0.2.tar.gz
Algorithm Hash digest
SHA256 4d320b82452d10390788ea433394d501c3c97963eaf2d30529a3a7a98631212b
MD5 1bbdead61413279799c0e336cd716774
BLAKE2b-256 b3efda1255fb24c4e1c1af838828c4ee45b0e7c526cf8150dfd0fa19a7d87d6f

See more details on using hashes here.

File details

Details for the file intigin-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: intigin-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for intigin-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1a72668a8eb6fea0f0ef8be9997ff0e6f139703d629655fbd52f3b8e9c5c6e74
MD5 b79c1a3191be24dbebee7cd8f4b32365
BLAKE2b-256 9481f8e3ddc63b9a34cc9352de7299b3cc019deac1008c298d602008adb30c84

See more details on using hashes here.

Supported by

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