Skip to content

Release#2052

Merged
sk-keeper merged 26 commits into
masterfrom
release
May 14, 2026
Merged

Release#2052
sk-keeper merged 26 commits into
masterfrom
release

Conversation

@sk-keeper
Copy link
Copy Markdown
Collaborator

No description provided.

sk-keeper and others added 26 commits May 1, 2026 14:33
* Adds optional workflow to PAM project import / extend

* Register missing enterprise enforcements in constants.py

* Fix workflow time-of-day decoding (HHMM, not minutes-from-midnight)

* Remove pre-GA dev/qa-only gate from PAM Workflow commands
…ation

UserCheck, MachineCheck, and ApplicationCheck already default to ['*']
when not provided, so forcing users to explicitly pass --user-filter,
--machine-filter, and --app-filter was unnecessary.

Co-authored-by: Cursor <cursoragent@cursor.com>
Date, Time, and Day filters were being saved as ['*'] when not specified,
inconsistent with Admin Console behaviour. These fields now default to []
to match the UI. UserCheck, MachineCheck, and ApplicationCheck remain ['*'].

Co-authored-by: Cursor <cursoragent@cursor.com>
* Hard-close PAM session tubes on workflow lease expiry

When the workflow lease expires for `pam tunnel start` or `pam launch`,
soft-close the tube now and escalate to keeper_pam_webrtc_rs's new
force_close_tube after 3s. Force-close drops the local TCP listener and
severs in-flight forwarded TCP streams (SSH, MySQL, etc.), which the
prior soft-close did not — an active session would linger past expiry
until the user disconnected manually.

Escalation is gated on both endpoints supporting force_close_tube:
hasattr(tube_registry, "force_close_tube") on the local crate AND
remote SDP-advertised version >= FORCE_CLOSE_MIN_VERSION ("2.1.18").
Older peers fall back to soft close only.

- tunnel_helpers: add escalate_close() shared helper plus
  FORCE_CLOSE_MIN_VERSION / FORCE_CLOSE_DELAY_SECONDS constants;
  consolidate _version_at_least here as the single source of truth
  (terminal_connection.py re-exports for back-compat with launch.py)
- tunnel_and_connections: replace the previously-commented-out soft
  close in `pam tunnel start`'s lease-expiry callback with escalate_close
- pam_launch/launch: wire escalate_close into `pam launch`'s
  _on_lease_expired (was only setting flags before, no tube close)

* Escalate-close when launch lease already expired at start

* Suppress runaway TURN refresh-permission log leak; harden rust-log filter for concurrent sessions

* Redraw keeper-shell prompt after async lease-expiry message
Adds a one-key path from the SuperShell TUI to a KeeperPAM connection
for pamMachine and pamDatabase records.

* `is_launchable(params, record_uid)` and `get_launch_info(...)` exposed
  as module-level helpers in `pam_launch/launch.py` so the TUI and CLI
  share the same eligibility/protocol logic without duplicating it.
* SuperShell `L` keybinding suspends the Textual app, runs
  `PAMLaunchCommand` in the released terminal, and resumes the TUI when
  the session ends. `CommandError` failures show a clean message; other
  exceptions still log a traceback. Both pause for Enter so the user
  sees the message before the TUI redraws.
* Detail view for pamMachine/pamDatabase strips the noisy
  `pamHostname`, `pamSettings`, `trafficEncryptionSeed`, and
  `checkbox:*` fields (multi-line dict continuations included via brace
  counting). JSON view is unchanged.
* New "Launch" section rendered after the Title shows protocol, host,
  credential, and a visual "Press L to Launch <PROTOCOL>" button.
  `(prompted at launch)` placeholders cover `allowSupplyHost` /
  `allowSupplyUser` records that have no static value.
* `pam launch` now prompts for `host:port` instead of erroring when
  `allowSupplyHost: True`, no `--host` is given, and the record has no
  static hostname. Up to 3 retries on bad input with the expected
  format shown in the prompt; non-TTY behavior preserved.
* Help modal lists the new `L` action.
When `keeper login` runs from the system shell (batch mode), the hint
to change the data center previously suggested `login --server <region>`
which dispatches to macOS/Linux `login(1)` instead of Commander.

