642 Commits

Author SHA1 Message Date
Steven Clark
95a16dbafe
PKI: Add a new leaf_not_after_behavior value to force erroring in all circumstances (#28907)
* PKI: Add a new leaf_not_after_behavior value to force erroring in all circumstances

 - We introduce a new value called `always_enforce_err` for the existing
   leaf_not_after_behavior on a PKI issuer. The new value will force we
   error out all requests that have a TTL beyond the issuer's NotAfter value.

 - This will apply to leaf certificates issued through the API as did err,
   but now to CA issuance and ACME requests for which we previously changed
   the err configuration to truncate.

* Add cl

* Update UI test

* Fix changelog type
2024-11-15 11:59:54 -05:00
Angel Garbarino
c7ca295816
Solve cntrl+f issue on KVv2 JSON details and edit views (#28808)
* initial changes need to add test coverage

* change icon

* replace original idea with hds::codeblock on kvv2 details view

* changelog

* fixing edit view by addressing viewportMargin

* fix failing test

* missedone

* Update 28808.txt

* Update json-editor.js

* test coverage

* update codeblock selector

* Update general-selectors.ts

* Update kv-data-fields.js

* Update ui/lib/core/addon/components/json-editor.js

Co-authored-by: claire bontempo <68122737+hellobontempo@users.noreply.github.com>

* Update ui/lib/kv/addon/components/kv-data-fields.js

Co-authored-by: claire bontempo <68122737+hellobontempo@users.noreply.github.com>

* update test name

* add default to modifier

---------

Co-authored-by: claire bontempo <68122737+hellobontempo@users.noreply.github.com>
2024-11-08 18:23:01 +00:00
claire bontempo
30d4e21e88
UI: LDAP Hierarchical roles (#28824)
* remove named path adapter extension, add subdirectory query logic to adapter

* add subdirectory route and logic to page::roles component

* fix overview page search select

* breadcrumbs

* update tests and mirage

* revert ss changes

* oops

* cleanup adapter, add _ for private methods

* add acceptance test

* remove type

* add changelog

* add ldap breadcrumb test

* VAULT-31905 link jira

* update breadcrumbs in Edit route

* rename type interfaces
2024-11-06 00:52:29 +00:00
claire bontempo
17d29f983c
UI: Upgrade Ember data 5.3.2 (and upgrade minor versions of ember-source and ember-cli) (#28798)
* upgrade ember-data 5.3.2, uninstall legacy compat, upgrade ember-cli, ember-source

* use query instead of findAll for auth methods, update tests

* set mutableId for kmip

* show generated private key data before transitioning to details

* update kv metadata test

* remove deprecated methods from path help service

* add changelog, update readme version matrix

* remove toggle template helper
2024-10-30 09:10:22 -07:00
claire bontempo
9d354199ac
remove copy about wiping storage (#28800) 2024-10-29 16:34:24 -06:00
claire bontempo
1fbbf9d76b
UI: Ember-data upgrade 5.3.2 prep: use custom service instead of extending ember-data store (#28695)
* rename store to pagination, remove store extension

* initial update of service test

* remove superfluous helper

* replace store with pagination service in main app

* update kmip engine syntax

* add pagination to kmip engine

* update to pagination in config-ui engine

* update sync engine to use pagination service

* use pagination service in kv engine

* use pagination service in ldap engine

* use pagination in pki engine

* update renaming clearDataset functions

* link to jira VAULT-31721

* remove comment
2024-10-17 10:00:57 -07:00
Angel Garbarino
f2041b00e5
Remove decodeURIComponent method for KVv2 secret path on list view (#28698)
* remove encoding for KVv2

* test coverage

* changelog

* validations

* Revert "validations"

This reverts commit d6fd291d856a2005ed8f3a1a4f0f42add4ecb272.

* update subtext for secret path

* Update list.js

* Update secret-edit.js

* test coverage for data-octets

* Update list-directory.js

* fix modelForm test

* amend subText

* test selector things
2024-10-16 23:06:52 +00:00
claire bontempo
217380cf87
UI: Ember data upgrade prep: cleanup store and lazyPaginatedQuery (#28690)
* revert hacks necessary for ember-data 4.11

* remove stubbed unloadAll and unloadRecord methods

* remove clearAllDatasets and just use clearDataset()
2024-10-11 14:18:56 -07:00
claire bontempo
902d853f7a
UI: Add copy button for secret path (#28629)
* add copy button to secret headers

* add changelog

* add test
2024-10-08 14:06:39 -07:00
claire bontempo
7774261c15
UI: Ember upgrade: Handle deprecation router service from host (#28603)
* use alias for router injection

* update @router declarations in engine files

* fix remaining pki router imports

* dynamically set router based on owner

* address replication routers

* update markdown docs

* use non-deprecated import for getOwner

* revert out of scope changes

* add transition-to test
2024-10-08 09:01:46 -07:00
claire bontempo
05f32b69ee
UI: upgrade HDS to 4.12.0 (#28525)
* update hds to latest version

* yield dropdown Interactive text instead of use @text arg, results after running codemod

* remaining dropdown changes

* address sidebar nav IconButton deprecation, fix secret tests

* revert

* explicitly select popupmenu

* more test changes

* fix pki toggle button

* remove tracked prop in oidc client controller

* aaand more test updates

* change to tilde

* tilde yarn lock changes

* small cleanup items
2024-10-04 20:07:48 +00:00
claire bontempo
71422d4cdd
UI: Fix oidc auth method missing default_role field (#28539)
* add auth-config/oidc to openapi model helper

* alphabetize

* update maskedinput selector to be standard data-test-input

* add test

* add changelog

* fix maskedinput test and kv selector

* final textarea selector!
2024-10-01 09:21:16 -07:00
Steven Clark
2db2a9fb5d
PKI: Track last time auto tidy was run across restarts (#28488)
* Track the last PKI auto-tidy time ran for use across nodes

 - If the interval time for auto-tidy is longer then say a regularly
   scheduled restart of Vault, auto-tidy is never run. This is due to
   the time of the last run of tidy is only kept in memory and
   initialized on startup to the current time
 - Store the last run of any tidy, to maintain previous behavior, to
   a cluster local file, which is read in/initialized upon a mount
   initialization.

* Add auto-tidy configuration fields for backing off at startup

* Add new auto-tidy fields to UI

* Update api docs for auto-tidy

* Add cl

* Update field description text

* Apply Claire's suggestions from code review

Co-authored-by: claire bontempo <68122737+hellobontempo@users.noreply.github.com>

* Implementing PR feedback from the UI team

* remove explicit defaults and types so we retrieve from backend, decouple enabling auto tidy from duration, move params to auto settings section

---------

Co-authored-by: claire bontempo <68122737+hellobontempo@users.noreply.github.com>
Co-authored-by: claire bontempo <cbontempo@hashicorp.com>
2024-09-26 09:47:11 -04:00
Chelsea Shaw
74c4e0bd86
UI: Update model docs (#28495)
* rename validators util into model-helpers folder

* move kmip-role-fields to model-helpers

* fill out docs

* Move database-helpers into model-helpers

* broom
2024-09-24 14:07:06 -07:00
Chelsea Shaw
520f141608
UI: refactor KMIP role model (#28418)
* update kmip/role model and adapter

* New KMIP role form component

* cleanup on kmip role adapter/model

* fix role details view

* update tests to check for kmip role form and details validity

* cleanup

* Add kmip-role-fields test

* add headers, remove old component

* Address PR comments
2024-09-20 18:52:59 +00:00
Chelsea Shaw
2ce68778e4
UI: Fix LDAP Mirage Handler (#28432)
* update ldap mirage scenario to allow check-in/check-out action

* update libraries test to mount engine

* update mirage, fix tests

* update lease renew CLI command

* fix test

* update tests
2024-09-20 13:44:29 -05:00
Chelsea Shaw
1c16994bc3
UI: stabilize replication tests (#28384)
* Add specificity to replication title selectors

* Use specific selectors for replication titles in tests
2024-09-12 14:50:37 -05:00
claire bontempo
49b46ead82
UI: Fix enabling replication capabilities bug (#28371)
* add capabilities service to replication engine

* fix capabilities paths in route file

* pass updated capabilities using getters

* add changelog

* fix logic so default is based on undefined capabilities (not no mode)
2024-09-12 08:51:11 -05:00
Chelsea Shaw
e1c56a300f
UI: reorg replication (#28332)
* Add replication-overview-mode component + tests

* Move both primary view higher to template

* simplify replication-summary component

* remove replication-mode-summary

* Add jsdocs to replication-overview-mode

* fix overview-mode test

* fix page/mode-index test

* copyright

* address PR comments

* note to devs
2024-09-11 09:19:33 -05:00
Chelsea Shaw
855743fef0
UI: Fix sanitization and add tests (#28347) 2024-09-11 08:29:19 -05:00
Chelsea Shaw
6c270af47b
UI Remove obscured json (#28261) 2024-09-06 18:13:59 +00:00
claire bontempo
73fbdb4565
UI: Hide patch for deleted or destroyed secrets (#28301)
* hide patch action for deleted or destroyed versions

* update jsdoc

* add conditional chaining for CE versions that dont have subkeys

* stub version for CE tests

* add comments

* Update ui/lib/kv/addon/routes/secret.js
2024-09-05 15:52:38 -07:00
claire bontempo
de87c7f3c0
add isPatchAllowed to jsdoc (#28260) 2024-09-03 14:48:36 -05:00
claire bontempo
3a9db72792
UI: improve control group UX (#28232)
* wip control group fix?

* dont rely on models for capabilities;

* Revert "wip control group fix?"

This reverts commit cf3e896ba05d2fdfe1f6287bba5c862df4e5d553.

* make explicit request for data

* remove dangerous triple curlies

* cleanup template logic and reuse each-in

* remove capability checks from model

* update tests to reflect new behavior

* add test coverage

* fix mirage factory, update details tests

* test control groups VAULT-29471

* finish patch test

* alphabetize!

* does await help?

* fix factory

* add conditionals for control group error
2024-09-03 10:49:41 -07:00
claire bontempo
f634808ed4
UI: Implement KV patch+subkey [enterprise] (#28212)
* UI: Implement overview page for KV v2 (#28162)

* build json editor patch form

* finish patch component and tests

* add tab to each route

* and path route

* add overview tab to tests

* update overview to use updated_time instead of created_time

* redirect relevant secret.details to secret.index

* compute secretState in component instead of pass as arg

* add capabilities service

* add error handling to fetchSubkeys adapter request

* add overview tabs to test

* add subtext to overview card

* remaining redirects in secret edit

* remove create new version from popup menu

* fix breadcrumbs for overview

* separate adding capabilities service

* add service to kv engine

* Revert "separate adding capabilities service"

This reverts commit bb70b12ab7dbcde0fbd2d4d81768e5c8b1c420cc.

* Revert "add service to kv engine"

This reverts commit bfa880535ef7d529d7610936b2c1aae55673d23f.

* update navigation test

* consistently navigate to secret.index route to be explicit

* finish overview navigation tests

* add copyright header

* update delete tests

* fix nav testrs

* cleanup secret edit redirects

* remove redundant async/awaits

* fix create test

* edge case tests

* secret acceptance tests

* final component tests

* rename kvSecretDetails external route to kvSecretOverview

* add comment

* UI: Add patch route and implement Page::Secret::Patch page component (sidebranch) (#28192)

* add tab to each route

* and path route

* add overview tab to tests

* update overview to use updated_time instead of created_time

* redirect relevant secret.details to secret.index

* compute secretState in component instead of pass as arg

* add capabilities service

* add error handling to fetchSubkeys adapter request

* add patch route and put in page component

* add patch secret action to subkeys card

* fix component name

* add patch capability

* alphabetize computed capabilities

* update links, cleanup selectors

* fix more merge conflict stuff

* add capabilities test

* add models to patch link

* add test for patch route

* rename external route

* add error templates

* make notes about enterprise tests, filter one

* remove errors, transition (redirect) instead

* redirect patch routes

* UI: Move fetching secret data to child route (#28198)

* remove @secret from metadata details

* use metadata model instead of secret in paths page

* put delete back into kv/data adapter

* grant access in control group test

* update metadata route and permissions

* remove secret from parent route, only fetch in details route

* change more permissions to route perms, add tests

* revert overview redirect from list view

* wrap model in conditional for perms

* remove redundant canReadCustomMetadata check

* rename adapter method

* handle overview 404

* remove comment

* add customMetadata as an arg

* update grantAccess in test

* make version param easier to follow

* VAULT-30494 handle 404 jira

* refactor capabilities to return an object

* update create tests

* add test for default truthy capabilities

* remove destroy-all-versions from kv/data adapter

* UI: Add enterprise checks (#28215)

* add enterprise check for subkey card

* add max height and scroll to subkey card

* only fetch subkeys if enterprise

* remove check in overview

* add test

* Update ui/tests/integration/components/kv/page/kv-page-overview-test.js

* fix test failures (#28222)

* add assertion

* add optional chaining

* create/delete versioned secret in each module

* wait for transition

* add another waitUntil

* UI: Add patch latest version to toolbar (#28223)

* add patch latest version action to toolbar

* make isPatchAllowed arg all encompassing

* no longer need model check

* use hash so both promises fire at the same time

* add subkeys to policy

* Update ui/lib/kv/addon/routes/secret.js

* add changelog

* small cleanup items! (#28229)

* add conditional for enterprise checking tabs

* cleanup fetchMultiplePaths method

* add test

* remove todo comment, ticket created and design wants to hold off

* keep transition, update comments

* cleanup tests, add index to breadcrumbs

* add some test coverage

* toggle so value is readable
2024-08-29 16:38:39 -07:00
Angel Garbarino
3abca46464
WIF sidebranch (#28148)
* manual cherry pick to deal with all the merge things

* changelog

* test fixes

* Update 28148.txt

* fix tests failures after main merge

* fix test failures after main merge

* Add Access Type and conditionally render WIF fields (#28149)

* initial work.

* remove access_type

* better no model logic well kind of

* rollback attrs

* remove defaults

* stopping point

* wip changing back to sidebranch

* hustling shuffling and serializing

* some of the component test coverage

* disable acces type if editing

* test coverage

* hide max retries that sneaky bugger

* cleanup

* cleanup

* Update root-config.js

* remove flash message check, locally passes great but on ci flaky

* clean up

* thank you chelsea

* test clean up per enterprise vs community

* address pr comments

* welp a miss add

* UI (sidebranch) WIF Issuer field (#28187)

* Add type declaration files for aws config models

* use updated task syntax for save method on configure-aws

* fix types on edit route

* fetch issuer on configure edit page if aws + enterprise

* track issuer within configure-aws component

* add placeholder support on form-field

* Add warning if issuer changed from previous value or could not be read

* cleanup

* preliminary tests

* dont use while loop so we can test the modal

* tests

* cleanup

* fix tests

* remove extra tracked value and duplicate changed attrs check

* modal footer

---------

Co-authored-by: Angel Garbarino <argarbarino@gmail.com>

* Display issuer on Configuration details (#28209)

* display issuer on configuration details

* workflow complete, now on to testing

* handle issuer things

* fix all the broken tests things

* add test coveragE:

* cleanup

* rename model/adapter

* Update configure-aws.ts

* Update aws-configuration-test.js

* 90 percent there for pr comments

* last one for tonight

* a few more because why not

* hasDirtyAttributes fixes

* revert back to previous noRead->queryIssuerError

---------

Co-authored-by: Chelsea Shaw <82459713+hashishaw@users.noreply.github.com>
2024-08-29 12:17:51 -06:00
claire bontempo
09c92b89cc
UI: Add capabilities service (#28168)
* add capabilities service

* remove from kv engine for now

* add canRead

* move await helper to addon

* add test

* update capabilities service to accommodate multiple paths

* address comments, make methods more explicit

* remove namespace key

* fix typo in test

* add namespace back!

* round out tests for other methods

* add test

* add comment
2024-08-23 16:17:19 -07:00
claire bontempo
581c999f56
UI: Build kv v2 patch page (#28114)
* build patch component

* pass submit error to child component

* add copyright header

* aphabetize

* rename kv-patch components

* build json editor patch form

* finish patch component and tests

* use baseSetup in other kv tests

* small styling changes

* remove linting conditional, set json editor value on change

* rename subkeys card

* add reveal component to both patch forms

* implement subkeys card

* add copyright header, add transition assertions

* assert flash spy

* add assertion for empty values

* separate tests into it does not submit module

* update flash copy
2024-08-22 12:47:59 -07:00
Chelsea Shaw
7257da888c
UI - Update Client Count filtering (#28036) 2024-08-22 10:01:16 -05:00
Angel Garbarino
dbc542efd7
AWS refactor, move to one form (#28125)
* initial changes with no test coverage

* test coverage and fixes

* additional edit config test coverage

* clean up

* clean up

* Address pr feedback

* welp missed an await

* missed

* take back

* Update configure-ssh-test.js
2024-08-21 14:25:18 -06:00
claire bontempo
30da9aef46
UI: Build KV v2 overview page (#28106)
* move date-from-now helper to addon

* make overview cards consistent across engines

* make kv-paths-card component

* remove overview margin all together

* small styling changes for paths card

* small selector additions

* add overview card test

* add overview page and test

* add default timestamp format

* cleanup paths test

* fix dateFromNow import

* fix selectors, cleanup pki selectors

* and more selector cleanup

* make deactivated state single arg

* fix template and remove @isDeleted and @isDestroyed

* add test and hide badge unless deactivated

* address failings from changing selectors

* oops, not ready to show overview tab just yet!

* add deletionTime to currentSecret metadata getter
2024-08-16 14:40:23 -07:00
claire bontempo
08a999f0fa
UI: Fix toast message text when deleting a kv v2 secret (#28093)
* VAULT-29995 fix flash grabbing status from state

* add test

* add changelog

* add test for destroyed copy
2024-08-15 10:49:43 -07:00
claire bontempo
eaf47c4c00
UI: Build kv-patch-editor form (#28060)
* build kv-patch-editor component

* add tests

* use validator helpers in kv-object-editor

* update class name in version-history

* remove is- from css class

* move whitespace warning and non-string values warning messages to validators util

* break editor component into smaller ones

* fix typo

* add docs

* rename files and move to directory, add tests for new templates

* fix some bugs and add tests!

* fix validation bug and update tests

* capitalize item in helper

* remove comment

* and one more comment change
2024-08-14 11:52:33 -07:00
Angel Garbarino
09cc71d6dc
SSH configuration test coverage (#28021)
* initial changes

* test selector and duplicate tests clean up

* check for flashDanger

* rename to make it easier to parse

* clean up selector names

* clean up

* add component test coverage

* remove true
2024-08-08 20:44:12 -06:00
Chelsea Shaw
da7fad68b8
UI: Replace getNewModel with hydrateModel when model exists (#27978)
* Replace getNewModel with hydrateModel when model exists

* Update getNewModel to only handle nonexistant model types

* Update test

* clarify test

* Fix auth-config models which need hydration not generation

* rename file to match service name

* cleanup + tests

* Add comment about helpUrl method
2024-08-07 16:07:25 +00:00
Chelsea Shaw
ec5dfceaa2
update imports of getOwner to be from @ember/owner (#27953) 2024-08-02 10:58:15 -05:00
Chelsea Shaw
10068ffb0a
UI: Use Client Count export API (#27455) 2024-08-01 11:03:31 -05:00
Chelsea Shaw
266ea693cc
UI: remove initial date from client counts (#27816) 2024-07-31 17:35:11 +00:00
Chelsea Shaw
111647f851
UI: Remove deprecated Client Count keys (#27916)
* remove destructureClientCounts

* Update type and mirage generator

* remove deprecated keys from hardcoded response samples

* Add back destructureClientCounts with updated description
2024-07-30 13:04:20 -05:00
Angel Garbarino
1f982bf13a
Restructure SSH and AWS configuration screens (#27831)
* setup the toggle to display mount configuration options

* whew.. getting there. aws only, borked for ssh

* another round, better than before

* masked things

* changelog

* fix broken oss test

* move to component

* handle ssh things and cleanup

* wip test coverage

* test coverage for the component

* copywrite header miss

* update no model error

* setup configuration aws acceptance tests

* update CONFIURABLE_SECRET_ENGINES

* acceptance tests for aws

* ssh configuration

* clean up

* remove comment

* move to confirm model before destructuring

* pr comments

* fix check for ssh config error

* add message check in api error test

* pr comments
2024-07-29 19:52:42 -06:00
claire bontempo
fe18e6ca87
UI: add subkey request to kv v2 adapter (#27804)
* add subkey request to ui

* WIP kv subkey display

* revert subkey changes to see view in ui

* finish subkey component

* remove reamining user facing changes

* update jsdoc

* add subtext depending on toggle

* finish tests

* organize adapter tests into modules

* add adapter tests

* woops, make beforeEach

* encode paths and add wrap secret test

* reword subkey component

* extract subkey path logic into util

* extract subkey path logic into util

* rename yielded subtext block
2024-07-29 13:12:40 -07:00
Angel Garbarino
5787fa20f6
Prep for SSH and AWS configuration changes (#27869)
* move non user facing changes to another pr

* remove non-relevant test coverage

* address pr fixes

* Update mountable-secret-engines.js

* Update secrets-engine-mount-config.ts

* clean up

* put back console because of tests and use debug instead

* missed one

* blah fix
2024-07-26 10:47:33 -06:00
Angel Garbarino
d5e836b143
Title case all static breadcrumbs (#27808)
* title case all static breadcrumb labels

* test fixes

* add missing model
2024-07-19 11:57:53 -06:00
claire bontempo
e88b6b117e
UI: update overview card action handling (#27785)
* yield all overview card actions

* yield remaining overview card content to the correct block

* close overview card in test

* fix typo

* fix route typo, add selectors where needed

* fix class typo add one more selector
2024-07-16 12:40:35 -07:00
Angel Garbarino
297f8cb3c3
KVv2 json cursor jumps on "enter" (#27569)
* it works...but does it break everything else?

* Update code-mirror.js

* Update code-mirror.js

* return to original

* changelog

* different approach to move onto parse at create and edit. it breaks things, hopefully fixed in next commits

* use onBlur event on codemirrror

* maybe? lets run the tests and find out

* update comments

* wip for conditional to only compare on kvv2

* remove onblur leftovers

* missed two

* clean up

* test coverage

* try catch logical operator instead

* stringify helper and not native json stringify to maintain object shape

* remove comment

* Update json-editor.js

return brackets do not want issues with backports

* Update json-editor.js

* Update json-editor.js

* Test fix

* maybe

* more specific cursor test

* json-editor test cleanup

* Delete ui/testrun1.txt

* Delete ui/testrun2.txt

* remove non json test it doesn't test anything

* update test and comment for how it's testing non-json content

* test fix

* put shape of json blob back:

* send in original without parsing or stringify

* welp friday things
2024-07-10 09:16:21 -06:00
Angel Garbarino
84aeec0513
Create sections for Secrets sync destination fields for create/edit view (#27538)
* initial shuffling of credentials and advanced configuration options

* update all destination models

* wip changelog

* Update 27538.txt

* remove custom_tags from gh

* missed vercel and remove custom_tags from base

* refactor conditional logic on templace

* things

* test coverage and dynamic subText

* add assert to not see enableInput on create

* clean up

* remove extra parens

* test clean up to clarify what the header subtext vs breadcrumb transition are testing
2024-06-27 12:46:24 -06:00
Angel Garbarino
66e78db425
Mask obfuscated Secret sync create/edit fields (#27348)
* wip not working on edit view

* changelog

* vercel and fix tests

* need conditional to not break all the things:

* create test coverage and add for other obfustcaed fonts, still missing one.

* Update 27348.txt

* remove meep

* comment

* test coverage
2024-06-18 14:20:22 -06:00
Chelsea Shaw
299cd3d1f7
UI: Refactor replication tests (#27519)
* create page component for mode/index

* add test selector to replication summary

* use new component on replication/mode/index route

* Update flaky test

* copyright headers
2024-06-17 12:08:04 -05:00
Angel Garbarino
927da859f7
UI Hide Secrets Sync from nav if not on license and/or no policy permissions (#27262)
* intial changes, haven't tested client counts or done test coverage

* client count rename getter to clairfy

* fix has-permission api-paths

* wip

* wip

* fix: explicitly refresh vault.cluster model to re-fetch activatedFeatures after actication

* tests: fix # of assertions for verifying that activation was called

* tests: tidy overview-test

* add additional api permission path and move fetch back to application

* add test coverage for the service

* cleanup

* remove test that checked for upsell without license or on community

* small comment change

* welp missed component getter

* flaky test fix

* flaky test

* small nit changes from pr reviews

* add defaults to sync mirage handler

* Gate sync overview route for users without access (#27320)

* routes: add redirect if user does not have access to sync

* tests: verify redirect on sync overview page happens

* tests: organize tests modules to ensure enterprise is explicitly set up

* add type enterprise required now because we do a check for this first

* fix oss test

---------

Co-authored-by: Noelle Daley <noelledaley@users.noreply.github.com>
2024-06-11 08:20:01 -06:00
Chelsea Shaw
61a3885eb6
UI: Fix client counts bug when no new clients (#27352) 2024-06-06 13:15:12 -05:00