sshler 0.7.3__tar.gz → 0.7.4__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 (129) hide show
  1. {sshler-0.7.3/sshler.egg-info → sshler-0.7.4}/PKG-INFO +1 -1
  2. {sshler-0.7.3 → sshler-0.7.4}/pyproject.toml +1 -1
  3. {sshler-0.7.3 → sshler-0.7.4}/sshler/settings.py +2 -2
  4. {sshler-0.7.3 → sshler-0.7.4}/sshler/webapp.py +8 -9
  5. {sshler-0.7.3 → sshler-0.7.4/sshler.egg-info}/PKG-INFO +1 -1
  6. {sshler-0.7.3 → sshler-0.7.4}/LICENSE +0 -0
  7. {sshler-0.7.3 → sshler-0.7.4}/MANIFEST.in +0 -0
  8. {sshler-0.7.3 → sshler-0.7.4}/README.md +0 -0
  9. {sshler-0.7.3 → sshler-0.7.4}/scripts/check_frontend_dist.py +0 -0
  10. {sshler-0.7.3 → sshler-0.7.4}/setup.cfg +0 -0
  11. {sshler-0.7.3 → sshler-0.7.4}/sshler/__init__.py +0 -0
  12. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/__init__.py +0 -0
  13. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/archive.py +0 -0
  14. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/auth.py +0 -0
  15. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/batch.py +0 -0
  16. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/boxes.py +0 -0
  17. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/config.py +0 -0
  18. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/dependencies.py +0 -0
  19. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/files.py +0 -0
  20. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/grep.py +0 -0
  21. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/helpers.py +0 -0
  22. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/models.py +0 -0
  23. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/rate_limiting.py +0 -0
  24. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/recovery.py +0 -0
  25. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/search.py +0 -0
  26. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/sessions.py +0 -0
  27. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/snippets.py +0 -0
  28. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/terminal.py +0 -0
  29. {sshler-0.7.3 → sshler-0.7.4}/sshler/api/tunnels.py +0 -0
  30. {sshler-0.7.3 → sshler-0.7.4}/sshler/auth.py +0 -0
  31. {sshler-0.7.3 → sshler-0.7.4}/sshler/cli.py +0 -0
  32. {sshler-0.7.3 → sshler-0.7.4}/sshler/config.py +0 -0
  33. {sshler-0.7.3 → sshler-0.7.4}/sshler/config_cache.py +0 -0
  34. {sshler-0.7.3 → sshler-0.7.4}/sshler/rate_limit.py +0 -0
  35. {sshler-0.7.3 → sshler-0.7.4}/sshler/scripts/install-sshler-task.ps1 +0 -0
  36. {sshler-0.7.3 → sshler-0.7.4}/sshler/scripts/remove-sshler-task.ps1 +0 -0
  37. {sshler-0.7.3 → sshler-0.7.4}/sshler/scripts/run-sshler.ps1 +0 -0
  38. {sshler-0.7.3 → sshler-0.7.4}/sshler/session.py +0 -0
  39. {sshler-0.7.3 → sshler-0.7.4}/sshler/snapshot.py +0 -0
  40. {sshler-0.7.3 → sshler-0.7.4}/sshler/spa.py +0 -0
  41. {sshler-0.7.3 → sshler-0.7.4}/sshler/ssh.py +0 -0
  42. {sshler-0.7.3 → sshler-0.7.4}/sshler/ssh_config.py +0 -0
  43. {sshler-0.7.3 → sshler-0.7.4}/sshler/ssh_pool.py +0 -0
  44. {sshler-0.7.3 → sshler-0.7.4}/sshler/state.py +0 -0
  45. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/base.js +0 -0
  46. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/command-palette.js +0 -0
  47. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/Alert-C0caXY3O.js +0 -0
  48. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/BoxesView-Cw5NiFP6.css +0 -0
  49. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/BoxesView-DCsH8F6Q.js +0 -0
  50. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/DirectoryPickerModal-CVB_AH0M.css +0 -0
  51. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/DirectoryPickerModal-DlIkiyp1.js +0 -0
  52. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/FilesView-BFEnr1Va.css +0 -0
  53. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/FilesView-jrF0GwSm.js +0 -0
  54. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/Grid-B_OzHEym.js +0 -0
  55. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/InputNumber-XDnEotgL.js +0 -0
  56. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/LoginView-BLrnakeI.css +0 -0
  57. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/LoginView-C2biy_5H.js +0 -0
  58. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/MultiTerminalView-C8x4yNn3.js +0 -0
  59. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/MultiTerminalView-UnOQ5utL.css +0 -0
  60. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/NotFoundView-DYaoqkDb.css +0 -0
  61. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/NotFoundView-D_GMBtkq.js +0 -0
  62. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/OverviewView-BSwVX2Hs.js +0 -0
  63. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/OverviewView-SxVVVBkg.css +0 -0
  64. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/PhCircle.vue-BD-yU_HB.js +0 -0
  65. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/PhHouse.vue-BwwabvLx.js +0 -0
  66. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/PhPlus.vue-ChJ-UG0M.js +0 -0
  67. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/PhPushPinSimple.vue-DBP-0k94.js +0 -0
  68. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/PhTrash.vue-N4dJGebi.js +0 -0
  69. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/SettingsView-DCCByJuu.js +0 -0
  70. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/SettingsView-xrtebMdI.css +0 -0
  71. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/Spin-13rKpfWM.js +0 -0
  72. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/Switch-DsrNJCg_.js +0 -0
  73. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/TerminalView--aIl3nME.js +0 -0
  74. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/TerminalView-DKOHtH_z.css +0 -0
  75. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/favorites-CJMYgFyA.js +0 -0
  76. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/index-BCipBsn9.js +0 -0
  77. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/assets/index-Cwi9_lHU.css +0 -0
  78. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/favicon.png +0 -0
  79. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/fonts/MonaspaceNeon-Bold.woff2 +0 -0
  80. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/fonts/MonaspaceNeon-Regular.woff2 +0 -0
  81. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/fonts/MonaspaceNeon-Variable.woff2 +0 -0
  82. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/icon-192.png +0 -0
  83. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/icon-512-maskable.png +0 -0
  84. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/icon-512.png +0 -0
  85. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/index.html +0 -0
  86. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/logo.png +0 -0
  87. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/dist/manifest.webmanifest +0 -0
  88. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/favicon-terminal-local.svg +0 -0
  89. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/favicon-terminal.svg +0 -0
  90. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/favicon.png +0 -0
  91. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/favicon.svg +0 -0
  92. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/file-browser.js +0 -0
  93. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/file-edit.js +0 -0
  94. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/file-view.js +0 -0
  95. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/logo.png +0 -0
  96. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/manifest.json +0 -0
  97. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/multi-session.js +0 -0
  98. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/style.css +0 -0
  99. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/sw.js +0 -0
  100. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/term.js +0 -0
  101. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/vendor/xterm/xterm-addon-fit.js +0 -0
  102. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/vendor/xterm/xterm-addon-search.js +0 -0
  103. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/vendor/xterm/xterm.css +0 -0
  104. {sshler-0.7.3 → sshler-0.7.4}/sshler/static/vendor/xterm/xterm.js +0 -0
  105. {sshler-0.7.3 → sshler-0.7.4}/sshler/validation.py +0 -0
  106. {sshler-0.7.3 → sshler-0.7.4}/sshler.egg-info/SOURCES.txt +0 -0
  107. {sshler-0.7.3 → sshler-0.7.4}/sshler.egg-info/dependency_links.txt +0 -0
  108. {sshler-0.7.3 → sshler-0.7.4}/sshler.egg-info/entry_points.txt +0 -0
  109. {sshler-0.7.3 → sshler-0.7.4}/sshler.egg-info/requires.txt +0 -0
  110. {sshler-0.7.3 → sshler-0.7.4}/sshler.egg-info/top_level.txt +0 -0
  111. {sshler-0.7.3 → sshler-0.7.4}/tests/test_api_v1.py +0 -0
  112. {sshler-0.7.3 → sshler-0.7.4}/tests/test_archive.py +0 -0
  113. {sshler-0.7.3 → sshler-0.7.4}/tests/test_basic.py +0 -0
  114. {sshler-0.7.3 → sshler-0.7.4}/tests/test_batch_ops.py +0 -0
  115. {sshler-0.7.3 → sshler-0.7.4}/tests/test_command_injection.py +0 -0
  116. {sshler-0.7.3 → sshler-0.7.4}/tests/test_config.py +0 -0
  117. {sshler-0.7.3 → sshler-0.7.4}/tests/test_database_indexes.py +0 -0
  118. {sshler-0.7.3 → sshler-0.7.4}/tests/test_dev_workflow.py +0 -0
  119. {sshler-0.7.3 → sshler-0.7.4}/tests/test_grep.py +0 -0
  120. {sshler-0.7.3 → sshler-0.7.4}/tests/test_handshake_status.py +0 -0
  121. {sshler-0.7.3 → sshler-0.7.4}/tests/test_httpx_ws.py +0 -0
  122. {sshler-0.7.3 → sshler-0.7.4}/tests/test_path_validation.py +0 -0
  123. {sshler-0.7.3 → sshler-0.7.4}/tests/test_rate_limit.py +0 -0
  124. {sshler-0.7.3 → sshler-0.7.4}/tests/test_search.py +0 -0
  125. {sshler-0.7.3 → sshler-0.7.4}/tests/test_session_auth.py +0 -0
  126. {sshler-0.7.3 → sshler-0.7.4}/tests/test_snippets.py +0 -0
  127. {sshler-0.7.3 → sshler-0.7.4}/tests/test_ssh.py +0 -0
  128. {sshler-0.7.3 → sshler-0.7.4}/tests/test_tunnels.py +0 -0
  129. {sshler-0.7.3 → sshler-0.7.4}/tests/test_websocket.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sshler
