panos-response-pages
Modern, responsive response pages for PAN-OS. Generate response pages to delight users while protecting them from threats.
Table of Contents
Preview
Full Preview available via Github Pages pages.
Features
Use panos-response-pages to generate response pages that
- Provide responsive design for desktop and mobile
- Automatically serve light or dark mode depending on OS settings
- Detect the browser's language and render the page in it (13x supported languages)
- Automatically redirect users to sanctioned apps based on URL category match
- Link to the IT service desk via mail or link
- Support 7 themes across 4 colour palettes
Quickstart
Install it:
pip install panos-response-pages
Or, with uv:
uv tool install panos-response-pages
uvx panos-response-pages build # or run it without installing
Build the pages:
panos-response-pages build # every style, into ./out
panos-response-pages themes # what styles exist
panos-response-pages palettes # what colour palettes exist
out/deploy/<style>/<palette>/ is what you import into PAN-OS.
out/preview/index.html is a clickthrough gallery for review — style, palette,
page, viewport and colour scheme — built with sample data standing in for the
PAN-OS tokens.
Seven styles ship, all supporting both colour schemes. Six wear any of the three
brand palettes: assist, record, banner, glass, beacon, mesh. nyan
pins a palette of its own. See Styles.
Customise
Copy the shipped shells, palettes, themes and config out, then edit them:
panos-response-pages init # into ~/.panos_response_pages, which build finds on its own
Put your own settings in config/<customer>.json. It is deep-merged over
config/_defaults.json, so list only what differs:
{
"company": "Example Corp",
"supportUrl": "https://servicedesk.example.com/new-ticket",
"supportEmail": "",
"supportLabel": "the Service Desk",
"baseLanguage": "en",
"languages": ["en", "de"],
"redirect": {
"enabled": true,
"categories": {
"online-storage-and-backup": {
"app": "Company Drive",
"url": "https://drive.example.com/",
"seconds": 5,
"message": "Work files belong on {app}. Taking you there."
}
}
}
}
companyis the wordmark on every page.supportUrlpoints "Report to IT" at a ticket system instead of a mailbox. It must be an absolutehttps://URL — a response page is served as the blocked site, so a relative path resolves against whatever host refused the user.supportEmailandsupportUrlare mutually exclusive: set one and blank the other, or the build stops.supportLabelnames the queue for the places that print the contact inline — in email mode those print the address itself, so it applies tosupportUrlmode only.languagescompiles each listed language into every page, and the browser picks one at load.["en"]is the default. See Languages.redirecthands a user over to a sanctioned app after a countdown when the blocked category has an approved equivalent. It applies to the URL block page only — no other page carries a category token to key on, and the two coach pages already have a Continue action a countdown would race.
Then build against it:
panos-response-pages build --customer <name>
Languages
Every configured language is compiled into the page, and one is picked
from navigator.languages at load.
Thirteen languages ship — English, German, Spanish, Italian, French, Dutch,
Danish, Swedish, Japanese, Chinese (Simplified), Vietnamese, Russian and
Ukrainian. languages selects which of them a given build compiles:
"baseLanguage": "en",
"languages": ["en", "de"]
["en"] is the default, and it is byte-identical to a build from before any of
this existed — no dictionary, no selector, the suite compares the bytes.
Full detail — the per-language cost table, how many fit, translating your own copy, and what a translator must not change — is in Customising.
Development
uv sync --all-groups
uv run pre-commit install
uv run nox # lint, type-check, tests, docs
nox -s tests runs the suite with coverage; the gate is 93%. Commit uv.lock.
License
MIT. See LICENSE.
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 panos_response_pages-0.1.2.tar.gz.
File metadata
- Download URL: panos_response_pages-0.1.2.tar.gz
- Upload date:
- Size: 391.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb683cddc42850db8e95aa42bee239a4163feafddfb6a9b6c3680da960c73bd5
|
|
| MD5 |
3a23183b2a3188a6299f32bbe6eb277d
|
|
| BLAKE2b-256 |
a7b6dedf01f5d4036aa427de654f9326c3da030197618fc79e742ff92df69e47
|
Provenance
The following attestation bundles were made for panos_response_pages-0.1.2.tar.gz:
Publisher:
release.yml on kaisero/panos-response-pages
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
panos_response_pages-0.1.2.tar.gz -
Subject digest:
eb683cddc42850db8e95aa42bee239a4163feafddfb6a9b6c3680da960c73bd5 - Sigstore transparency entry: 2358340901
- Sigstore integration time:
-
Permalink:
kaisero/panos-response-pages@3e450c87d5c8c5a7f6f4e796f6758d421c412918 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/kaisero
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3e450c87d5c8c5a7f6f4e796f6758d421c412918 -
Trigger Event:
push
-
Statement type:
File details
Details for the file panos_response_pages-0.1.2-py3-none-any.whl.
File metadata
- Download URL: panos_response_pages-0.1.2-py3-none-any.whl
- Upload date:
- Size: 329.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0866e7be57beff14891d3b87d2a96054848ff25c2bf9ca39bf040b7a180602f5
|
|
| MD5 |
c82df0a73f0d04576e3cfee211735d79
|
|
| BLAKE2b-256 |
458d309e148fa368a8898a49954cdd751f8dc9a0c9a8303eba58afbd66c8e353
|
Provenance
The following attestation bundles were made for panos_response_pages-0.1.2-py3-none-any.whl:
Publisher:
release.yml on kaisero/panos-response-pages
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
panos_response_pages-0.1.2-py3-none-any.whl -
Subject digest:
0866e7be57beff14891d3b87d2a96054848ff25c2bf9ca39bf040b7a180602f5 - Sigstore transparency entry: 2358340940
- Sigstore integration time:
-
Permalink:
kaisero/panos-response-pages@3e450c87d5c8c5a7f6f4e796f6758d421c412918 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/kaisero
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3e450c87d5c8c5a7f6f4e796f6758d421c412918 -
Trigger Event:
push
-
Statement type: