glinet-profiler 0.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. glinet_profiler-0.0.1/.github/dependabot.yml +8 -0
  2. glinet_profiler-0.0.1/.github/workflows/ci.yml +30 -0
  3. glinet_profiler-0.0.1/.github/workflows/release.yml +43 -0
  4. glinet_profiler-0.0.1/.gitignore +17 -0
  5. glinet_profiler-0.0.1/.release-please-manifest.json +3 -0
  6. glinet_profiler-0.0.1/CHANGELOG.md +49 -0
  7. glinet_profiler-0.0.1/LICENSE +674 -0
  8. glinet_profiler-0.0.1/PKG-INFO +114 -0
  9. glinet_profiler-0.0.1/README.md +88 -0
  10. glinet_profiler-0.0.1/docs/plans/2026-06-27-glinet-profiler-launcher.md +985 -0
  11. glinet_profiler-0.0.1/docs/plans/2026-06-27-internalize-enumerator.md +460 -0
  12. glinet_profiler-0.0.1/docs/plans/2026-06-27-registry-runtime-fetch.md +611 -0
  13. glinet_profiler-0.0.1/docs/plans/2026-06-27-rehome-api-browser.md +576 -0
  14. glinet_profiler-0.0.1/docs/plans/2026-06-27-submission-pr-bot.md +458 -0
  15. glinet_profiler-0.0.1/docs/specs/2026-06-27-glinet-profiler-launcher-design.md +108 -0
  16. glinet_profiler-0.0.1/docs/specs/2026-06-27-internalize-enumerator-design.md +67 -0
  17. glinet_profiler-0.0.1/docs/specs/2026-06-27-registry-runtime-fetch-design.md +65 -0
  18. glinet_profiler-0.0.1/docs/specs/2026-06-27-rehome-api-browser-design.md +106 -0
  19. glinet_profiler-0.0.1/docs/specs/2026-06-27-release-automation-design.md +43 -0
  20. glinet_profiler-0.0.1/docs/specs/2026-06-27-submission-pr-bot-design.md +79 -0
  21. glinet_profiler-0.0.1/pyproject.toml +83 -0
  22. glinet_profiler-0.0.1/release-please-config.json +10 -0
  23. glinet_profiler-0.0.1/src/glinet_profiler/__init__.py +1 -0
  24. glinet_profiler-0.0.1/src/glinet_profiler/capture.py +128 -0
  25. glinet_profiler-0.0.1/src/glinet_profiler/cli.py +85 -0
  26. glinet_profiler-0.0.1/src/glinet_profiler/enumerator/__init__.py +6 -0
  27. glinet_profiler-0.0.1/src/glinet_profiler/enumerator/catalog.py +618 -0
  28. glinet_profiler-0.0.1/src/glinet_profiler/enumerator/classify.py +28 -0
  29. glinet_profiler-0.0.1/src/glinet_profiler/enumerator/coverage.py +29 -0
  30. glinet_profiler-0.0.1/src/glinet_profiler/enumerator/models.py +76 -0
  31. glinet_profiler-0.0.1/src/glinet_profiler/enumerator/probe.py +172 -0
  32. glinet_profiler-0.0.1/src/glinet_profiler/enumerator/redact.py +73 -0
  33. glinet_profiler-0.0.1/src/glinet_profiler/enumerator/report.py +86 -0
  34. glinet_profiler-0.0.1/src/glinet_profiler/enumerator/ssh.py +193 -0
  35. glinet_profiler-0.0.1/src/glinet_profiler/enumerator/wordlist.py +131 -0
  36. glinet_profiler-0.0.1/src/glinet_profiler/glinet_login.py +63 -0
  37. glinet_profiler-0.0.1/src/glinet_profiler/registry.py +34 -0
  38. glinet_profiler-0.0.1/src/glinet_profiler/sanitize.py +29 -0
  39. glinet_profiler-0.0.1/src/glinet_profiler/server.py +134 -0
  40. glinet_profiler-0.0.1/src/glinet_profiler/submit.py +17 -0
  41. glinet_profiler-0.0.1/src/glinet_profiler/web/app.js +106 -0
  42. glinet_profiler-0.0.1/src/glinet_profiler/web/index.html +36 -0
  43. glinet_profiler-0.0.1/src/glinet_profiler/web/style.css +34 -0
  44. glinet_profiler-0.0.1/tests/test_capture.py +80 -0
  45. glinet_profiler-0.0.1/tests/test_cli.py +81 -0
  46. glinet_profiler-0.0.1/tests/test_enum_brute.py +57 -0
  47. glinet_profiler-0.0.1/tests/test_enum_catalog.py +68 -0
  48. glinet_profiler-0.0.1/tests/test_enum_classify.py +38 -0
  49. glinet_profiler-0.0.1/tests/test_enum_probe.py +72 -0
  50. glinet_profiler-0.0.1/tests/test_enum_redact.py +55 -0
  51. glinet_profiler-0.0.1/tests/test_enum_report.py +72 -0
  52. glinet_profiler-0.0.1/tests/test_enum_ssh_integration.py +36 -0
  53. glinet_profiler-0.0.1/tests/test_enum_ssh_parse.py +74 -0
  54. glinet_profiler-0.0.1/tests/test_glinet_login.py +91 -0
  55. glinet_profiler-0.0.1/tests/test_registry.py +13 -0
  56. glinet_profiler-0.0.1/tests/test_sanitize.py +58 -0
  57. glinet_profiler-0.0.1/tests/test_server.py +86 -0
  58. glinet_profiler-0.0.1/tests/test_submit.py +21 -0
  59. glinet_profiler-0.0.1/tests/test_web.py +43 -0
  60. glinet_profiler-0.0.1/uv.lock +1304 -0