3
- Version: 0.7.3
3
+ Version: 0.7.4
4
4
  Summary: A local FastAPI-powered SSH multiplexer for tmux-in-browser — from your laptop only.
5
5
  Author-email: Gabu <gabu@gabu.quest>
6
6
  License-Expression: MIT
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "sshler"
8
- version = "0.7.3"
8
+ version = "0.7.4"
9
9
  description = "A local FastAPI-powered SSH multiplexer for tmux-in-browser — from your laptop only."
10
10
  readme = "README.md"
11
11
  requires-python = ">=3.12"
@@ -27,8 +27,8 @@ class SshlerSettings(BaseSettings):
27
27
  host: str = Field(default="127.0.0.1", description="Host to bind to")
28
28
  port: int = Field(default=8822, description="Port to bind to")
29
29
  public_url: str = Field(
30
- default="http://localhost:8822",
31
- description="Public URL where sshler is accessible (used for CORS/origin checks)",
30
+ default="",
31
+ description="Public URL where sshler is accessible (used for CORS/origin checks). Auto-derived from host:port if empty.",
32
32
  )
33
33
 
34
34
  # Session/Cookie settings
@@ -756,18 +756,17 @@ def make_app(settings: ServerSettings | None = None) -> FastAPI:
756
756
  parsed_origin = urlparse(origin)
