webgate 0.4.0__tar.gz → 0.4.2__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 (111) hide show
  1. {webgate-0.4.0 → webgate-0.4.2}/CHANGELOG.md +66 -0
  2. webgate-0.4.2/PKG-INFO +649 -0
  3. webgate-0.4.2/README.md +600 -0
  4. webgate-0.4.2/ROADMAP.md +79 -0
  5. {webgate-0.4.0 → webgate-0.4.2}/compose.dev.yml +9 -0
  6. webgate-0.4.2/compose.yml +29 -0
  7. webgate-0.4.2/docs/screenshots/v0.4/03-recording-replay.png +0 -0
  8. webgate-0.4.2/docs/screenshots/v0.4/04-recordings-modal.png +0 -0
  9. {webgate-0.4.0 → webgate-0.4.2}/pyproject.toml +2 -1
  10. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/app.py +2 -0
  11. webgate-0.4.2/src/webgate/auth/ldap.py +163 -0
  12. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/auth/routes.py +29 -8
  13. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/config.py +14 -0
  14. webgate-0.4.2/src/webgate/recordings/models.py +37 -0
  15. webgate-0.4.2/src/webgate/recordings/recorder.py +63 -0
  16. webgate-0.4.2/src/webgate/recordings/routes.py +139 -0
  17. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/static/index.html +58 -0
  18. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/terminal/routes.py +42 -0
  19. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/terminal/shared.py +8 -0
  20. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/terminal/ws_handler.py +5 -0
  21. webgate-0.4.2/tests/__init__.py +0 -0
  22. {webgate-0.4.0 → webgate-0.4.2}/uv.lock +15 -1
  23. webgate-0.4.0/PKG-INFO +0 -817
  24. webgate-0.4.0/README.md +0 -769
  25. webgate-0.4.0/ROADMAP.md +0 -93
  26. webgate-0.4.0/compose.yml +0 -15
  27. {webgate-0.4.0 → webgate-0.4.2}/.dockerignore +0 -0
  28. {webgate-0.4.0 → webgate-0.4.2}/.github/workflows/docs.yml +0 -0
  29. {webgate-0.4.0 → webgate-0.4.2}/.gitignore +0 -0
  30. {webgate-0.4.0 → webgate-0.4.2}/Dockerfile +0 -0
  31. {webgate-0.4.0 → webgate-0.4.2}/Dockerfile.demo +0 -0
  32. {webgate-0.4.0 → webgate-0.4.2}/Dockerfile.ssh-demo +0 -0
  33. {webgate-0.4.0 → webgate-0.4.2}/LICENSE +0 -0
  34. {webgate-0.4.0 → webgate-0.4.2}/VERSION +0 -0
  35. {webgate-0.4.0 → webgate-0.4.2}/after-reload.yaml +0 -0
  36. {webgate-0.4.0 → webgate-0.4.2}/docs/api/auth.md +0 -0
  37. {webgate-0.4.0 → webgate-0.4.2}/docs/api/files.md +0 -0
  38. {webgate-0.4.0 → webgate-0.4.2}/docs/api/servers.md +0 -0
  39. {webgate-0.4.0 → webgate-0.4.2}/docs/api/terminal.md +0 -0
  40. {webgate-0.4.0 → webgate-0.4.2}/docs/changelog.md +0 -0
  41. {webgate-0.4.0 → webgate-0.4.2}/docs/getting-started/installation.md +0 -0
  42. {webgate-0.4.0 → webgate-0.4.2}/docs/getting-started/quickstart.md +0 -0
  43. {webgate-0.4.0 → webgate-0.4.2}/docs/guide/files.md +0 -0
  44. {webgate-0.4.0 → webgate-0.4.2}/docs/guide/servers.md +0 -0
  45. {webgate-0.4.0 → webgate-0.4.2}/docs/guide/split.md +0 -0
  46. {webgate-0.4.0 → webgate-0.4.2}/docs/guide/terminal.md +0 -0
  47. {webgate-0.4.0 → webgate-0.4.2}/docs/guide/users.md +0 -0
  48. {webgate-0.4.0 → webgate-0.4.2}/docs/index.md +0 -0
  49. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/access-control.png +0 -0
  50. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/audit.png +0 -0
  51. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/edit-access-control.png +0 -0
  52. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/editor.png +0 -0
  53. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/light-theme.png +0 -0
  54. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/login.png +0 -0
  55. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/new-server-form.png +0 -0
  56. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/sftp-restricted.png +0 -0
  57. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/sftp.png +0 -0
  58. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/site-manager.png +0 -0
  59. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/split-view.png +0 -0
  60. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/ssh-disabled.png +0 -0
  61. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/terminal.png +0 -0
  62. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/users.png +0 -0
  63. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/v0.3/01-login-demo-banner.png +0 -0
  64. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/v0.3/02-dashboard-jump-host.png +0 -0
  65. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/v0.3/03-terminal-snippets-jump.png +0 -0
  66. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/v0.3/04-snippet-executed.png +0 -0
  67. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/v0.3/05-sftp-via-jump.png +0 -0
  68. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/v0.3/06-webhooks-modal.png +0 -0
  69. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/v0.3/07-webhook-test-fired.png +0 -0
  70. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/v0.3/08-add-server-jump-via.png +0 -0
  71. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/v0.4/01-shared-terminal-owner.png +0 -0
  72. {webgate-0.4.0 → webgate-0.4.2}/docs/screenshots/v0.4/02-shared-terminal-joiner.png +0 -0
  73. {webgate-0.4.0 → webgate-0.4.2}/fly.toml +0 -0
  74. {webgate-0.4.0 → webgate-0.4.2}/mkdocs.yml +0 -0
  75. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/__init__.py +0 -0
  76. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/__main__.py +0 -0
  77. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/audit/__init__.py +0 -0
  78. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/audit/models.py +0 -0
  79. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/audit/service.py +0 -0
  80. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/auth/__init__.py +0 -0
  81. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/auth/models.py +0 -0
  82. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/auth/service.py +0 -0
  83. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/db/__init__.py +0 -0
  84. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/db/engine.py +0 -0
  85. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/demo.py +0 -0
  86. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/files/__init__.py +0 -0
  87. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/files/models.py +0 -0
  88. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/files/pool.py +0 -0
  89. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/files/routes.py +0 -0
  90. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/files/sftp_service.py +0 -0
  91. {webgate-0.4.0/src/webgate/servers → webgate-0.4.2/src/webgate/recordings}/__init__.py +0 -0
  92. {webgate-0.4.0/src/webgate/snippets → webgate-0.4.2/src/webgate/servers}/__init__.py +0 -0
  93. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/servers/crypto.py +0 -0
  94. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/servers/models.py +0 -0
  95. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/servers/monitor.py +0 -0
  96. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/servers/routes.py +0 -0
  97. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/servers/service.py +0 -0
  98. {webgate-0.4.0/src/webgate/terminal → webgate-0.4.2/src/webgate/snippets}/__init__.py +0 -0
  99. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/snippets/models.py +0 -0
  100. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/snippets/routes.py +0 -0
  101. {webgate-0.4.0/src/webgate/webhooks → webgate-0.4.2/src/webgate/terminal}/__init__.py +0 -0
  102. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/terminal/ssh_session.py +0 -0
  103. {webgate-0.4.0/tests → webgate-0.4.2/src/webgate/webhooks}/__init__.py +0 -0
  104. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/webhooks/dispatcher.py +0 -0
  105. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/webhooks/models.py +0 -0
  106. {webgate-0.4.0 → webgate-0.4.2}/src/webgate/webhooks/routes.py +0 -0
  107. {webgate-0.4.0 → webgate-0.4.2}/tests/conftest.py +0 -0
  108. {webgate-0.4.0 → webgate-0.4.2}/tests/test_auth.py +0 -0
  109. {webgate-0.4.0 → webgate-0.4.2}/tests/test_files.py +0 -0
  110. {webgate-0.4.0 → webgate-0.4.2}/tests/test_servers.py +0 -0
  111. {webgate-0.4.0 → webgate-0.4.2}/tests/test_terminal.py +0 -0
