Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
24a19f3
chore: add type hints, add helper method for loading JSON
liquidz00 Apr 20, 2025
b0fd8ed
chore: add type hints
liquidz00 Apr 20, 2025
dd0266d
chore: add ruff config for code formatting
liquidz00 Apr 21, 2025
1bb0ca9
chore: add type hints, format code to PEP standards with ruff
liquidz00 Apr 21, 2025
8b2c0d2
chore: ignore ruff cache
liquidz00 May 10, 2025
c64afb9
chore: default to double quotes instead of single quotes
liquidz00 May 10, 2025
a2f6bf1
refactor: format codebase with double quotes for consistency
liquidz00 May 10, 2025
c45d68e
Merge pull request #52 from liquidz00/type-hints
ball42 May 12, 2025
361e2d6
fix: corrected notice info for custom webhooks with custom auth
ball42 Jul 30, 2025
9f2e1b4
Merge pull request #55 from jamf/bugfix
ball42 Aug 5, 2025
e42ffb5
Merge branch 'main' into develop
ball42 Feb 11, 2026
dd486fb
feature: templates (#58)
ball42 Feb 11, 2026
f398b84
feature: unified automations (#61)
ball42 Feb 11, 2026
b2008f7
feat: add credential management and search functionality (#60)
ball42 Feb 11, 2026
661cda3
feature: UI refresh (#59)
ball42 Feb 11, 2026
c6cfb8d
chore: wire blueprints and cleanup (#57)
ball42 Feb 11, 2026
11d5714
feat: add session timeout warning modal and extend session duration t…
ball42 Feb 13, 2026
8c1eccc
feat: update static file references to use url_for for better cache m…
ball42 Feb 13, 2026
c0c50db
feat: enhance error handling and logging
ball42 Feb 13, 2026
e6d03db
feat: redesign error and success pages with improved UI components
ball42 Feb 13, 2026
580f78b
feat: enhance UI
ball42 Feb 13, 2026
609f975
feat: add smoke-test harness and CI (ruff + pytest) (#62)
ball42 Jul 7, 2026
81a5493
fix: template webhooks fire (B1) + reject path traversal in import (B…
ball42 Jul 8, 2026
81839d1
feat: real, admin-configurable session timeout + cookie hardening (B4…
ball42 Jul 9, 2026
0a6d735
fix: bug-fix batch — receiver, resource delete, error pages, login UX…
ball42 Jul 10, 2026
105c6ce
fix: link the Setup Required error page directly to /setup (#66)
ball42 Jul 10, 2026
dabb394
fix: make session-timeout modal survive sleep via absolute deadline (…
ball42 Jul 10, 2026
0b0061a
chore: remove dead code fossils (mongoengine, load_home, stale commen…
ball42 Jul 11, 2026
7f0f5f8
fix: J10 paper-cuts — upload cap, setup slash, shebang, copy, auth gu…
ball42 Jul 11, 2026
e02ab88
fix: guard legacy redirect routes against open-redirect (B8) (#70)
ball42 Jul 11, 2026
a4876ba
docs: add Jamf Routines comparison, bump to v3.2, add release notes
ball42 Jul 23, 2026
68ad3d9
docs: document the JAWA automation script contract
ball42 Jul 23, 2026
a530877
feat: note Jamf Routines as a hosted alternative on the setup page
ball42 Jul 23, 2026
36662ee
docs: scope script output/exit behavior to the webhook path
ball42 Jul 23, 2026
1237294
Merge Jamf Routines plug + v3.2 README + scripting docs into develop
ball42 Jul 23, 2026
b9371c7
fix: harden installer.sh and guard it in CI
ball42 Jul 23, 2026
52f0520
chore: stop tracking runtime webhooks.json, ignore scripts/
ball42 Jul 23, 2026
4119061
Merge installer.sh hardening + CI hygiene guard into develop
ball42 Jul 23, 2026
6187199
refactor: clean up the setup form layout
ball42 Jul 23, 2026
b780e71
fix: close bogus-credential login bypass via stale token (security)
ball42 Jul 23, 2026
4e6cd8d
fix: render a single autofocus on the login form
ball42 Jul 23, 2026
47f58c3
feat: add success-context session flash + PRG on automation create (J13)
ball42 Jul 24, 2026
dc906af
feat: convert automation edit + delete to PRG (J13)
ball42 Jul 24, 2026
0420d55
feat: convert /setup success to PRG (J13)
ball42 Jul 24, 2026
ee7de28
feat: give the success page forward actions instead of history.back()…
ball42 Jul 24, 2026
21ccb6e
test: assert smart-group notice survives the success flash (J13)
ball42 Jul 24, 2026
2aff5dc
Merge J13: success-page PRG + forward actions into develop
ball42 Jul 24, 2026
672493f
feat: add the Jamf webhook event catalog as static reference data (J15)
ball42 Jul 29, 2026
012ffa5
fix: close two escape paths in the webhook catalog fail-soft guard (J15)
ball42 Jul 29, 2026
af300e1
feat: serve the webhook event reference at /reference/webhooks (J15)
ball42 Jul 29, 2026
3b9c551
fix: degrade the webhook reference when only part of the catalog loads
ball42 Jul 29, 2026
977ded9
feat: render event schemas and sample payloads on the reference page …
ball42 Jul 29, 2026
ec39677
test: pin the reference page against a damaged event entry (J15)
ball42 Jul 29, 2026
499998f
fix: guard the reference page against wrong-typed catalog entries (J15)
ball42 Jul 29, 2026
dce7061
test: pin the reference index against a wrong-typed entry (J15)
ball42 Jul 29, 2026
a5ba3d1
feat: make Extras > Webhook Reference live, drop Notebooks (J14/J15)
ball42 Jul 29, 2026
781dae0
test: scope Extras menu tests to the dropdown, not the page
ball42 Jul 29, 2026
5a1b700
feat: give empty-state CTAs brand styling (J14)
ball42 Jul 29, 2026
ea1ef0d
test: scope empty-state assertions to the empty-state markup
ball42 Jul 29, 2026
089848f
feat: style the hero subtitle link with tokens, not an inline style (…
ball42 Jul 29, 2026
004a9a6
test: pin the hero subtitle link text and its escaping
ball42 Jul 31, 2026
2f2a1c1
feat: group the Jamf event dropdown by category from the catalog (J15)
ball42 Jul 31, 2026
f51f561
fix: degrade one bad event category instead of the whole dropdown
ball42 Jul 31, 2026
935654f
test: cover both mapping and string in miscategorised-event test
ball42 Jul 31, 2026
3a504fc
test: make the catalog-driven render assertions able to fail
ball42 Jul 31, 2026
35ad0d3
fix: apply the catalog shape rule to the reference pages too
ball42 Jul 31, 2026
716cac4
Merge J14+J15: dashboard/Extras polish + Webhook Reference page into …
ball42 Aug 4, 2026
6896531
chore: bump version strings to 3.2.0 (J9)
ball42 Aug 4, 2026
ba28430
chore: stop tracking runtime data/cron.json
ball42 Aug 4, 2026
8298d1f
fix: make every bundled template script runnable (J16, B6)
ball42 Aug 5, 2026
e2e0344
fix: correct template catalog metadata and the boolean-event crash (J…
ball42 Aug 5, 2026
fa07f68
fix: stop corrupting template config values on enable (J16, B13)
ball42 Aug 5, 2026
4fbf0a8
fix: substitute template tokens in one pass (J16, B13 review round 1)
ball42 Aug 5, 2026
14832ac
fix: reject imported template packages that cannot run (J16, B16)
ball42 Aug 5, 2026
d5ba4bc
feat: register templates as Jamf Pro automations and create them in J…
ball42 Aug 5, 2026
e4587af
fix: stop enable writing auth values that lock the webhook out (J16, …
ball42 Aug 6, 2026
e7a0582
test: guard the canonical API block against drift (J16)
ball42 Aug 7, 2026
5131f31
feat: offer Jamf Pro registration on the template import path (J16, B14)
ball42 Aug 10, 2026
869ea68
Merge v3.2.0 version bump + untrack data/cron.json into develop (J9)
ball42 Aug 10, 2026
154ea47
Merge J16: finish the bundled workflow templates into develop
ball42 Aug 10, 2026
3b1f6ba
fix: make the Resource Files page safe and consistent with the design…
ball42 Aug 11, 2026
c194a25
Merge the Resource Files page safety and design-system fix into develop
ball42 Aug 27, 2026
1781db4
fix: stop reflecting the webhook name into the 401 body (J11)
ball42 Aug 28, 2026
f0ffe5d
docs: rewrite the v3.2.0 release notes for the shipped payload (J9)
ball42 Aug 28, 2026
52c4e3d
fix: accept the activationcode shape a live Jamf Pro actually returns
ball42 Aug 28, 2026
8af3fb2
chore: bump requests and Werkzeug past their open advisories
ball42 Aug 28, 2026
56615c7
fix: hold requests at 2.32.x so Python 3.9 keeps resolving
ball42 Aug 28, 2026
5aedf02
docs: state the platform floor JAWA's dependencies actually require
ball42 Aug 28, 2026
87b3e70
fix: hide the credential fields a selected credential set supplies
ball42 Aug 28, 2026
9c3a68f
test: assert the credential precedence by whole line, not URL substring
ball42 Aug 28, 2026
888b74c
fix: close five release blockers found reviewing the v3.2.0 PR (J23-J27)
ball42 Aug 31, 2026
e9bde45
fix: refuse an unsupported Python before removing an existing install…
ball42 Aug 31, 2026
ab827fd
fix: preserve a valid TLS certificate across an upgrade (J31)
ball42 Aug 31, 2026
207eede
fix: label and colourise the certificate decision the installer repor…
ball42 Aug 31, 2026
2d04e04
fix: trust the detected install directory instead of discarding it (J33)
ball42 Sep 1, 2026
d166fe2
fix: enable the nginx site reliably and validate it before restart (J34)
ball42 Sep 1, 2026
36b4a39
docs: tell operators to re-run the installer after do-release-upgrade…
ball42 Sep 1, 2026
5de9e61
fix: make the installer work on a stock RHEL 9 host (J36)
ball42 Sep 4, 2026
93e5ab9
docs: add a "Planned for future releases" section
ball42 Sep 4, 2026
4556f12
docs: add four more planned items to the roadmap section
ball42 Sep 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: CI

on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]

jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# Oldest supported and current — catches syntax drift both ways.
python-version: ["3.9", "3.14"]
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: pip

- name: Install dependencies
run: pip install -r requirements-dev.txt

- name: Lint (ruff)
run: ruff check .

- name: Test (pytest)
run: python -m pytest -v

installer-hygiene:
# Guards bin/installer.sh (curled off main, run as root) against invisible-unicode
# paste corruption. The only legitimate non-ASCII lives in the spinner charsets
# (`local spin=` assignments); anything else is a stray ZWSP/NBSP/BOM and fails.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Bash syntax check
run: bash -n bin/installer.sh

- name: Reject stray non-ASCII (paste corruption)
run: |
stray=$(grep -nP '[^\x00-\x7F]' bin/installer.sh | grep -vE 'local spin=' || true)
if [ -n "$stray" ]; then
echo "::error::Non-ASCII characters found outside the spinner charsets in bin/installer.sh:"
echo "$stray"
echo "These are almost certainly invisible paste corruption (zero-width space, NBSP, BOM)."
exit 1
fi
echo "OK: no stray non-ASCII in bin/installer.sh"
12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -151,3 +151,15 @@ dmypy.json

# ruff
.ruff_cache

# LLM generated files
.claude/
CLAUDE.md

# JAWA runtime data
data/server.json
data/credentials.json
data/cron.json
data/webhooks.json
resources/files/
scripts/
277 changes: 274 additions & 3 deletions README.md

Large diffs are not rendered by default.

Loading
Loading