757
757
  origin_base = f"{parsed_origin.scheme}://{parsed_origin.netloc}"
758
758
 
759
- # Parse expected origin from public_url
760
- parsed_public = urlparse(app_settings.public_url)
761
- expected_origin = f"{parsed_public.scheme}://{parsed_public.netloc}"
762
-
763
759
  # Check if origin matches public_url or is in allowed_origins
764
760
  # Include both env-based origins (SshlerSettings) and CLI-based origins (ServerSettings)
765
761
  cli_settings: ServerSettings = request.app.state.settings
766
- allowed_origins = (
767
- [expected_origin]
768
- + app_settings.allowed_origins_list
769
- + cli_settings.allow_origins
770
- )
762
+ allowed_origins = list(cli_settings.allow_origins) + app_settings.allowed_origins_list
763
+
764
+ # Add public_url-derived origin if set
765
+ if app_settings.public_url:
766
+ parsed_public = urlparse(app_settings.public_url)
767
+ expected_origin = f"{parsed_public.scheme}://{parsed_public.netloc}"
768
+ if expected_origin not in allowed_origins:
769
+ allowed_origins.append(expected_origin)
771
770
 
772
771
  if origin_base not in allowed_origins:
773
772
  logging.warning(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sshler
3
- Version: 0.7.3
3
+ Version: 0.7.4
4
4
  Summary: A local FastAPI-powered SSH multiplexer for tmux-in-browser — from your laptop only.
5
5
  Author-email: Gabu <gabu@gabu.quest>
6
6
  License-Expression: MIT
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes