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/offremoves 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file intigin-1.0.3.tar.gz.
File metadata
- Download URL: intigin-1.0.3.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb1b0317b7e28d6df872c8690189ae0463df107c33a6e5da59577f73cf902e23
|
|
| MD5 |
84a50c6184cc103e0f9c1aae9b61989b
|
|
| BLAKE2b-256 |
caf267a013c357d84fa95f6d99c531c95aa36582fb345f63aea1d65b1712886a
|
File details
Details for the file intigin-1.0.3-py3-none-any.whl.
File metadata
- Download URL: intigin-1.0.3-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f361486db6adbf2bfc77fa5d147284c4d1787dbe437c7704f91eaa6def49e482
|
|
| MD5 |
2371b786fe4dc7eae9633e33b8704a74
|
|
| BLAKE2b-256 |
952af8ddd1bcbeced8737858ce2cbfbb012e2215dbc714efbbe4ca89f2de88d6
|