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.1.tar.gz (7.4 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.1-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: intigin-1.0.1.tar.gz
  • Upload date:
  • Size: 7.4 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.1.tar.gz
Algorithm Hash digest
SHA256 42fa73eac1fcb438bb5b1fe5a0c9cc4c8ce0b706109d1dc548fd6c396f9d00d1
MD5 8faa51d13c892e6243806243f64d337e
BLAKE2b-256 f83da15633474bdf8a4d238aaeeba7631a58be417d57c7ce3b48b64eaac68be9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: intigin-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 8.0 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5b7a29467ae8a766053c3b33eac1ff939a51d60027601f8ee2ae7b0ed052973e
MD5 04acddb6ecdb850aeeab383248784c55
BLAKE2b-256 98e325966331a803c08c565d278ae6cd44e0cad5dbf0b0fab38f5027e4ce675b

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