The hint now reads `keeper login --server <region>` in batch mode and
keeps `login --server <region>` for the interactive Keeper shell.
Co-authored-by: Craig Lurey <craiglurey@gmail.com>
…nose; fix log noise (#2020)

tunnel_and_connections.py:
  - Add --turn-test flag: establishes a real WebRTC/TURN connection through
    the gateway without proxying traffic, reproducing the full ICE path
  - Add --stun-only flag: same probe with TURN credentials stripped on both
    sides, restricting ICE to host/srflx candidates; confirms the reflexive
    path works independently of the relay. Mutually exclusive with --turn-test
  - Add --probe-duration (default 30s) to hold the connection open; use
    360+ to trigger and verify survival of the ~300s permission refresh cycle
  - Add --probe-count for concurrent connection load testing
  - Add --stress-test: connection cycling, throughput across 64B–256KB frame
    sizes, and concurrent load; implies --turn-test
  - Add --test-dns/--test-aws/--test-tcp/--test-udp/--test-ice/--test-webrtc
    flags as per-test alternatives to the comma-separated --test string;
    both styles can be combined and are merged into a single validated set
  - Add _yellow() color helper for diagnostic output
  - Section header, connect label, hold message, throughput, and stability
    labels all adapt to STUN vs TURN mode

  tunnel_helpers.py:
  - Add probe_stun_only param to start_rust_tunnel: strips turn_url,
    turn_username, turn_password from webrtc_settings so Commander's ICE
    agent gathers no relay candidates; sends stun_only=True to gateway
  - Add turn.client.relay_conn to webrtc crate suppression lists so the
    periodic "fail to refresh permissions" error no longer leaks to terminal
  - Add NullHandler to all loggers configured with propagate=False; without
    a handler Python's lastResort StreamHandler fires when callHandlers()
    finds found=0, bypassing propagate=False
…d-rndir inherit flags (#2031)

* KC-1242: Fix KeeperDrive role labels, kd-shortcut titles and remove kd-rndir inherit flags (#2030)

* remove summary.md
* Implement workflow recent changes after apr 22

* Remove flow uid support in state

* Remove column from my-access and fix mfa prompts

* Fix flow uids starting with - and my-access table view

* Add record type validation for workflows

* Add better error handling

* Update for review comments and tzlocal library for windows
* Implement Enforcement of Record Password and Types policies

* Improve password complexity and record type enforcement validation

* Add --effective flag in rti for list of allowed records.
* rename "shared-manager" role label to "share-manager" (#2040)

* claude review changes

* added share-manager mapping
* Updated master password grading to use zxcvbn

* Added zxcvbn to install_requires

* Added zxcvbn-based master password strength grading alongside BreachWatch score.

* Addressed PR review comments on master_password_score
These commands(aws-secrets-import, azure-secrets-import, gcp-secrets-import) allow users to perform a one-time import of their secrets from AWS, Azure, or Google Cloud into Keeper. The secret values are parsed into key/value pairs and result in records with corresponding field names and field values. 

This is to allow customers to be able perform a one-time import and then use Universal Secrets Sync to let Keeper be the source of truth for these secrets going forward.
Change List:
   - Make rotation: block optional in credential-provision YAML
   - Add rotation.on_demand flag for manual-trigger rotation mode
   - Add rotation.rotate_on_provision flag to defer immediate rotation
   - Add account.existing_password for bring-your-own-password onboarding
   - Validator INVARIANT-001 rejects push-to-target combinations
   - Skip _create_ad_user_via_gateway when existing_password is set
   - Defer AD group-add to after PAM user creation + rotation
   - Fix NameError in cp --output json --dry-run (absorbs 97dc8893)
   - Update inline help text; rewrite _dry_run_report
* Implement SSO Cloud Command

* Fix cloud create bug

* Add different steps for different IDPs

* Add guide command and fix download upload azure idp issues

* Refactor sso cloud code

* Fix for review comments

* Update copyright mark with correct mail ID

* Update logo in init file

* Fix review comments

* Fix review comment

* Update minor ui fixes

* fix json issue
When starting tunnels from Windows, Keeper reuses the same port (49152). This is because of SO_REUSEADDR and Windows behavior, and is resolved when disabling it.
Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Code review skipped — your organization has reached its monthly code review spending cap.

An organization admin can view or raise the cap at claude.ai/admin-settings/claude-code. The cap resets at the start of the next billing period.

Once the cap resets or is raised, push a new commit or reopen this pull request to trigger a review.

@socket-security
Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedtzlocal@​5.3.199100100100100
Addedzxcvbn@​4.5.0100100100100100

View full report

Comment thread keepercommander/commands/_cloud_import_base.py Dismissed
Comment thread keepercommander/commands/_cloud_import_base.py Dismissed
Comment thread keepercommander/commands/_cloud_import_base.py Dismissed
Comment thread keepercommander/commands/_cloud_import_base.py Dismissed
Comment thread keepercommander/commands/_cloud_import_base.py Dismissed
Comment thread keepercommander/commands/pam_import/keeper_ai_settings.py Dismissed
Comment thread keepercommander/commands/pam_import/keeper_ai_settings.py Dismissed
Comment thread keepercommander/commands/tunnel_and_connections.py Dismissed
Comment thread keepercommander/commands/workflow/helpers.py Dismissed
Comment thread unit-tests/service/test_command.py Dismissed
@sk-keeper sk-keeper merged commit 5c93874 into master May 14, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.