@@ -1,5 +1,71 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.4.2 (2026-04-15)
4
+
5
+ ### Features
6
+
7
+ - **LDAP / Active Directory authentication** -- enable with `WEBGATE_LDAP_ENABLED=true` and login flow falls back to LDAP after the local user table. On a successful LDAP bind the user is auto-provisioned (or refreshed) in the local DB, with `allowed_groups` derived from LDAP group memberships and admin status from a configurable list of admin groups.
8
+
9
+ ### Configuration
10
+
11
+ | Env var | Description |
12
+ |---|---|
13
+ | `WEBGATE_LDAP_ENABLED` | `true` to enable LDAP login |
14
+ | `WEBGATE_LDAP_URL` | `ldap://host:389` or `ldaps://host:636` |
15
+ | `WEBGATE_LDAP_BIND_DN` | service account DN, e.g. `cn=admin,dc=example,dc=com` |
16
+ | `WEBGATE_LDAP_BIND_PASSWORD` | service account password |
17
+ | `WEBGATE_LDAP_USER_BASE` | e.g. `ou=people,dc=example,dc=com` |
18
+ | `WEBGATE_LDAP_USER_FILTER` | default `(uid={username})` (AD: `(sAMAccountName={username})`) |
19
+ | `WEBGATE_LDAP_GROUP_BASE` | e.g. `ou=groups,dc=example,dc=com` (empty = no group lookup) |
20
+ | `WEBGATE_LDAP_GROUP_FILTER` | default `(member={dn})` (AD nested: `(member:1.2.840.113556.1.4.1941:={dn})`) |
21
+ | `WEBGATE_LDAP_GROUP_MAP` | JSON `{"ldap-cn":"webgate-group"}` |
22
+ | `WEBGATE_LDAP_ADMIN_GROUPS` | JSON list of LDAP CNs that grant admin |
23
+
24
+ ### Details
25
+
26
+ - Search-then-bind flow: bind as service account, search by username, re-bind as the user with their password
27
+ - LDAP filter values are properly escaped (RFC 4515)
28
+ - All `ldap3` calls run in `asyncio.to_thread` to avoid blocking the event loop
29
+ - Local accounts (admin, API keys, 2FA) keep working as before -- LDAP is only consulted after a local-credential miss
30
+ - Re-login refreshes admin status and group mapping from LDAP every time
31
+
32
+ ### Verified
33
+
34
+ End-to-end against `osixia/openldap` with an `alice` user in groups `devs` and `admins`:
35
+
36
+ - `alice / alicepass` → 200, JWT issued, `/api/auth/me` returns `is_admin=true`, `allowed_groups=["all","production"]` (mapped from LDAP CNs)
37
+ - `alice / WRONG` → 401 Invalid credentials
38
+ - `admin / admin` (local fallback) → still works
39
+
40
+ ---
41
+
42
+ ## v0.4.1 (2026-04-15)
43
+
44
+ ### Features
45
+
46
+ - **SSH session recording** -- when `WEBGATE_RECORD_SESSIONS=true`, every SSH terminal session is captured to an asciinema cast v2 file under `WEBGATE_RECORDINGS_DIR` (default `./recordings`). Both owner-only and shared sessions are recorded. A new `recordings` table tracks file path, server, user, start/end, duration and size.
47
+ - **Built-in web replay** -- `📹 Recordings` button (top toolbar) opens a list with **▶ Play** / **DL** / **Del** actions. Play opens an asciinema-player tab that streams the cast directly from the API. Non-admins see only their own recordings; admins see everyone's.
48
+ - **Compliance-grade audit trail** -- the recording captures the full PTY output that every participant saw, including pasted commands and environment, in a portable, replayable, vendor-independent format (you can also `asciinema play file.cast` locally).
49
+
50
+ ### Details
51
+
52
+ - New `WEBGATE_RECORD_SESSIONS` and `WEBGATE_RECORDINGS_DIR` settings (both off / `./recordings` by default)
53
+ - New `Recording` model + REST CRUD at `/api/recordings`
54
+ - New `webgate.recordings.recorder.CastRecorder` writes asciinema cast v2 (JSON Lines) line-buffered, very low overhead
55
+ - Hook in `SharedSession.broadcast` -- recorder receives the same byte stream as every WS client
56
+ - Player endpoint accepts a `?token=` query param (Authorization header isn't available when opening a tab)
57
+
58
+ ### Verified
59
+
60
+ End-to-end against a real container with `WEBGATE_RECORD_SESSIONS=true`:
61
+
62
+ - Open SSH, run `echo HELLO_RECORDED` + `uname -n`, disconnect
63
+ - DB row populated: `started_at`, `ended_at`, `duration_s=3.0`, `size_bytes=1142`
64
+ - File on disk: valid asciinema v2 cast, captures welcome banner + commands + responses
65
+ - Open `/api/recordings/{id}/play?token=...` in browser → asciinema-player loads, hit Play → terminal replays the captured commands
66
+
67
+ ---
68
+
3
69
  ## v0.4.0 (2026-04-15)
4
70
 
5
71
  ### Features