@@ -0,0 +1,8 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: github-actions
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ cooldown:
8
+ default-days: 7
@@ -0,0 +1,30 @@
1
+ name: CI
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ permissions:
7
+ contents: read
8
+ jobs:
9
+ test:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
13
+ with:
14
+ persist-credentials: false
15
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
16
+ with:
17
+ python-version: "3.11"
18
+ - run: uv sync --all-extras --dev
19
+ - name: Ruff lint
20
+ run: uv run ruff check .
21
+ - name: Ruff format
22
+ run: uv run ruff format --check .
23
+ - name: Mypy (strict)
24
+ run: uv run mypy src
25
+ - name: Pylint
26
+ run: uv run pylint $(git ls-files '*.py')
27
+ - name: Tests
28
+ run: uv run pytest -q
29
+ - name: Zizmor (workflow security)
30
+ run: uv run zizmor .github/
@@ -0,0 +1,43 @@
1
+ name: release
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ permissions: {}
6
+ jobs:
7
+ release-please:
8
+ runs-on: ubuntu-latest
9
+ permissions:
10
+ contents: write
11
+ pull-requests: write
12
+ outputs:
13
+ release_created: ${{ steps.rp.outputs.release_created }}
14
+ tag_name: ${{ steps.rp.outputs.tag_name }}
15
+ steps:
16
+ - id: rp
17
+ uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 # v5
18
+ with:
19
+ config-file: release-please-config.json
20
+ manifest-file: .release-please-manifest.json
21
+
22
+ # Publishes to PyPI via trusted publishing (OIDC) ONLY when release-please cut a
23
+ # release in this same run — sidesteps the GITHUB_TOKEN recursion guard, so no PAT.
24
+ publish:
25
+ needs: release-please
26
+ if: needs.release-please.outputs.release_created == 'true'
27
+ runs-on: ubuntu-latest
28
+ environment: production
29
+ permissions:
30
+ id-token: write # OIDC for PyPI trusted publishing
31
+ contents: read
32
+ steps:
33
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
34
+ with:
35
+ persist-credentials: false
36
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
37
+ with:
38
+ python-version: "3.11"
39
+ enable-cache: false # release artifact must not depend on a (poisonable) cache
40
+ - name: Build sdist + wheel
41
+ run: uv build
42
+ - name: Publish to PyPI (trusted publishing)
43
+ uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
@@ -0,0 +1,17 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.py[cod]
4
+ .pytest_cache/
5
+ .mypy_cache/
6
+ .ruff_cache/
7
+ dist/
8
+ build/
9
+ *.egg-info/
10
+
11
+ # Raw enumerator reports / captures may contain device identifiers (mac/sn) — never commit.
12
+ reports/
13
+ captures/
14
+ docs/devices/
15
+
16
+ # Pages staging area — assembled at deploy time, never committed.
17
+ _site/
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.0.1"
3
+ }
@@ -0,0 +1,49 @@
1
+ # Changelog
2
+
3
+ ## 0.0.1 (2026-06-27)
4
+
5
+
6
+ ### Features
7
+
8
+ * **cli:** one-shot headless capture by IP ([7c879c2](https://github.com/shauneccles/glinet-profiler/commit/7c879c203d7ff57d89a3d1adf8c8a6e951430d33))
9
+ * fetch the live registry at runtime; drop bundled data/site/bot (own repo) ([2c581a3](https://github.com/shauneccles/glinet-profiler/commit/2c581a37060ed88be98bfeb56ff71a3e0b794664))
10
+ * glinet-profiler local capture launcher (extracted from gli4py) ([bf2c1be](https://github.com/shauneccles/glinet-profiler/commit/bf2c1be0e2ff9c9f7ce323884680ef37ce635613))
11
+ * **launcher:** live capture progress (NDJSON streaming + UI panel + logging) ([0a70368](https://github.com/shauneccles/glinet-profiler/commit/0a70368b451cf6b9d0a018f52fcb1fa8219e4e69))
12
+ * local GL.iNet challenge-response login (libpass + hashlib) ([53e82aa](https://github.com/shauneccles/glinet-profiler/commit/53e82aad499ad671b9f3d910328003d4a17b93f6))
13
+ * move the enumerator engine into glinet_profiler (paramiko core) ([3ba5118](https://github.com/shauneccles/glinet-profiler/commit/3ba511813e5b5f54ce43b2220ab611809b7c54a0))
14
+ * point launcher Submit at the issue form (auto-label submission) ([38caf40](https://github.com/shauneccles/glinet-profiler/commit/38caf402f1fd8b9431f20a0a2a31987c8c5d6dd8))
15
+ * public registry browser site (ported, hardened escaping) ([8e4f6ea](https://github.com/shauneccles/glinet-profiler/commit/8e4f6ea6251e0ba190f41438cf6cf400f047048d))
16
+ * registry manifest builder (build_manifest + rebuild + CLI) ([d59163b](https://github.com/shauneccles/glinet-profiler/commit/d59163be2a18f0ba3d6f73a1de35fe142ba5962c))
17
+ * rewire capture/ingest to local engine+login; drop gli4py; SSH default ([38872a4](https://github.com/shauneccles/glinet-profiler/commit/38872a48567cfbd7e0e5d311aaded06ed2e38b79))
18
+ * **ui:** SSH ground-truth checked by default ([1ff8285](https://github.com/shauneccles/glinet-profiler/commit/1ff8285c741f2413954d05b99518b6f283c45c11))
19
+ * validate + ingest submitted profiles (glinet_profiler.ingest + CLI) ([710a2f9](https://github.com/shauneccles/glinet-profiler/commit/710a2f912ab4aecb821d44da1878ea3bbbc797da))
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * **ci:** pass attachment URL via env to curl (avoid shell injection) ([8c4b2c7](https://github.com/shauneccles/glinet-profiler/commit/8c4b2c7dd6bb0326eef3274b1f9113f5f3950730))
25
+ * drop stale gli4py[ssh] hint from SshUnavailable message ([3bfd73b](https://github.com/shauneccles/glinet-profiler/commit/3bfd73b8994fdf31a12377e93f0a47101c43a6e2))
26
+ * **launcher:** flush final NDJSON line; assert progress-count in structural test ([e8b2f0b](https://github.com/shauneccles/glinet-profiler/commit/e8b2f0bf5f6f69f03cb54e99568b4f5ebf703faf))
27
+ * **launcher:** skip browser auto-open under WSL; graceful Ctrl+C shutdown (no traceback) ([42980e8](https://github.com/shauneccles/glinet-profiler/commit/42980e815c6077595bc8c6b30a21a30ece7f2a19))
28
+ * **login:** clear error on invalid challenge; sha-determinism + username tests ([37b5a72](https://github.com/shauneccles/glinet-profiler/commit/37b5a7281a7a125c50dad4c6f64604a191ba5904))
29
+ * random heredoc delimiter + validate model/firmware are strings ([237a61d](https://github.com/shauneccles/glinet-profiler/commit/237a61d951a1db7b07363f84bf79f627233b3a3e))
30
+ * **registry:** guard non-dict manifest; cover registry-url threading + known-device CLI ([605f907](https://github.com/shauneccles/glinet-profiler/commit/605f907f5ce7e8e31d87d4d61a1305abbd5bd719))
31
+
32
+
33
+ ### Documentation
34
+
35
+ * correct stale copy (no gli4py dependency; registry/site moved to glinet-registry) ([2ff1694](https://github.com/shauneccles/glinet-profiler/commit/2ff1694639f9414b8c94d9c783ec3385bca25257))
36
+ * implementation plan for re-homing the API browser (Phase 2) ([6d6dd39](https://github.com/shauneccles/glinet-profiler/commit/6d6dd39552aebe8a10cfb731bbf947d9de19c021))
37
+ * implementation plan for the submission PR bot ([163ec05](https://github.com/shauneccles/glinet-profiler/commit/163ec056ed585734075b2e4cbda178170026d90d))
38
+ * implementation plan to internalize the enumerator + drop gli4py ([25e3df9](https://github.com/shauneccles/glinet-profiler/commit/25e3df917ed3b0f3dbaee0025e66c15992efc95a))
39
+ * plan to split the registry into its own repo (runtime fetch) ([0f0c599](https://github.com/shauneccles/glinet-profiler/commit/0f0c599faa910ae565c54f329959711d95a90a80))
40
+ * preserve Phase-1 launcher design (spec + plan) from gli4py staging ([69eb55d](https://github.com/shauneccles/glinet-profiler/commit/69eb55dc998f3fd8a3f26534b73f25cf51edf661))
41
+ * spec automated profile-submission PR bot ([2c9b5ca](https://github.com/shauneccles/glinet-profiler/commit/2c9b5ca5719ca799b860a5fb70c90d0ebc9acf37))
42
+ * spec internalize the enumerator; drop gli4py entirely ([06f1947](https://github.com/shauneccles/glinet-profiler/commit/06f1947a90256bf2b8c4fe50626ca4e98fb818f5))
43
+ * spec re-home the API browser (Phase 2) ([36a5718](https://github.com/shauneccles/glinet-profiler/commit/36a5718a141b2c48d3555d9a6b47f45ae1c6aa19))
44
+ * spec split the registry into its own repo (runtime fetch) ([9acc6a0](https://github.com/shauneccles/glinet-profiler/commit/9acc6a0b4544bff2afc3ba135817fa9af8bf0a28))
45
+
46
+
47
+ ### Continuous Integration
48
+
49
+ * release automation (release-please + PyPI trusted publishing) ([a88409b](https://github.com/shauneccles/glinet-profiler/commit/a88409b5ca2a886235683c105e014b750fcb3959))