Compare commits

...
448 Commits
Author SHA1 Message Date
Zhihe Li 2680301f98 chore: 🤖 Update changelog and version for desktop (#1712) 2023-06-12 16:29:50 -07:00
Dharini Jeeva edf623adf0 fix: 🐛 worker form navigation (#1711)
* fix: 🐛 Show done only when a worker is registered successfully, otherwise show cancel and navigate to the workers list
2023-06-12 08:38:55 -07:00
Dharini Jeeva 37c0c55a60 fix: 🐛 add margin for button sets (#1709) 2023-06-08 16:31:07 -07:00
Randall Morey 863c080196 Optimise Desktop API queries (#1707)
* fix: 🐛 increase auth form width, which was too narrow

* chore: 🤖 optimize targets route queries

* chore: 🤖 optimize sessions route queries

* chore: 🤖 disable polling in sessions route

* chore: 🤖 disable polling in targets route

* refactor: 💡 update tests for new queries and removing timing
2023-06-07 18:28:33 -07:00
Randall Morey 547d44f1bd fix: 🐛 increase auth form width, which was too narrow (#1703) 2023-06-06 18:15:58 -07:00
lisbet-alvarezandRandall Morey 6e96676beb Icu 9412 refactor rose form actions to use hds buttons (#1697)
* refactor: 💡 use hds buttons in rose form actions

✅ Closes: ICU-9412

* test: 💍 fix form actions tests

* docs: ✏️ add new hds button attribute to storybook

* refactor: 💡 add ...attributes back in

* Update addons/rose/addon/components/rose/form/actions/edit-toggle/index.hbs

Co-authored-by: Randall Morey <randall@randallmorey.com>

* Update addons/rose/addon/components/rose/form/actions/index.hbs

Co-authored-by: Randall Morey <randall@randallmorey.com>

* refactor: 💡 remove @submitIsFullWidth option & add css instead

---------

Co-authored-by: Randall Morey <randall@randallmorey.com>
2023-06-05 13:38:41 -07:00
Zhihe Li de10b275d3 chore: 🤖 Update worker binary name to just boundary (#1704)
✅ Closes: ICU-9570
2023-06-02 13:33:51 -04:00
Carlos Alcaide Corvo b94f3d164e style: 💄 Delete old comment code (#1699)
Delete old comment code, seems isn't used for a couple of years
2023-06-01 10:13:03 -07:00
Cameron Perera 80748b28fb refactor: 💡 remove type column from Workers table in Admin UI (#1702)
✅ Closes: ICU-9539
2023-06-01 11:07:57 -05:00
Zhihe Li 963b5d465d feat: 🎸 Add default client port to targets (#1700)
* feat: 🎸 Add default client port to targets

✅ Closes: ICU-9299
2023-05-31 18:33:27 -04:00
Dharini Jeeva 9d7a23fcc4 fix: 🐛 radio card group name (#1701) 2023-05-31 10:00:28 -07:00
Zhihe Li 2a11d75ccf fix: 🐛 Fix serializing client secrets in oidc auth methods (#1698) 2023-05-26 14:14:58 -04:00
dependabot[bot] 59183b9b20 chore(deps): bump socket.io-parser from 4.2.1 to 4.2.3 (#1696)
Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.1 to 4.2.3.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io-parser/compare/4.2.1...4.2.3)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-05-24 14:21:00 -04:00
lisbet-alvarez fde4ec4e05 Refactor type to use const values (#1695)
* refactor: 💡 use auth-method type consts
2023-05-23 12:37:35 -07:00
lisbet-alvarez 8d77bc60b3 Icu 9226 disable all actions for ldap accounts within users (#1688)
* refactor: 💡 disable all actions for ldap accounts within users

✅ Closes: ICU-9226
2023-05-22 15:46:13 -07:00
lisbet-alvarez 379f317d8b Refactor account and user abilities (#1694)
* refactor: 💡 add abilities to user and remove from account
2023-05-22 11:16:48 -07:00
Carlos Alcaide Corvo fe81a626fa Chore icu 9071 audit resolutions (#1693)
* Delete cryptiles from resolutions

* Delete prismjs from global resolutions and add a specific resolution

* Delete npm-user-validate from global resolutions
2023-05-22 08:38:01 -07:00
a2cc33d405 e2e Test documentation for FE onboarding (#1681)
* Add e2e documentation to faciltiate FE devs onboarding

Co-authored-by: Michael Li <michael.li@hashicorp.com>
Co-authored-by: lisbet-alvarez <107949262+lisbet-alvarez@users.noreply.github.com>

---------

Co-authored-by: Michael Li <michael.li@hashicorp.com>
Co-authored-by: lisbet-alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
2023-05-19 16:10:55 -07:00
Devon Anderson e6664b882f fix: 🐛 fix descriptions for targets list for desktop (#1692)
Target descriptions where not displaying due to some previous
refactoring.  Corrected `description` and `isActive` references.

✅ Closes: ICU-9375
2023-05-19 15:59:49 -04:00
lisbet-alvarez 6dd0423923 refactor: 💡 account and auth-method abilities (#1691)
* refactor: 💡 account and auth-method abilities

* refactor: 💡 add update & delete abilities & unit tests
2023-05-17 14:31:12 -07:00
lisbet-alvarez e8a10b3131 feat: 🎸 add ldap-auth-methods feature flag (#1690) 2023-05-16 16:10:38 -07:00
Dharini Jeeva 7d909551ac chore: Use HDS components in auth methods list view (#1686)
* chore: 🤖 use hds table and dropdown
2023-05-16 09:37:53 -07:00
lisbet-alvarez 3b3d6ab50f Icu 9202 disable all actions for ldap auth method (#1683)
* refactor: 💡 disable all actions for ldap auth-method

✅ Closes: ICU-9202
2023-05-11 15:15:31 -07:00
Randall Morey 4c80f8d8ff feat: 🎸 initial LDAP authentication support (#1645)
* feat: 🎸 initial LDAP authentication support
2023-05-11 13:55:27 -07:00
lisbet-alvarez b344c5fc18 chore: 🤖 upgrade engine.io version to fix security alert (#1685) 2023-05-10 15:07:33 -07:00
lisbet-alvarez fd72b414e0 chore: 🤖 update yaml version to fix security alert (#1684) 2023-05-10 14:13:30 -07:00
Randall Morey 5723d8efb5 fix: 🐛 support metadata access on another API host (#1682) 2023-05-09 15:06:32 -07:00
041990322f docs: ✏️ Add i18n documentation (#1679)
* docs: ✏️ Add i18n documentation

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
Co-authored-by: lisbet-alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
2023-05-05 11:27:05 -07:00
Zhihe Li 3d1ac0a4e0 feat: 🎸 Download latest HCP binary for worker config commands (#1680)
✅ Closes: ICU-7265
2023-05-04 15:14:00 -04:00
Carlos Alcaide Corvo ffd36003e0 Chore update embroider test setup (#1678)
* Update embroider/test-setup within addons/rose

* Update embroider/test-setup within addons/api, auth and core
2023-05-01 11:16:20 -07:00
f6a9c4c526 Result of tsccr-helper -pin-all-workflows . (#1677)
Co-authored-by: hashicorp-tsccr[bot] <hashicorp-tsccr[bot]@users.noreply.github.com>
Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
2023-04-27 12:24:39 -07:00
Carlos Alcaide Corvo 9bd356e9d1 ICU-8810: Audit 3 resolutions (#1676)
* Delete npm-registry-fetch from resolutions

* Delete tunnel-agent from resolutions
2023-04-27 11:06:53 -07:00
Devon Anderson 46d8758fba refactor: 💡 refactored whitespace from layout (#1675)
* refactor: 💡 refactored whitespace from layout

Removed whitespace html formatting from layout in add-principals view.

✅ Closes: ICU-5987

* refactor: 💡 removed lint ignore

Removed lint ignore for whitespace formating.
2023-04-26 15:37:56 -04:00
Devon AndersonandRandall Morey a05d07919a refactor: 💡 removed whitespace from layout in add-members view (#1673)
* refactor: 💡 removed whitespace from layout in add-members view

Removed whitespace from layout in `add-members` view by replacing
`Rose::Table` with `Hds::Table`.

✅ Closes: ICU-5986

* refactor: 💡 refactor table

Added custom styling to remove margin bottom from radio card field. That
is causing 1st column to not be valign center.

✅ Closes: ICU-5986

* refactor: 💡 refactor stylings to override.scss

Moved Hds custom syles to `overrides.scss`

✅ Closes: ICU-5986

* Update addons/rose/addon/styles/hds/overrides.scss

Co-authored-by: Randall Morey <randall@randallmorey.com>

* Update addons/rose/addon/styles/hds/overrides.scss

Co-authored-by: Randall Morey <randall@randallmorey.com>

* refactor: 💡 refactored app.scss for admin

Removed custom css for `.key-value-list` selector that is now being
served in `overrides.scss` globally.

* refactor: 💡 patched overrides

Ported Hds overrides from other repository.

---------

Co-authored-by: Randall Morey <randall@randallmorey.com>
2023-04-26 13:38:00 -04:00
Carlos Alcaide Corvo d0e00c9ea7 Chore audit 3 resolutions desktop (#1674)
* chore: 🤖 Audit 3 Desktop client resolution deps

✅ Closes: ICU-8811
2023-04-26 09:21:22 -07:00
lisbet-alvarez 61269f901a chore: 🤖 upgrade @storybook/ember-cli-storybook to 0.6.0 (#1669)
* chore: 🤖 update @storybook/ember-cli-storybook to 0.6.0

✅ Closes: ICU-6588

* chore: 🤖 remove css-what from resolutions
2023-04-24 10:05:15 -07:00
lisbet-alvarez 6cb9c2ab1b chore: 🤖 add json5 to resolutions per dependabot alerts (#1672)
* chore: 🤖 add json5 to resolutions per dependabot alerts

* fix: 🐛 remove unecessary resolutions
2023-04-20 15:37:45 -07:00
Stan Ryzhov 3ea8ade828 test: 💍 (admin-e2e): Add test to create different credentials (#1670) 2023-04-20 14:07:20 -04:00
Stan Ryzhov 1c392f72b9 test(admin/e2e): Define expected private key for vault credential store test (#1671) 2023-04-19 11:09:14 -04:00
Dharini Jeeva ec0b610f8b chore: 🤖 update design system package (#1668) 2023-04-18 14:41:18 -07:00
Stan Ryzhov 9795353545 test(admin/e2e): Add create target with address test (#1667) 2023-04-17 16:14:59 -04:00
Zhihe Li 054881dc4e feat: 🎸 Add support to display external name for dynamic hosts (#1664)
* feat: 🎸 Add support to display external name for dynamic hosts

✅ Closes: ICU-8795
2023-04-17 13:22:32 -04:00
Carlos Alcaide Corvo a4395b85a6 chore: 🤖 Update electron-forge/* packages (#1666)
Update electron-forge/* packages
2023-04-17 08:43:39 -07:00
dependabot[bot] 509925ff10 chore(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 (#1665)
Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/kornelski/http-cache-semantics/releases)
- [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-06 09:29:17 -07:00
Carlos Alcaide Corvo d5c8389ae2 Resolutions audit: Delete 3 oldest resolutions (#1663)
* Delete bl from resolutions

* Delete tough-cookie from resolutions

* Delete npm from resolutions
2023-04-05 18:04:14 -07:00
Carlos Alcaide Corvo 9fa816757b fix: 🐛 Fix missing translation (#1662)
Fix missing translation on the toggle color theme selector
2023-04-03 10:33:40 -07:00
Randall MoreyandZhihe Li 7350c0e08c Feature metadata (#1661)
* feat: 🎸 load edition from controller-metadata.json

* refactor: 💡 rename edition and add licensed features support

* chore: 🤖 support dev toggling of licensed features

* chore: 🤖 rename ent edition

* Update ui/admin/app/services/feature-edition.js

* Update ui/admin/app/instance-initializers/feature-edition.js

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* chore: 🤖 cleanup

* chore: 🤖 feature edition disabled in tests / fix test cases

* test: 💍 remove feature disable calls in tests

* test: 💍 fix broken tests

* fix: 🐛 fix config bug

* fix: 🐛 fix broken test due to feature flags

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2023-03-31 17:38:17 -07:00
ee1cd4100c chore(deps-dev): bump webpack from 5.59.1 to 5.76.0 (#1654)
Bumps [webpack](https://github.com/webpack/webpack) from 5.59.1 to 5.76.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.59.1...v5.76.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Randall Morey <randall@randallmorey.com>
Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
2023-03-31 15:12:07 -07:00
hashicorp-copywrite[bot]andCarlos Alcaide Corvo f17b7d54d8 [COMPLIANCE] Add Copyright and License Headers (#1660)
Co-authored-by: hashicorp-copywrite[bot] <110428419+hashicorp-copywrite[bot]@users.noreply.github.com>
Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
2023-03-28 12:50:34 -05:00
lisbet-alvarez 087898c15a fix: 🐛 add model hook to host route for dynamic host catalogs (#1659)
* fix: 🐛 add model hook to host route for dynamic host catalogs

✅ Closes: ICU-8594

* refactor: 💡 remove page formatting for host route
2023-03-28 10:14:31 -07:00
Randall Morey ee2fa6df7d refactor: 💡 remove explicit byow-pki-upstream, as it is default (#1658)
* refactor: 💡 consolidate ssh features into ssh-target flag

✅ Closes: ICU-8383

* refactor: 💡 factor out base edition

* feat: 🎸 dynamic feature edition enablement and toggling

* refactor: 💡 remove explicit byow-pki-upstream, as it is default

✅ Closes: ICU-8551

* refactor: 💡 extract feature flag config into separate file
2023-03-21 15:41:27 -07:00
Randall Morey acd719140d Refactor edition enablement (#1657)
* refactor: 💡 consolidate ssh features into ssh-target flag

✅ Closes: ICU-8383

* refactor: 💡 factor out base edition

* feat: 🎸 dynamic feature edition enablement and toggling
2023-03-17 14:34:37 -07:00
Devon Anderson bd6eee8eb3 refactor: 💡 refactored dark-mode styling for HDS (#1655)
Refactored boundary custom colors to be included in root instead of
unused mixin.
2023-03-16 10:19:20 -04:00
Devon Anderson 3ba53dfc2e chore: 🤖 deprecate window object service (#1652)
* chore: 🤖 deprecate window object service

Deprecate `browser-object` service in favor of `ember-browser-services`

✅ Closes: ICU-7152

* refactor: 💡 cluster-url test fail

commit with cluster-url test failing

✅ Closes: ICU-7152

* refactor: 💡 refactor test to reflect changes

Refactor test to reflect `browser/window` service in `cluster-url` route

✅ Closes: ICU-7152

* refactor: 💡 refactor cluster url test

change logic of mockIPC to a function call

✅ Closes: ICU-7152
2023-03-07 16:55:24 -05:00
Carlos Alcaide Corvo 0a76111944 chore: 🤖 Upgrade Stylelint within desktop client (#1653)
Upgrade Stylelint within desktop client to be consistent with the same
version we use in Admin UI.

✅ Closes: ICU-3276
2023-03-02 11:07:41 -08:00
Zhihe Li c7546af207 fix: 🐛 Fix vault worker filter description (#1651)
✅ Closes: ICU-8192
2023-03-02 10:25:37 -05:00
Michael Li 7eb6a101a2 chore: Add missing compliance headers (#1649) 2023-03-01 11:29:33 -05:00
hashicorp-copywrite[bot]andCameron Perera 3d610427d0 [COMPLIANCE] Add Copyright and License Headers (#1617)
* [COMPLIANCE] Add Copyright and License Headers

* chore: 🤖 update Copyright headers to satisfy our lint rules

---------

Co-authored-by: hashicorp-copywrite[bot] <110428419+hashicorp-copywrite[bot]@users.noreply.github.com>
Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2023-03-01 09:39:41 -06:00
Michael Li a0fe6c86f6 test(admin/e2e): Update DHC test to catch host issue (#1648) 2023-02-28 15:55:41 -05:00
Michael Li f5cb07248d test(admin/e2e): Add login tests (#1647) 2023-02-28 10:14:22 -05:00
Michael Li 2dc50570b7 test(admin/e2e): Add tests for Credential Stores (#1643) 2023-02-27 13:54:12 -05:00
Michael Li 1f3a8ef135 test(admin/e2e): Add test for AWS Dynamic Host Catalogs (#1641) 2023-02-24 13:59:30 -05:00
Zhihe Li a8bbf91a0a fix: 🐛 Fix generic-vault getting extra null fields when saving (#1640)
* fix: 🐛 Fix generic-vault getting extra null fields when saving

✅ Closes: ICU-8141
2023-02-24 13:11:17 -05:00
Michael Li 7816772ef2 test(admin/e2e): Add first playwright test (#1637)
Adds an end-to-end test for the Admin UI using Playwright. This test uses the Admin UI to create the necessary resources to connect to a target. The test then uses the CLI to start a session and checks in the Admin UI that a session is created
2023-02-23 18:30:51 -05:00
Carlos Alcaide Corvo 7fbdefba59 fix: 🐛 Update yarn.lock (#1642) 2023-02-23 12:21:40 -08:00
Carlos Alcaide Corvo 0b992bb011 fix: 🐛 Fix failure in GH Actions Workflows (#1639) 2023-02-22 12:14:04 -08:00
Carlos Alcaide Corvo 5efc1af76d test: 💍 Swap playwright to @playwright/test package (#1635)
Playwright documentation recommends to use @playwright/test now as the
only playwright package
2023-02-21 11:50:59 -08:00
Dharini Jeeva 7db1edda1c chore: use structuredClone instead of ember-copy addon (#1634) 2023-02-16 14:06:37 -08:00
Zhihe Li 76147af357 chore: 🤖 Pin storybook docs addon to a minor version (#1631)
The storybook docs addon is broken in 6.5.x currently. Pinning it to
6.3.x lets us to continue using storybook. See this github issue:
https://github.com/storybookjs/storybook/issues/17527

✅ Closes: ICU-7791
2023-02-15 14:41:53 -05:00
Cameron PereraandRandall Morey 2d1ed7b8bd refactor: 💡 rename div around ordered-series-diagram (#1633)
* refactor: 💡 rename div around ordered-series-diagram

* refactor: 💡 remove margin top and add to min-height

* refactor: 💡 simplify diagrams

---------

Co-authored-by: Randall Morey <randall@randallmorey.com>
2023-02-14 15:32:19 -06:00
Zhihe Li e1432c2750 chore: 🤖 Update changelog and version for desktop client (#1625)
Upgrade CLI version for desktop client to 0.12.0
2023-02-13 14:18:36 -05:00
Sarah Thompson deb9bba3ef update release triggers to call new GHA workflow (#1632)
* update release triggers to call new GHA workflow

* update workflow file name

* address feedback
2023-02-13 18:38:48 +00:00
Dharini Jeeva 49f2a4a08b Target form refactor (#1627)
* refactor: 💡 target form
2023-02-10 14:38:31 -08:00
Cameron Perera 3adfb08cb3 fix: 🐛 fix diagram width so explainer text stays below it (#1629) 2023-02-09 16:44:01 -06:00
Cameron Perera 540c9e2102 refactor: 💡 Update how WorkerDiagram is used in Target form (#1626)
* refactor: 💡 Update how WorkerDiagram is used in Target form

* refactor: 💡 remove extra div wrappers

Remove div wrappers for worker diagrams that were no longer needed

* refactor: 💡 rename worker diagram attributes to be more clear

* refactor: 💡 remove style changes out of scope for updates

* refactor: 💡 update logic for how HCP diagram is shown

* chore: 🤖 Add multi-hop flags to OSS block for verbosity
2023-02-09 16:00:19 -06:00
Carlos Alcaide CorvoandZhihe Li aff993b2b5 docs: ✏️ Add how to debug binary to docs (#1628)
* docs: ✏️ Add how to debug binary to docs

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2023-02-09 10:57:54 -08:00
dependabot[bot]andZhihe Li 823de4f598 chore(deps): bump http-cache-semantics in /ui/desktop/electron-app (#1621)
Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/kornelski/http-cache-semantics/releases)
- [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2023-02-06 14:16:03 -05:00
Dharini Jeeva df4590de96 chore: 🤖 clean up isRequired/isOptional boolean (#1624) 2023-02-06 10:47:34 -08:00
dependabot[bot]andZhihe Li d0beb6eabd chore(deps): bump jszip from 3.7.1 to 3.10.1 in /ui/desktop/electron-app (#1618)
Bumps [jszip](https://github.com/Stuk/jszip) from 3.7.1 to 3.10.1.
- [Release notes](https://github.com/Stuk/jszip/releases)
- [Changelog](https://github.com/Stuk/jszip/blob/main/CHANGES.md)
- [Commits](https://github.com/Stuk/jszip/compare/v3.7.1...v3.10.1)

---
updated-dependencies:
- dependency-name: jszip
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2023-02-06 12:46:10 -05:00
Zhihe Li e6548f4d59 fix: 🐛 Fix undefined values from resource filter (#1622)
* fix: 🐛 Fix undefined values from resource filter
2023-02-06 10:28:00 -05:00
Zhihe Li 82bee42959 fix: 🐛 Fix null date time erroring out (#1623)
* fix: 🐛 Fix null date time erroring out

* style: 💄 Remove braces in if statement
2023-02-03 17:53:30 -05:00
Zhihe Li 2d6e26de84 style: 💄 Cleanup grammar of target address modal (#1620) 2023-02-03 09:49:34 -05:00
Carlos Alcaide Corvo 277e5ce197 Change the way we declare icon color (#1619) 2023-02-02 10:08:12 -08:00
Zhihe Li f0530e1f8f Vault SSH Cert Feature (#1596)
* feat: 🎸 Update models for vault ssh cert feature (#1591)

✅ Closes: ICU-7546

* feat: 🎸 Setup types in cred library forms and use HDS component (#1597)

* feat: 🎸 Setup types in cred library forms and use HDS component

✅ Closes: ICU-7673

* feat: 🎸 Add vault ssh cert type for credential library (#1608)

* feat: 🎸 Add vault ssh cert type for credential library

✅ Closes: ICU-7678

* feat: 🎸 Enable feature flag for vault ssh cert work (#1614)

* fix: 🐛 Change fields to optional as they get default by backend (#1615)

* Chore/cleanup vault ssh cert (#1616)
2023-02-01 13:46:23 -05:00
Cameron Perera e3772352ea chore: 🤖 fix broken host set links (#1613) 2023-01-31 16:02:05 -06:00
Carlos Alcaide Corvo 007fc4960b chore: 🤖 Refactor onboarding (#1586)
* chore: 🤖 Refactor onboarding

Refactor onboarding

✅ Closes: ICU-7558
2023-01-31 12:05:52 -08:00
Cameron Perera 9b998ece1b chore: 🤖 Enable Multi-hop & Network Address for Targets feature (#1607)
* chore: 🤖 Enable Multi-hop feature

* chore: 🤖 Enable target network address feature
2023-01-27 08:47:40 -06:00
Dharini Jeeva f71418732e fix: 🐛 worker section margin and reduce layout shift (#1610) 2023-01-27 08:34:51 -06:00
Dharini Jeeva d7f54af7e4 target workers UI Enterprise and HCP workflow (#1601)
adds ingress filter to target worker filter
2023-01-25 15:12:14 -08:00
Randall Morey de986c3df4 refactor: 💡 logically separate save steps for targets (#1604)
* refactor: 💡 logically separate save steps for targets

* Update ui/admin/app/routes/scopes/scope/targets.js

Oops, delete actions should catch.

* chore: 🤖 rename ids var
2023-01-25 12:48:23 -08:00
Dharini Jeeva df70c76b29 fix: 🐛 empty member ids within managed groups (#1600) 2023-01-23 15:27:23 -08:00
Dharini Jeeva 57fcab4c53 Tests target update create (#1594)
* test: 💍 add test cases for create and update target
2023-01-23 14:48:29 -08:00
Dharini Jeeva b41b6ee3e3 Icu 7301 UI target oss workflow (#1589)
Icu 7301 UI target OSS workflow (#1589)
2023-01-23 14:28:37 -08:00
Zhihe Li da59684f25 refactor: 💡 Move save back to route to unblock other work (#1598) 2023-01-23 14:32:31 -05:00
Devon AndersonandCameron Perera cf16bf8e33 chore: 🤖 fix incorrect url (#1599)
* chore: 🤖 fix incorrect url

Fix incorrect hcp worker ui download instructions that still referenced
old version.

* Update ui/admin/app/components/form/worker/create-worker-led/index.js

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2023-01-23 11:29:31 -05:00
Devon Anderson 67219d07eb refactor: 💡 update hcp worker instructions (#1587)
Update HCP binary download instructions to reflect 0.12.0 version

✅ Closes: ICU-7603
2023-01-23 10:25:13 -05:00
Devon Anderson 812e509003 chore: 🤖 create target worker explainer element (#1595)
* chore: 🤖 create target worker explainer element

Create a element that will explain what the filters and diagrams mean
when toggled and on screen.

* refactor: 💡 add logic directly to worker-diagram

* refactor: 💡 added logic to all worker diagrams

Added logic to all worker diagrams
2023-01-20 12:44:48 -06:00
Randall Morey 54d5d34981 test: 💍 fixes flaky theme selection test (#1592)
✅ Closes: icu-7597
2023-01-19 16:53:02 -08:00
Cameron Pereraanddvonanderson ee85497182 feat: 🎸 Add HCP logic to Worker Diagram component (#1585)
* feat: 🎸 create Worker Diagram for OSS

✅ Closes: ICU-7579

* refactor: 💡 change ordered series icon to have white background

* feat: 🎸 Create Worker Diagram for egress and ingress filters

✅ Closes: ICU-7592

* feat: 🎸 Add HCP logic to Worker Diagram component

✅ Closes: ICU-7594

* refactor: 💡 remove wrapping divs and update data-test attrs

* refactor: 💡 revert HDS icon background color change

* refactor: 💡 make data-test attr more verbose

* test: 💍 fix data-test selectors for dual filter tests

* refactor: 💡 refactor test for worker-diagram dual-filter

Seperate test for `worker-diagram/dual-filter` into tow seperate test.
One for HCP and one for Enterprise.

✅ Closes: ICU-7594

* chore: 🤖 actual test for last commit

actual test for last commit

* chore: 🤖 split woker-diagram dual-filter into two components

Split worker-diagram-dual-filter component into two seperate component
and fixed test to reflect changes.

✅ Closes: ICU-7594

* refactor: 💡 quick test refactor

Refactor test for `worker-diagram-dual-filter`

* refactor: 💡 refactor dual-filter test

Refactor worker-diagram-dual-filter test to better align with if the
diagram exist, rather than what the text inside of the diagram states.

✅ Closes: ICU-7594

Co-authored-by: dvonanderson <devon.anderson@hashicorp.com>
2023-01-19 14:46:40 -06:00
Dharini Jeeva a6b2acc14d Oss workflow target egress filter (#1590)
* chore: 🤖 add egress filters to target
2023-01-18 20:26:28 -08:00
Devon Anderson 06b96c0315 chore: 🤖 enable feature flag (#1588)
Enable json-credential feature-flag for 0.12 release

✅ Closes: ICU-6832
2023-01-18 12:18:06 -05:00
Zhihe Li 3d0be5ef48 refactor: 💡 Simplify template for confirmation dialog (#1580) 2023-01-17 17:08:08 -05:00
Cameron Perera 07cf9fc533 Create Worker Diagram for egress and ingress filters (#1584)
* feat: 🎸 create Worker Diagram for OSS

✅ Closes: ICU-7579

* refactor: 💡 change ordered series icon to have white background

* feat: 🎸 Create Worker Diagram for egress and ingress filters

✅ Closes: ICU-7592

* refactor: 💡 remove wrapping divs and update data-test attrs

* refactor: 💡 revert HDS icon background color change

* refactor: 💡 make data-test attr more verbose
2023-01-17 14:39:54 -06:00
Zhihe Li 0cecb0d856 Icu 7490 UI add new address field to target (#1579)
* feat: 🎸 Add network address field to targets

✅ Closes: ICU-7490
2023-01-17 15:00:43 -05:00
Cameron Perera bfc275e0f6 feat: 🎸 create Worker Diagram for OSS (#1583)
* feat: 🎸 create Worker Diagram for OSS

✅ Closes: ICU-7579

* refactor: 💡 remove wrapping divs and update data-test attrs
2023-01-17 12:44:24 -06:00
Zhihe Li 1f229fb444 feat: 🎸 Add feature flag for vault ssh certificate (#1581)
* feat: 🎸 Add feature flag for vault ssh certificate

✅ Closes: ICU-7547
2023-01-13 15:15:44 -08:00
Carlos Alcaide Corvo 583d6de49b chore: 🤖 Deprecate ember-test-selectors usage (#1578)
Deprecate ember-test-selectors usage.

✅ Closes: ICU-7572
2023-01-13 13:17:20 -08:00
Devon AndersonandRandall Morey cf66235948 feat: 🎸 OrderedSeriesDiagram component (#1573)
* feat: 🎸 OrderedSeriesDiagram component

Created `orderd-series-diagram` component to look a the state of the
ingress and egress filters and determine which diagram should be
displayed.

✅ Closes: ICU-6459

* refactor: 💡 sass lint fix

Fixed sass lint errors

✅ Closes: ICU-7347

* Update app.scss

added closing tag

* refactor: 💡 refactor of styling and test

Refactored styling for `ordered-series-diagram` to match mocks, and
fixed indent errors in test.

✅ Closes: ICU-7347

* refactor: 💡 clean up testing errors

Clean up testing errors for `ordered-series-diagram`

* refactor: 💡 refactor series diagram (#1577)

* refactor: 💡 merge refactor changes and fix test

Merged refactor changes to ordered series diagram and fix tests

✅ Closes: ICU-7347

Co-authored-by: Randall Morey <randall@randallmorey.com>
2023-01-13 13:22:16 -05:00
Cameron Perera b02dc0aa43 fix: 🐛 Remove json_object from payload for non-json credentials (#1576)
* fix: 🐛 Remove json_object from payload for non-json credentials

* refactor: 💡 update new route logic for type specific attributes

* test: 💍 remove typeIn and use fillIn for json credential test
2023-01-12 16:28:43 -06:00
Cameron Perera f7c80c8869 UI target worker filter deprecation message (#1574)
* feat: 🎸 Add worker_filter deprecation message to target form

* test: 💍 fix test selectors for worker_filter message
2023-01-11 15:46:47 -06:00
Carlos Alcaide Corvo c31f9e98be refactor: 💡 Clean up prettier config files (#1571)
Clean up prettier config files

✅ Closes: ICU-6851
2023-01-11 10:04:03 -08:00
Carlos Alcaide Corvo b58eda1122 refactor: 💡 Deprecate htmlbars-inline-precompile within addons (#1563)
* refactor: 💡 Deprecate htmlbars-inline-precompile within addons
2023-01-11 08:55:35 -08:00
Zhihe Li 7509fa345b Chore/parallelize tests (#1556) 2023-01-10 18:25:09 -05:00
Cameron Perera ad37b489b7 refactor: 💡 Migrate Target form to use HDS components (#1562)
* refactor: 💡 Migrate Target form to use HDS components

* chore: 🤖 add ember-test-selectors to remove data-test attribute

Removes data-test attributes in production builds

* refactor: 💡 Default Port marked requried or optional by type
2023-01-10 16:18:28 -06:00
Cameron Perera 63f619b1ff Add egress and ingress worker filters to target model (#1554)
* feat: 🎸 add egress and ingress worker filter to target model

✅ Closes: ICU-7300

* chore: 🤖 update mirage to include ingress/egress worker filter

* refactor: 💡 update target mirage config for worker filters

* refactor: 💡 update how target id is set in mirage factory

* refactor: 💡 update target id and default_port mirage setup

* test: 💍 fix missing address attribute in new tests
2023-01-10 15:28:20 -06:00
Dharini Jeeva f41631c745 chore: 🤖 disable csp meta for prod (#1560) 2023-01-10 13:07:22 -08:00
Devon AndersonandCameron Perera 1bd057bb4c refactor: 💡 desktop display of complex nested secrets (#1551)
* refactor: 💡 desktop display of complex nested secrets

A quick solution for displaying JSON secret objects in connection modal.

✅ Closes: ICU-7409

* refactor: 💡 refactor hidden-secret.js and test

Guard against null for in `typeof` return.

✅ Closes: ICU-7409

* Update ui/desktop/app/styles/app.scss

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>

* refactor: 💡 test

Changed test to check for secret output after clicking on reveal

* refactor: 💡 fix style for hidden-secret and test

Refactor hidden-secret span styling to have content centered and
refactored testing for assert.dom instead of find

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2023-01-10 12:56:52 -05:00
Cameron Perera 6a8d563e06 chore: 🤖 add json credential to desktop mirage scenario (#1561)
Now when connecting to a target a JSON credential will be included as
one of the credential sources via mirage
2023-01-10 09:46:43 -06:00
Dharini Jeeva 2c72f85da1 Add support for managed groups in add-principals list (#1548)
chore: 🤖 add managed groups to add-principals view
2023-01-09 11:32:37 -08:00
Zhihe Li 73be8268a6 chore: 🤖 Add feature flag for target network address feature (#1558)
✅ Closes: ICU-7493
2023-01-09 13:41:20 -05:00
Zhihe Li 6d048d8e10 feat: 🎸 Update target model for address (#1557)
✅ Closes: ICU-7489
2023-01-09 12:35:42 -05:00
c21f011bb2 Refactor upgrade ember 4 (#1501)
Upgrade Ember 4

Co-authored-by: Randall Morey <randall@randallmorey.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2023-01-09 08:48:49 -08:00
Zhihe Li ed91b26861 chore: 🤖 Update dependencies to fix minimatch vulnerability (#1553) 2023-01-06 11:50:34 -05:00
Zhihe Li 044bd14e21 chore: 🤖 Remove yarn test from commit hook (#1555) 2023-01-05 15:32:35 -05:00
Cameron Perera d8d1c797f5 chore: 🤖 add target multi-hop flags to environment config (#1546)
* chore: 🤖 add target multi-hop flags to environment config

✅ Closes: ICU-7299

* chore: 🤖 rename feature flag to target-dual-worker

* chore: 🤖 update multi-hop flags to target-worker-filters-v2
2023-01-03 15:39:27 -06:00
Carlos Alcaide Corvo 49ce67b69e Update latest dependency changes (#1552) 2023-01-03 11:42:47 -08:00
Zhihe Li 5612abce4a chore: 🤖 Update electron deps (#1547) 2023-01-03 14:14:55 -05:00
Zhihe Li 07e64a7406 chore: 🤖 Pin request to latest version to fix qs vulnerability (#1550) 2022-12-23 15:11:40 -05:00
Zhihe Li 2393698d0d chore: 🤖 Update engine.io version to fix security vuln (#1549) 2022-12-23 11:33:54 -05:00
Dharini Jeeva f3dbd7cdab Add links to role principals with ability (#1545)
chore: 🤖 add links to role/principals
2022-12-22 14:41:00 -08:00
Dharini Jeeva f2c0458fb5 Add model support for managed groups (#1544)
* chore: 🤖 streamline managed groups getter on role
2022-12-22 14:09:56 -08:00
Dharini Jeeva 392da009d0 Add mirage support principal managed groups (#1542)
* chore: 🤖 mocks for principals/managed-groups & roles
2022-12-22 10:23:49 -08:00
Zhihe Li 1006680060 chore: 🤖 Update xmldom to patch security vulnerability (#1541) 2022-12-22 11:05:31 -05:00
Dharini Jeeva e9f1de91a1 chore: 🤖 update role form fields to hds (#1539) 2022-12-21 09:42:13 -08:00
Randall Morey 7dd9fb80d5 chore: 🤖 add role readPrincipal ability (#1540) 2022-12-20 16:31:39 -05:00
Randall Morey 69dfc7c784 refactor: 💡 use constants for target types (#1538)
* refactor: 💡 use constants for target types

* chore: 🤖 import types rather than *

* chore: 🤖 use capitalized TYPES_TARGET constant name
2022-12-20 12:07:52 -05:00
Zhihe Li 473ebcc397 chore: 🤖 Bump loader-utils to 2.0.4 (#1537) 2022-12-20 11:29:13 -05:00
Randall Moreyanddvonanderson 54c5c7fdc5 Chore tweak target type content (#1529)
* fix: 🐛 refactor info-field component

Overall context of how the `<InfoField/>` was changed to the correct
order.  Corrected css grid to have the order of
`label,input-field,helper-text`. Also refactored all component instances
affected by the change.

* refactor: 💡 refactor styling for icon to be center

refactor will get the icon as close to center as possible.

* chore: 🤖 ssh type first; update names and descriptions

* chore: 🤖 tweak info field styles

* chore: 🤖 fix formatting/linting issue

* refactor: 💡 credential stylistic changes per PR feedback

* chore: 🤖 reuse configPath

* fix: 🐛 fix lint error

* chore: 🤖 add target type field helper text

Co-authored-by: dvonanderson <devon.anderson@hashicorp.com>
2022-12-19 16:59:51 -05:00
Randall Morey 51c1aba794 chore: 🤖 cleanup json creds code / tests (#1535) 2022-12-16 15:06:19 -05:00
Michele Degges f1b7a9cd84 OSS->ENT merge trigger (#1520) 2022-12-16 09:42:40 -08:00
Cameron Perera d542acfc15 test: 💍 add tests for updating JSON credentials (#1531)
* test: 💍 add tests for updating JSON credentials

✅ Closes: ICU-6805

* refactor: 💡 update click selector for discard dialog tests
2022-12-15 13:24:48 -06:00
Dharini Jeeva 92db4d4947 chore: 🤖 remove rose radiocard and styles (#1521)
chore: 🤖 remove rose radio card and styles
2022-12-15 09:11:01 -08:00
Randall Moreyanddvonanderson ed9e674823 Refactor info field component (#1527)
* fix: 🐛 refactor info-field component

Overall context of how the `<InfoField/>` was changed to the correct
order.  Corrected css grid to have the order of
`label,input-field,helper-text`. Also refactored all component instances
affected by the change.

* refactor: 💡 refactor styling for icon to be center

refactor will get the icon as close to center as possible.

* chore: 🤖 tweak info field styles

Co-authored-by: dvonanderson <devon.anderson@hashicorp.com>
2022-12-14 18:55:11 -05:00
Cameron Perera c933aa8840 test: 💍 Add delete tests for JSON Credentials (#1526)
* test: 💍 Add delete tests for JSON Credentials

✅ Closes: ICU-6806

* refactor: 💡 update JSON variable names
2022-12-14 13:36:30 -06:00
Carlos Alcaide Corvo f6cad6a9ee chore: 🤖 Upgrade ember-focus-trap (#1530)
Upgrade ember-focus-trap (need for Ember 4 work)
2022-12-14 10:28:54 -08:00
c4a70e9e9e Icu 7083 add stylelint to admin (#1519)
* Added styelint to `ui/admin'

* refactor: 💡 quick refactor

Refactor attribute name back to original

✅ Closes: ICU-7083

* Update _notify.scss

for got to set the calling of the animation back in the selector

* refactor: 💡 quick refactor for stylelintrc file

possible pattern selector settings

* refactor: 💡 added rule for selector class pattern

Added rule for kebab-case, HDS, and CodeMirror

✅ Closes: ICU-7083

* Update app.scss

fixed linting errors.

* refactor: 💡 refactor stylelintrc

Simplify regex for `stylelintrc` and added
comments that details what
the regex is doing.

✅ Closes: ICU-7083

* Update ui/admin/.stylelintrc.js

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

Co-authored-by: Randall Morey <randall@randallmorey.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2022-12-14 12:22:44 -05:00
Cameron Perera 8a61c28254 test: 💍 Create read tests for JSON credentials (#1524)
* test: 💍 Create read tests for JSON credentials

✅ Closes: ICU-6804

* refactor: 💡 use HDS color token to skeleton message color

* refactor: 💡 update JSON variable names
2022-12-14 09:53:34 -06:00
3c2d5e6c7a chore(deps): bump express from 4.17.1 to 4.18.2 (#1514)
Bumps [express](https://github.com/expressjs/express) from 4.17.1 to 4.18.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.17.1...4.18.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-12-14 03:16:16 -05:00
88f195d02d chore(deps): bump qs from 6.5.2 to 6.5.3 in /ui/desktop/electron-app (#1513)
Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3)

---
updated-dependencies:
- dependency-name: qs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-12-14 01:04:54 -05:00
Dharini Jeeva 7d3727dc34 Radio card migration - hostcatalog hosts host sets (#1503)
* chore: 🤖 radio card migration
2022-12-13 17:45:26 -08:00
Cameron Perera d98a85e2f4 test: 💍 update list credential tests (#1528)
* test: 💍 update list credential tests

✅ Closes: ICU-6807

* refactor: 💡 fix JSON variable naming
2022-12-13 15:56:03 -06:00
Devon Anderson fb89cbb4cf fix: 🐛 refactor info-field component (#1525)
* fix: 🐛 refactor info-field component

Overall context of how the `<InfoField/>` was changed to the correct
order.  Corrected css grid to have the order of
`label,input-field,helper-text`. Also refactored all component instances
affected by the change.

* refactor: 💡 refactor styling for icon to be center

refactor will get the icon as close to center as possible.
2022-12-13 15:49:22 -05:00
dependabot[bot]andCarlos Alcaide Corvo 2192794089 chore(deps): bump decode-uri-component from 0.2.0 to 0.2.2 (#1510)
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
2022-12-13 11:57:36 -08:00
Cameron Perera 66ae9eb5b0 feat: 🎸 Update byow install boundary command for hcp edition (#1522)
* feat: 🎸 Update byow install boundary command for hcp edition

* refactor: 💡 update version in download url for boundary worker
2022-12-12 18:55:28 -06:00
lisbet-alvarezandCameron Perera e418017bc2 feat: 🎸 create form for json credentials (#1498)
* feat: 🎸 create form for json credentials

✅ Closes: ICU-6682

* refactor: 💡 add new info field

* refactor: 💡 add feature flag

* refactor: 💡 add hds radio cards to json cred

* Update ui/admin/tests/acceptance/credential-store/credentials/create-test.js

* test: 💍 add test for json cred

* chore: 🤖 Remove ember-data-model-fragments package

* fix: 🐛 Update how json is added as a known credential type

* refactor: 💡 update credentialTypes if statement to ternary

* chore: 🤖 add ember-data back to addon/api project

* chore: 🤖 remove ember-feature-flag from addon/api

* refactor: 💡 remove if statement in cred form

* refactor: 💡 update selectors for json cred. tests

* refactor: 💡 Update Credential Form to use form.disabled

* test: 💍 Fix test selectors for radio card credential tests

* refactor: 💡 update credential types declaration to const

* style: 💄 Fix style issue with SecretEditor in edit mode

* refactor: 💡 remove disabled and readonly attributes in form

* refactor: 💡 Create credential ability canRead override

* test: 💍 add credential ability override tests

* test: 💍 Fix brokered credential test with json support added

* refactor: 💡 add attributes comment back to credential model

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2022-12-12 18:37:01 -06:00
Dharini Jeeva e18b30a54e chore: 🤖 radio card migration - target and Credentials (#1502)
chore: 🤖 radio card migration - target and Credentials
2022-12-08 11:17:44 -08:00
Dharini Jeeva 28a43251ac migrate credential store radio card component (#1492)
chore: 🤖 cred store radio card migration
2022-12-07 13:52:49 -08:00
lisbet-alvarez 5474465463 refactor: 💡 acceptance tests in scopes folder (#1509)
✅ Closes: ICU-7126
2022-12-07 10:32:08 -08:00
Zhihe Li 8ae6506abf Icu 6896 upgrade ember data (#1511)
* chore: 🤖 Upgrade ember data to 3.28.12

✅ Closes: ICU-6896
2022-12-06 14:29:58 -05:00
Devon AndersonandRandall Morey 764f4703e0 chore: 🤖 brokered and injected credential associations (#1512)
* chore: 🤖 brokered and injected credential associations

Verified JSON credentials show up as a source that can be added to a
target as `brokered`, and not show up as a source that can be added to a
target as `injected`.

✅ Closes: ICU-6833, ICU-6834, ICU-6835, ICU-6836

* Update ui/admin/app/controllers/scopes/scope/targets/target/add-injected-application-credential-sources.js

Co-authored-by: Randall Morey <randall@randallmorey.com>

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-12-06 13:37:55 -05:00
Cameron Perera c62eb751e4 Icu 6680 UI code editor for secrets (#1499)
* feat: 🎸 initial secret editor

* feat: 🎸 Create Secret Editor for JSON Credentials

✅ Closes: ICU-6680

* style: 💄 Fix sass lint errors

* style: 💄 Appease sass-lint rule for using --size in stylesheet

* refactor: 💡 Set Icon size via component attribute

* refactor: 💡 remove computed decorators for Secret Editor

* refactor: 💡 update editor styles to using sizing variables

* refactor: 💡 update styles and add comments

* refactor: 💡 clean up styling for secret editor

* refactor: 💡 update class names to be more verbose

* chore: 🤖 move jsonlint import to rose index.js

* refactor: 💡 remove duplicate margin style for skeleton body

* refactor: 💡 add comments to SecretEditor component class

* refactor: 💡 large updates to secret json editor

* refactor: 💡 Move JSON Secret to form/field/ directory

* style: 💄 fix padding for Secret Editor line numbers

* chore: 🤖 disable property-sort-oder in .sasslintrc

* refactor: 💡 reorder app.scss styles

* test: 💍 Add integration tests for JSON Secret and Skeleton
2022-12-02 13:58:04 -06:00
Zhihe Li c3d9fd8fc5 Icu 6657 auth method model fragments refactor (#1507)
* refactor: 💡 Remove fragment usage for arrays in auth method
* chore: 🤖 Remove ember-data-model-fragments

✅ Closes: ICU-6657
2022-12-02 14:29:53 -05:00
Zhihe Li f8429b15e9 Chore/cleanup filter attribute (#1500)
* refactor: 💡 Rename attributes called filter

* refactor: 💡 Remove adapter handling of old attribute errors

* refactor: 💡 Check for undefined in serializer instead of falsy
2022-12-02 13:44:11 -05:00
lisbet-alvarez b1f14e5c62 refactor: 💡 acceptance tests in targets folder (#1505)
* refactor: 💡 acceptance tests in targets folder

✅ Closes: ICU-6974

* refactor: 💡 update a few test cases
2022-11-30 14:01:23 -08:00
Dharini Jeeva caeb6f9008 Host catalog infofield (#1508)
* chore: 🤖 use infofield in host catalog
2022-11-30 13:13:36 -08:00
Devon AndersonandRandall Morey 0015745d41 feat: 🎸 Custom information field (#1493)
* feat: 🎸 Custom information field

Create custom information component for views that need read-only
information listed.

✅ Closes: ICU-6957 ICU-6981

* refactor: 💡 fix setup for info-field component

Added conditional icon as a yield to `Hds::Form::TextInput::Field` to
avoid over complicating the css for `info-field` component.

✅ Closes: ICU-6957

* refactor `username_password` index.hbs

`@value` on `<InfoField>` was pointing to wrong variable.

* fix: 🐛 fixed lint

Lint errors

* fix: 🐛 linting errors fixed

linting errors fixed

* chore: 🤖 tweak info field styles and layout for icons

* refactor: 💡 switched `grid-area` in css to match design

Switched `grid-area`'s to match Design

* refactor: 💡 removed grid attribute from field wrapper

Removed display grid from `vertical` wrapper

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-11-30 14:38:12 -05:00
lisbet-alvarez fbc023da65 refactor: 💡 acceptance tests in create-test.js for users (#1476)
* refactor: 💡 acceptance tests in create-test.js for users

✅ Closes: ICU-6965

* refactor: 💡 use this.server.schema instead of this.server.db
2022-11-30 10:06:04 -08:00
lisbet-alvarez 6cc5f43b48 refactor: 💡 acceptance tests in update-test.js for user (#1475)
* refactor: 💡 acceptance tests in update-test.js for user

✅ Closes: ICU-6969

* refactor: 💡 use this.server.schema instead of this.server.db
2022-11-28 16:08:56 -08:00
lisbet-alvarez 2cef6ebe44 refactor: 💡 acceptance tests in delete-test.js for users (#1474)
✅ Closes: ICU-6895
2022-11-28 15:04:18 -08:00
lisbet-alvarezandCameron Perera e8a3650fbe refactor: 💡 adjust css selector for specific asserts (#1468)
* refactor: 💡 adjust css selector for specific asserts

✅ Closes: ICU-6889

* refactor: 💡 small update

* refactor: 💡 selectors for .doesNotExist()

* Update addons/core/tests/integration/helpers/relative-datetime-live-test.js

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2022-11-28 14:44:34 -08:00
Zhihe Li ff7a1fedea Icu 6794 refactor attributes using the newer is nested attribute annotation (#1481) 2022-11-23 14:40:07 -05:00
Zhihe Li ff6e2bb4cf fix: 🐛 Fix claims map dropdown not having a default value (#1497) 2022-11-23 12:50:46 -05:00
Dharini Jeeva cd8a627c46 chore: 🤖 quick setup layout (#1496) 2022-11-23 09:00:21 -08:00
Dharini Jeeva 2b3f9b3cf0 fix: 🐛 add state to oidc form (#1491) 2022-11-22 12:06:49 -08:00
Dharini Jeeva 7120a5c54e chore: 🤖 deprecate warning to rose radiocard (#1486)
* chore: 🤖 add deprecation warning message to rose radiocard component
2022-11-22 08:37:54 -08:00
Randall MoreyandZhihe Li f7c1523adb Refactor host set fragment arrays (#1464)
* refactor: 💡 change host_ids to a simple attribute

* refactor: 💡 manually manage host set array model attributes

* refactor: 💡 Fix host set IDs usage

* style: 💄 Fix comment and add braces for if statements

* refactor: 💡 Add back in empty array for normalizer

* refactor: 💡 Move attributes to generated model

* refactor: 💡 Update array actions when creating new host sets

* test: 💍 Add a few create tests for azure and aws host sets

* test: 💍 Add update tests for azure and aws host sets

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2022-11-21 19:07:46 -05:00
Devon AndersonandCameron Perera e3d44eb813 chore: 🤖 JSON credential data modeling (#1485)
* chore: 🤖 JSON credential data modeling

Added json type to credential model, created `json_object` attribute for
`json` type, updated credential serializer to handle `json_object`
attribute data being sent to backend and updated normalizer to handlle
secret untracked 'json_object'.

✅ Closes: ICU-6653, ICU-6684, ICU-6685, ICU-6802, ICU-6803

* Update en-us.yaml

fixed spelling

* Update addons/api/addon/models/credential.js

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>

* refactor: 💡 refactor credential serializer and .yaml

Refactored credential serializer to check for `json_object` existence
before serializing and changed help variable in `.yaml` file for
credentials.

* refactor: 💡 refactor for credential serializer

Refactor credential serializer removed redundant code,

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2022-11-21 16:28:10 -05:00
Carlos Alcaide Corvo 6b166401a1 chore: 🤖 Upgrade ember-browser-services (#1478)
Upgrade ember-browser-services
2022-11-18 10:52:48 -08:00
Dharini Jeeva 65efe58481 fix: 🐛 hds select field width (#1479) 2022-11-17 13:38:51 -08:00
Dharini Jeeva c9254b4463 Remove rose badge styles (#1473)
* chore: 🤖 remove rose badge stylesheets
2022-11-17 10:44:04 -08:00
Zhihe Li fa7b5bd00b fix: 🐛 Fix accounts not displaying correctly in auth methods (#1477) 2022-11-17 11:52:53 -05:00
lisbet-alvarez 232699cad0 refactor: 💡 acceptance tests in read-test.js for users (#1467)
* refactor: 💡 acceptance tests in read-test.js for users

✅ Closes: ICU-6892

* Update ui/admin/tests/acceptance/users/read-test.js
2022-11-16 12:10:38 -08:00
lisbet-alvarezandRandall Morey 37ad4b6a32 refactor: 💡 acceptance tests in list-test.js for users (#1466)
* refactor: 💡 acceptance tests in list-test.js for users

✅ Closes: ICU-6893

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-11-16 11:39:45 -08:00
Dharini Jeeva 42169b070c Remove rose badge (#1465)
chore: 🤖 delete rose badge component
2022-11-16 10:07:40 -08:00
dependabot[bot] 5e48fdaaf8 chore(deps): bump loader-utils from 1.4.1 to 1.4.2 (#1470)
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.1 to 1.4.2.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.2/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v1.4.1...v1.4.2)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-16 08:35:43 -08:00
Devon AndersonandRandall Morey cf3acad084 feat: 🎸 Credential type selector refactor (#1452)
* feat: 🎸 Credential type selector refactor

When editing a credential or viewing the details screeen, the credential
type should be displayed as a readonly text field

✅ Closes: ICU-6839

* refactor: 💡 refactored disabled argument for credential type

BREAKING CHANGE: 🧨 ICU-6839

✅ Closes: ICU-6839

* refactor: 💡 Refactored credential-type-field

Refactored credential type card ui to look more like a message element
than a disabled input

✅ Closes: ICU-6839

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-11-15 19:57:39 -08:00
Dharini Jeeva b8cbbceff6 chore: 🤖 deprecation workflow (#1462)
* chore: 🤖 rebase main

* test: 💍 rebase

* test: 💍 rebase

* test: 💍 rebase

* test: 💍 rebase
2022-11-15 19:36:30 -08:00
Dharini Jeeva 58a47c8375 chore: 🤖 remove console log (#1463)
* chore: 🤖 remove console log
2022-11-15 10:41:43 -08:00
Randall Morey 9875899875 refactor: 💡 migrate set-password form to HDS text input (#1461)
* refactor: 💡 update scope form to use HDS input and textarea

* chore: 🤖 tweak "optional" label text color in dark mode

* fix: 🐛 add HDS field margins and fix form tests

* fix: 🐛 fix acceptance tests and add TextInput event handlers

* refactor: 💡 migrate change-password form to HDS inputs

* fix: 🐛 use input event and fix set-from-event to handle empty

* chore: 🤖 reverse order of isRequired and isOptional

* fix: 🐛 use @type as required by HDS

* chore: 🤖 fix linting

* refactor: 💡 migrate set-password form to HDS text input

✅ Closes: icu-6918
2022-11-15 10:14:05 -08:00
Randall Morey aae85c44d2 Migrate change-password form to HDS input fields. (#1460)
* refactor: 💡 update scope form to use HDS input and textarea

* chore: 🤖 tweak "optional" label text color in dark mode

* fix: 🐛 add HDS field margins and fix form tests

* fix: 🐛 fix acceptance tests and add TextInput event handlers

* refactor: 💡 migrate change-password form to HDS inputs

* fix: 🐛 use input event and fix set-from-event to handle empty

* chore: 🤖 reverse order of isRequired and isOptional

* fix: 🐛 use @type as required by HDS

* chore: 🤖 fix linting
2022-11-15 09:34:25 -08:00
Randall Morey b08d3affe4 refactor: 💡 update scope form to use HDS input and textarea (#1459)
* refactor: 💡 update scope form to use HDS input and textarea

* chore: 🤖 tweak "optional" label text color in dark mode

* fix: 🐛 add HDS field margins and fix form tests

* fix: 🐛 fix acceptance tests and add TextInput event handlers

* fix: 🐛 use input event and fix set-from-event to handle empty

* fix: 🐛 fix linting and add @type='text' on HDS text input

* fix: 🐛 fix HDS field margin overrides

* chore: 🤖 simplify selector
2022-11-15 08:53:10 -08:00
Randall Morey bdc36b1e59 fix: 🐛 fix broken relative datetime live render tests (#1469) 2022-11-15 07:53:01 -08:00
Dharini Jeeva e0f9b8723b Migrate rest of the badges in admin UI (#1454)
* chore: 🤖 migrate rest of the badges in admin ui
2022-11-14 17:14:33 -08:00
lisbet-alvarezandZhihe Li b3a02a3d6e refactor: 💡 update acceptance tests for host-catalogs (#1451)
* refactor: 💡 refactor update acceptance tests for host-catalogs

✅ Closes: ICU-6648

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2022-11-14 16:07:12 -08:00
Dharini Jeeva 9bb9edc36b Storybook badge updates (#1453)
* chore: 🤖 storybook updates for badge
2022-11-14 13:52:23 -08:00
lisbet-alvarez 0aa7a5f494 Icu 6647 acceptance host catalogs list (#1450)
* refactor: 💡 list acceptance tests for host catalogs

✅ Closes: ICU-6647

* refactor: 💡 adjust selector for asserts that use .doesNotExist

✅ Closes: ICU-6647
2022-11-14 13:24:09 -08:00
Cameron PereraandRandall Morey 84077b5d8a Icu 6800 api is secret data modeling (#1448)
* refactor: 💡 Add isSecret option for model attributes

Move secret attribute logic to application serializer that will remove
the key/value pair if the value is null or empty

✅ Closes: ICU-6800

* refactor: 💡 Add isSecret option to credential store token

* Update addons/api/addon/serializers/credential.js

Remove unneeded serialize method for credentials

Co-authored-by: Randall Morey <randall@randallmorey.com>

* refactor: 💡 add type check for serializing secret attributes

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-11-14 14:45:53 -06:00
lisbet-alvarez faec9aad73 refactor: 💡 delete acceptance tests for host catalogs (#1449)
✅ Closes: ICU-6649
2022-11-14 10:53:43 -08:00
Dharini Jeeva 399aeb1790 chore: 🤖 badge migrations in admin ui part 1 (#1439)
* chore: 🤖 badge migrations in admin ui part 1
2022-11-11 18:19:07 -08:00
Dharini Jeeva a1e35cdc99 chore: 🤖 badge migration in desktop (#1438)
* chore: 🤖 badge migration in desktop
2022-11-11 17:15:52 -08:00
Randall Morey 2709ce925f fix: 🐛 inlcude "addon" folder in rose style formatting command (#1458) 2022-11-11 15:24:14 -08:00
Dharini Jeeva ee8182e262 feat: 🎸 badge migration in sessions admin ui (#1437)
* chore: badge migration in sessions admin ui
2022-11-11 14:14:31 -08:00
Randall MoreyandDharini Jeeva 02b6afa5e7 refactor: migrate to HDS select form fields (#1447)
* chore: 🤖 install HDS and associated assets

* chore: 🤖 bump HDS version

* refactor: 💡 optimize hds/icon addon content build

* test: 💍 fix intermittent test failure

* refactor: 💡 replace auth method selects with HDS select

* refactor: 💡 update storybook and tests to reflect HDS selects

* style: 💄 fix style linting issue

* fix: 🐛 fix bad scss syntax

* fix: 🐛 fix scss syntax again

* refactor: 💡 remove references to rose/form/select

* chore: 🤖 experimental HDS dark mode

* refactor: 💡 add custom set helper to replace action helper

* chore: 🤖 remove HDS dark mode, to be implemented in another pr

* refactor: 💡 apply custom dark mode for HDS

* chore: 🤖 add tier 2 color tweaks for better dark mode contrast

* chore: 🤖 tweak HDS form borders in dark mode

* docs: ✏️ add set function comment

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2022-11-11 13:45:35 -08:00
Randall MoreyandDharini Jeeva 87b1fb1c5c refactor: 💡 apply custom dark mode for HDS (#1456)
* chore: 🤖 install HDS and associated assets

* chore: 🤖 bump HDS version

* refactor: 💡 optimize hds/icon addon content build

* test: 💍 fix intermittent test failure

* refactor: 💡 apply custom dark mode for HDS

* chore: 🤖 add tier 2 color tweaks for better dark mode contrast

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2022-11-11 11:31:46 -08:00
Randall MoreyandDharini Jeeva 9fa982d6d1 chore: 🤖 install HDS and associated assets (#1436)
* chore: 🤖 install HDS and associated assets

* chore: 🤖 bump HDS version

* refactor: 💡 optimize hds/icon addon content build

* test: 💍 fix intermittent test failure

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2022-11-10 20:52:12 -08:00
dependabot[bot] d7b7b014d4 chore(deps): bump socket.io-parser from 4.0.4 to 4.0.5 (#1446)
Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.0.4 to 4.0.5.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io-parser/compare/4.0.4...4.0.5)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-10 16:53:33 -08:00
Carlos Alcaide Corvo 3810c281d3 chore: 🤖 Forgot addon upgrade to Ember 3.x (#1430)
Forgot addon upgrade to Ember 3.x
2022-11-10 11:32:08 -08:00
Devon Anderson fce82c6d9f chore: 🤖 Added json-credential feature flag (#1440)
Added JSON credential flag to help manage access to ui changess for
credential-store/credentials view and actions.

✅ Closes: ICU-6798
2022-11-09 16:36:04 -05:00
Cameron Perera 5e7e11fc6b feat: 🎸 Add links to Host Sets assigned to targets (#1434)
* feat: 🎸 Add links to Host Sets assigned to targets

The target host sources view can now link to the host sets associated
with that target

✅ Closes: ICU-6525

* test: 💍 Improve test assert for host sources links
2022-11-09 14:22:28 -06:00
lisbet-alvarez dfe3aee450 refactor: 💡 one acceptance test in scopes-test.js (#1406)
✅ Closes: ICU-6624
2022-11-09 11:02:57 -08:00
lisbet-alvarez 0b8f1aea17 refactor: 💡 targets read acceptance tests (#1405)
✅ Closes: ICU-6547
2022-11-09 10:13:17 -08:00
lisbet-alvarez 247be9b467 refactor: 💡 acceptance tests for sessions for admin ui (#1404)
✅ Closes: ICU-6623
2022-11-09 09:24:36 -08:00
Zhihe Li a9f6821a3a fix: 🐛 Fix styling for header icon CSS (#1431) 2022-11-08 15:25:53 -05:00
dependabot[bot]andRandall Morey 6b27d67122 chore(deps): bump loader-utils from 1.4.0 to 1.4.1 (#1428)
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.1/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v1.4.0...v1.4.1)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-11-08 10:48:36 -08:00
Randall Morey 561ed0b2e1 Refactor route action helper - icu-6773 (#1427)
* refactor: 💡 explicitly inject the store service - icu-6770

✅ Closes: icu-6770

* refactor: 💡 upgrade to ember-intl 6.0.1

includes locale initialization and smoke tests

* refactor: 💡 migrate admin and desktop to ember-intl 6.x

✅ Closes: icu-6771

* chore: 🤖 exclude cldr-core@38.1.0 from license checking

this license was manually checked

* fix: 🐛 fix text naming and linting

* refactor: 💡 pull route-action local and update for ember 4

✅ Closes: icu-6773
2022-11-08 09:14:04 -08:00
Randall Morey 0c819d6d12 Chore upgrade ember intl (#1425)
* refactor: 💡 explicitly inject the store service - icu-6770

✅ Closes: icu-6770

* refactor: 💡 upgrade to ember-intl 6.0.1

includes locale initialization and smoke tests

* refactor: 💡 migrate admin and desktop to ember-intl 6.x

✅ Closes: icu-6771

* chore: 🤖 exclude cldr-core@38.1.0 from license checking

this license was manually checked

* fix: 🐛 fix text naming and linting

* chore: 🤖 update to ember-intl beta
2022-11-07 16:18:02 -08:00
Randall MoreyandDharini Jeeva c107fa872c refactor: 💡 explicitly inject the store service - icu-6770 (#1424)
✅ Closes: icu-6770

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2022-11-07 15:17:23 -08:00
Randall MoreyandDharini Jeeva e538200720 chore: 🤖 improve credentials/new titling - icu-6724 (#1423)
✅ Closes: icu-6724

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2022-11-07 14:59:15 -08:00
Randall Morey e13aaaa4d6 chore: 🤖 improve credential-libraries/new titling - icu-6724 (#1422)
✅ Closes: icu-6724
2022-11-07 14:37:10 -08:00
Randall Morey b4dbefb79b chore: 🤖 improve credential-stores/new titling - icu-6723 (#1421)
✅ Closes: icu-6723
2022-11-07 13:27:43 -08:00
Randall Morey a7694bdd7f chore: 🤖 improve hosts/new titling - icu-6722 (#1419)
✅ Closes: icu-6722
2022-11-07 13:05:40 -08:00
Randall Morey a24f5b4107 chore: 🤖 improve host-sets/new titling - icu-6721 (#1418)
✅ Closes: icu-6721
2022-11-07 12:46:32 -08:00
Zhihe Li 2ec2c2934c Icu 6705 add stylelint to rose (#1410)
* chore: 🤖 Add stylelint packages

* style: 💄 Initial stylelint fixes

* style: 💄 Use suggested module

* style: 💄 Fix comment whitespace and remove unneeded ones

* style: 💄 Fix few more styles

* style: 💄 Ignore a few styles and fix the rest

* style: 💄 Fix scss/dollar-variable-pattern rule

* chore: 🤖 Remove stylelint order package

* style: 💄 Fix custom-property-pattern rule

* chore: 🤖 Add stylelintrc file to eslintrc

* refactor: 💡 Remove duplicated css selector
2022-11-07 15:23:06 -05:00
Carlos Alcaide Corvo 4481ec7f2a fix: 🐛 Fix missing yarn lock (#1426)
Fix missing yarn lock update
2022-11-07 11:53:02 -08:00
Randall Morey 2360c4124c chore: 🤖 improve host-catalogs/new titling - icu-6720 (#1417)
✅ Closes: icu-6720
2022-11-06 18:12:38 -08:00
Randall Morey ee3c550809 chore: 🤖 improve targets/new titling - icu-6719 (#1416)
✅ Closes: icu-6719
2022-11-06 17:44:06 -08:00
Randall Morey 063c047792 chore: 🤖 improve accounts/new titling - icu-6718 (#1415)
✅ Closes: icu-6718
2022-11-06 17:23:26 -08:00
Randall Morey 3c1a46c9ef chore: 🤖 improve auth-methods/new titling - icu-6717 (#1413)
✅ Closes: icu-6717
2022-11-04 20:08:25 -07:00
Randall Morey 579ebbe9fe chore: 🤖 improve roles/new title - icu-6716 (#1412)
✅ Closes: icu-6716
2022-11-04 19:27:11 -07:00
Randall Morey 5947c6e08a chore: improve titling for new groups - icu-6715 (#1411) 2022-11-04 19:09:07 -07:00
Carlos Alcaide Corvo 40346f2f09 Chore update ember to latest 3.x (#1409)
Update ember to latest 3.x patch
2022-11-04 14:15:31 -07:00
Randall Morey 5e3f693113 chore: 🤖 improve users/new title - icu-6713 (#1408)
✅ Closes: icu-6713
2022-11-03 18:52:43 -07:00
Randall Morey d32a854a94 chore: 🤖 improve scopes/new titling - icu-6714 (#1407)
* chore: 🤖 improve scopes/new titling - icu-6714

✅ Closes: icu-6714

* chore: 🤖 improve new scope link text
2022-11-03 18:37:42 -07:00
Zhihe Li e8af948dc1 feat: 🎸 Auto-populate hcp cluster id (#1389)
✅ Closes: ICU-6200
2022-11-02 14:30:10 -04:00
lisbet-alvarez a91cbaf231 refactor: 💡 host set read acceptance tests (#1402)
* refactor: 💡 host set read acceptance tests

✅ Closes: ICU-6546
2022-11-02 11:11:02 -07:00
lisbet-alvarezandZhihe Li c18fb48637 refactor: 💡 hosts read acceptance tests (#1401)
* refactor: 💡 hosts read acceptance tests

✅ Closes: ICU-6545

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2022-11-02 09:49:21 -07:00
4b231f64f3 refactor: 💡 host-catalogs read acceptance test (#1400)
* refactor: 💡 host-catalogs read acceptance test

✅ Closes: ICU-6544

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2022-11-02 09:27:01 -07:00
Zhihe Li 1111cbd6a2 chore: 🤖 Update electron to latest version (#1399) 2022-11-02 11:51:26 -04:00
Devon AndersonandRandall Morey fa9f5476b5 feat: 🎸 Re-enabling footer for Boundary Admin UI (#1390)
* feat: 🎸 Re-enabling footer for Boundary `admin-ui`

Re-enable global footer and fix styling

✅ Closes: ICU-6454

* refactor: 💡 added media-query code

Added media-query code for footer to expand on smaller screens.

* refactor: 💡 refactor footer to exist in sidebar-layout

Improved overall layout of content with footer by moving it to the
sidebar-layout

* refactor: 💡 continuous refactor of admin ui footer

Refactored sidebar layout to include grid footer with layout,

* refactor: 💡 collapse sidebar when absent

* refactor: improve css grid column collapse approach

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-11-01 19:17:19 -04:00
Zhihe Li cc42de52a2 fix: 🐛 Fix electron appearance for desktop with mirage locally (#1394) 2022-11-01 18:50:40 -04:00
lisbet-alvarezandCameron Perera 0598be5df9 refactor: 💡 existing read credential store acceptance tests (#1396)
* refactor: 💡 existing credential store acceptance tests

✅ Closes: ICU-5517

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2022-10-31 13:07:58 -07:00
Randall Morey 0625d3b8a1 Refactor scss (#1397)
* refactor: 💡 upgrade sass and ember-cli-sass

* refactor: 💡 rose becomes dev dep of core

* refactor: 💡 migrate rose styles to rose/app/styles

* chore: 🤖 disable sass linting until stylelint can be installed
2022-10-27 15:32:44 -07:00
Carlos Alcaide Corvo 7d46215aa4 refactor: 💡 Delete ember-cli-template-lint (#1393)
Delete ember-cli-template-lint
2022-10-27 12:13:32 +02:00
bfc212440d chore: 🤖 auto-dismiss auth error notifications (#1384)
* chore: 🤖 auto-dismiss auth error notifications

* chore: 🤖 apply login error auto-dismiss to desktop

* Update addons/core/addon/decorators/notify.js

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>

* chore: 🤖 explain sticky defaulting

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
2022-10-25 16:09:33 -07:00
Zhihe Li 3c05337832 Icu 6424 deprecate @storybook/addon knobs (#1386)
✅ Closes: ICU-6424
2022-10-25 11:41:20 -04:00
Carlos Alcaide Corvo 744a732f05 refactor: 💡 Deprecate renderTemplate in header-nav (#1385)
Deprecate the usage of renderTemplate in the application header-nav
2022-10-25 11:13:19 +02:00
Carlos Alcaide Corvo d5ad161dcf Refactor deprecate rendertemplate (#1382)
Refactor deprecate rendertemplate for host-catalogs
2022-10-19 13:18:31 +02:00
Carlos Alcaide Corvo f7a778b9af fix: 🐛 Forgotten session setup method in core (#1380)
Forgotten ember auth session setup method
2022-10-19 12:52:45 +02:00
Randall Morey 977469f30c Revert "feat: 🎸 remove animation when user specifies reduced motion (#1381)" (#1383)
This reverts commit 6cb587eccf.
2022-10-18 13:15:37 -07:00
lisbet-alvarez 6cb587eccf feat: 🎸 remove animation when user specifies reduced motion (#1381)
✅ Closes: ICU-4330
2022-10-17 11:32:14 -07:00
Carlos Alcaide Corvo 18325e5126 fix: 🐛 Session setup method deprecation message (#1374)
* fix: 🐛 Session setup method deprecation message
2022-10-17 14:57:30 +02:00
Dharini Jeeva 57dd1ac4d3 fix: 🐛 csp fix (#1369)
* fix: 🐛 csp fix
2022-10-14 10:45:37 -07:00
Zhihe Li 8571951548 * feat: 🎸 Add handlebars registration for syntax highlighting (#1378)
* feat: 🎸 Add handlebars registration for syntax highlighting

* style: 💄 Use handlebars format

* style: 💄 Reformat mdx files

* style: 💄 Fix broken formatting from merge
2022-10-14 11:25:27 -04:00
Zhihe Li 4fd9e41cc6 fix: 🐛 Disable add worker tag if there's no key (#1379) 2022-10-14 10:52:21 -04:00
Carlos Alcaide Corvo e02177f5b6 Chore rose storybook deprecations (#1371)
* Deprecate correct blobs in main.js, postcss usage, hierarchy separators in styleguide and scoped blocks import
2022-10-14 16:18:47 +02:00
Carlos Alcaide Corvo be1b16361d chore: 🤖 Upgrade ember-autofocus-modifier (#1377)
Upgrade ember-autofocus-modifier
2022-10-14 12:26:35 +02:00
Carlos Alcaide Corvo c9dd39ff3e Chore upgrate ember qunit (#1376)
* Upgrade ember-qunit and ember-exam
2022-10-14 12:07:26 +02:00
Dharini Jeeva 0ee997716f Icu 5602 clean up form actions (#1358)
* chore: 🤖 remove unused disabled attr
2022-10-13 12:41:15 -07:00
Carlos Alcaide Corvo 15e20c008f refactor: 💡 Clean old mirage code (#1373)
Clean from addon old mirage code that it is not used
2022-10-13 09:31:22 +02:00
Carlos Alcaide Corvo 5386aaad7f Chore update ember modifier (#1370)
* chore: 🤖 Update ember-modifier
2022-10-13 09:02:06 +02:00
Zhihe Li 1f1b064ee9 fix: 🐛 Fix mac intel cli download (#1375) 2022-10-12 18:52:36 -04:00
Zhihe Li 4dda7ee3ba refactor: 💡 Update how we use ENABLE_MIRAGE to be consistent (#1362)
✅ Closes: ICU-6038
2022-10-12 11:44:10 -04:00
hashicorp-copywrite[bot]andCalebAlbers afe1e3ba3e Add or update MPL 2.0 license (#1372)
Co-authored-by: CalebAlbers <CalebAlbers@users.noreply.github.com>
2022-10-12 10:39:10 +02:00
Dharini Jeeva 32c9becea7 chore: 🤖 clean form errors (#1363) 2022-10-07 09:31:51 -07:00
mcollao-hc 7661a77824 [ICU-6448] Update CSP to add frame-ancestors: self (#1367)
* update csp

* add csp for ui
2022-10-06 14:23:14 -05:00
Zhihe Li b55c50cf64 Chore/update linter (#1355)
* chore: 🤖 Update editor config settings

* chore: 🤖 Add back ember-template-lint-plugin-prettier

* style: 💄 Format admin

* style: 💄 Format desktop

* style: 💄 Format rose

* style: 💄 Format core

* style: 💄 Format api
2022-10-06 11:41:12 -04:00
Cameron PereraandDharini Jeeva ebb172c46a chore: 🤖 update mout resolution to 1.2.4 for security issue (#1341)
Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2022-10-06 10:08:34 -05:00
Carlos Alcaide Corvo 67015346c6 Chore update ember cli dependency checker addon (#1365)
* Update ember-cli-dependency-checker.
2022-10-06 09:28:09 +02:00
Carlos Alcaide Corvo 4d8d42e80e docs: ✏️ Add debug desktop client documentation (#1359)
Add how to debug desktop client documentation.
2022-10-06 09:11:04 +02:00
Zhihe Li f46168f8de chore: 🤖 Allow retrieval of arm64 cli (#1356) 2022-10-05 15:07:04 -04:00
Cameron Perera b6b93c9cd8 style: 💄 Fix 2 translation typos (#1357) 2022-10-05 10:23:18 +02:00
Carlos Alcaide Corvo 4d6a878325 fix: 🐛 Fix SCSS lint issues (#1364)
Fix SCSS lint issues
2022-10-05 08:18:26 +02:00
Zhihe Li 7dfaff1538 fix: 🐛 Fix raw api output not displaying codemirror properly (#1354)
✅ Closes: ICU-6249
2022-09-28 14:49:09 -04:00
Zhihe Li e09b4fffe7 chore: 🤖 Update version and changelog for desktop (#1353) 2022-09-27 15:39:39 -04:00
Zhihe Li 3deec2ed50 fix: 🐛 Sort workers when filtering is enabled as well (#1352) 2022-09-27 09:15:42 -04:00
Dharini Jeeva 3fc22b4aa3 fix: 🐛 clear token on normalization (#1351)
* fix: 🐛 clear token on normalization
2022-09-26 18:25:02 -07:00
Cameron PereraandSusmitha Girumala 0cba914045 chore: 🤖 remove unused ssh-target feature flag (#1346)
Co-authored-by: Susmitha Girumala <susmitha@hashicorp.com>
2022-09-26 12:35:25 -05:00
Zhihe LiandCarlos Alcaide Corvo 4c4d4e2351 Fix bug dc token env (#1350)
* Add Boundary password as env variable. WIP

* Add Boundary password as env variable to the spawn process

* fix: 🐛 Fix token flag when connecting a target

Fix a token flag when connecting to a target. Now it uses an env
variable

* Add rest env variables to child processes

Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
2022-09-26 12:39:49 -04:00
Zhihe Li e2fff61416 fix: 🐛 Add back div to fix tag icon badge layout (#1349) 2022-09-22 17:57:40 -04:00
Zhihe Li 82e531e836 feat: 🎸 Update workers list to be sorted (#1348)
✅ Closes: ICU-6185
2022-09-22 13:24:33 -04:00
Cameron Perera e6d68c2e4a refactor: 💡 fix routing for static credentials from targets (#1347)
* refactor: 💡 fix routing for static credentials from targets

✅ Closes: ICU-6155

* chore: 🤖 Add comment to isStatic credential helper method
2022-09-21 15:10:28 -05:00
Zhihe Li 9e55f5f157 chore: 🤖 Enable BYOW feature (#1345) 2022-09-21 09:30:07 -04:00
Zhihe Li eb539b9c5b Icu 6036 update filter dropdown for tags in list view (#1337)
✅ Closes: ICU-6036
2022-09-20 20:51:06 -04:00
Dharini JeevaandCameron Perera 5224512da0 Icu 6153 unknown credential support (#1344)
* feat: 🎸 Add support for unknown credential types

✅ Closes: ICU-6153

* fix: 🐛 add unknown cred type

* refactor: 💡 move credential type logic to a component

* chore: 🤖 fix component name

* fix: 🐛 update component name, remove unused translated string

* fix: 🐛 file name

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2022-09-20 19:31:16 -05:00
Zhihe Li 6aec408003 feat: 🎸 Make checkbox equality checks more general (#1335) 2022-09-20 20:13:26 -04:00
Randall Morey f937bbf282 fix: 🐛 stop sending scope_id on cred libraries (#1343) 2022-09-20 18:24:18 -04:00
Zhihe Li 7996d5439c chore: 🤖 Update public worker address wording (#1340) 2022-09-20 17:04:17 -04:00
Dharini Jeeva 3f2a17f59c chore: 🤖 update host catalog ui (#1342)
* chore: 🤖 update host catalog/hosts/host-set azure texts
2022-09-20 13:23:29 -07:00
Dharini Jeeva 24a99d0fb7 chore: 🤖 Host Set Updates (#1333)
host set text updates
2022-09-20 09:51:29 -07:00
Zhihe Li fdc4a13194 Icu 6034 update tags in create page to support multi input fields (#1325)
* feat: 🎸 Change tags to be multi part input fields

✅ Closes: ICU-6034
2022-09-20 10:56:18 -04:00
Devon Anderson 70bfd4c181 feat: 🎸 Update Detail Page to show Tags (#1327)
* feat: 🎸 Update Detail Page to show Tags

Update detailed worker view page to show tags in key:value pair format

✅ Closes: ICU-6037

* refactor: 💡 Fix duplicate yaml variables, and view

Refactor detailed view to have space after comma for value array, and
removed duplicate yaml variables for worker_tags

✅ Closes: ICU-6037

* change title and description translation variables
2022-09-20 09:11:57 -04:00
lisbet-alvarez 10a81f8590 refactor: 💡 translation fix (#1338) 2022-09-19 16:01:14 -07:00
Zhihe Li c75abc11dc feat: 🎸 Add optional icon for dropdown section (#1332) 2022-09-19 16:28:19 -04:00
Dharini Jeeva e17db2e0d6 Update fieldset (#1334)
* chore: 🤖 add helpertext to fieldset and update text
2022-09-19 13:07:31 -07:00
Cameron Perera d2b67fa76c chore: 🤖 enable SSH Targets and Static Credential Store support (#1336) 2022-09-19 09:50:59 -05:00
Cameron Perera 3af439f1e6 refactor: 💡 Update Host Catalog form labels and help text (#1331)
✅ Closes: ICU-6107
2022-09-16 15:14:26 -07:00
Cameron Perera f143ba3d58 refactor: 💡 Update Quick Setup Success screen button route (#1330)
Route to Target details screen now

✅ Closes: ICU-6096
2022-09-16 14:25:45 -05:00
Zhihe Li 82bbe798fd feat: 🎸 update the tags badge in workers list view (#1326)
* feat: 🎸 update the tags badge in workers list view

✅ Closes: ICU-6035
2022-09-16 14:53:29 -04:00
Dharini JeevaandCameron Perera 346e0d356a chore: 🤖 update quicksetup svg (#1329)
Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2022-09-16 13:02:30 -05:00
Cameron Perera f603c405a7 refactor: 💡 Update Quick Setup resource names (#1328)
* refactor: 💡 Update Quick Setup resource names

✅ Closes: ICU-6094

* refactor: 💡 Fix target quick setup name
2022-09-16 12:17:36 -05:00
Dharini Jeeva 8eeab7e87b Icu 5991 UI add worker filter form field for vault type credential stores (#1318)
* chore: 🤖 add worker_filter to vault cred store
2022-09-14 12:06:34 -07:00
Randall Morey 3d32200cf3 chore: 🤖 disable features (#1317) 2022-09-14 09:49:06 -04:00
Cameron Perera 29d41efade chore: 🤖 Add new flag for vault-worker-filter, ENT/HCP only (#1316)
✅ Closes: ICU-6054
2022-09-13 14:09:10 -07:00
Devon Anderson 8efa3168c8 feat: 🎸 Update worker model (#1313)
* feat: 🎸 Update worker model

Update worker modeel for `release_version` field

✅ Closes: ICU-6044

* refactor: 💡 update mirage factory

Update mirage factory for worker and `release_version`

✅ Closes: ICU-6044

* feat: 🎸 Update detailed worker view (#1315)

Update detailer worker view to include read-only `release_version` field

✅ Closes: ICU-6046

* feat: 🎸 Update workers list-view (#1314)

Update workers list-view to include `release-version`

✅ Closes: ICU-6045
2022-09-13 16:49:48 -04:00
Cameron Perera cd9d3e91e5 refactor: 💡 Add worker_filter to vault credential stores (#1310)
* refactor: 💡 Add worker_filter to vault credential stores

Add worker_filter attribute to vault type credential store model

✅ Closes: ICU-5988

* refactor: 💡 Add worker_filter mirage mock for credential store (#1312)

✅ Closes: ICU-5990
2022-09-13 15:23:28 -05:00
Devon AndersonandZhihe Li 3c49dc1c48 feat: 🎸 Feature flag for oss and hcp binary (#1305)
* feat: 🎸 Feature flag for `oss` and `hcp` binary

Create feature flag for `oss` and `hcp` to change specific input fields
based on binary editions

✅ Closes: ICU

* Update ui/admin/app/components/form/worker/create-worker-led/index.js

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* Update ui/admin/app/components/form/worker/create-worker-led/index.js

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* refactor: 💡 Quick refactor

Refactor `create-worker-led/index.js`, and test.

✅ Closes: ICU-5903

* refactor: 💡 refactor for better readability

Refactor code for better readability

* refactor: 💡 rename filter function

rename array filter function to be more descriptive

✅ Closes: ICU-5903

* changed params name for  `convertCommaSeparatedValuesToArray`

* add ending new line

* Update ui/admin/app/components/form/worker/create-worker-led/index.js

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* refactor: 💡 yaml refactor

yaml refactor

* refactor: 💡 revert en-us.yaml file

revert en-us.yaml file

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2022-09-12 16:04:29 -04:00
Zhihe Li e6767b1e14 Chore/enable yaml formatting (#1307) 2022-09-12 15:17:21 -04:00
Carlos Alcaide Corvo 3347668b41 chore: 🤖 Add feature flags for dev and test environments (#1306) 2022-09-12 15:58:08 +02:00
Zhihe Li 34da192ef9 chore: 🤖 Enable stylistic linting rules (#1298) 2022-09-07 16:21:27 -04:00
Dharini Jeeva d930c3da3a chore: 🤖 enable ssh-target for production (#1302)
* chore: 🤖 enable ssh-target for production
2022-09-07 09:48:29 -07:00
lisbet-alvarez 0a2305bba9 feat: 🎸 Enable Static Credentials flag for Production (#1301)
✅ Closes: ICU-5952
2022-09-06 13:23:02 -07:00
Zhihe Li 86ab7331af fix: 🐛 Fix tag bug from moving where workers list is loaded (#1284)
* fix: 🐛 Fix tag bug from moving where workers list is loaded

* style: 💄 Remove unused import

* refactor: 💡 Use new setting to turn off auto refresh for filter
2022-09-06 13:45:22 -04:00
Dharini Jeeva c351452d71 test: 💍 acceptance tests for injected credentials (#1297)
test: 💍 acceptance tests for injected application credentials
2022-09-02 13:10:27 -07:00
Dharini Jeeva 8952541203 Add injected credentials tab (#1295)
* chore: 🤖 introduce injected application credentials on the UI
2022-09-02 12:29:39 -07:00
Devon Anderson 128b0ff492 refactor: 💡 Add tab navigation to detailed worker view page (#1288)
Added tab navigation to detailed worker view page.

✅ Closes: ICU-5901
2022-09-02 10:48:23 -04:00
Zhihe Li ccf462019b chore: 🤖 Add eol-last rule (#1296)
* chore: 🤖 Add eol-last rule

* style: 💄 Add newlines for core

* style: 💄 Add newlines to EOF in rose

* style: 💄 Add newlines for admin

* style: 💄 Add newlines in desktop templates
2022-09-01 17:43:30 -04:00
Zhihe Li a69d01c9fc Chore/enable quote rule (#1294)
* chore: 🤖 Add quote rule to use single quotes in templates
2022-09-01 16:39:56 -04:00
Randall MoreyandSusmitha Girumala a2e27b09c3 refactor: 💡 add standalone server mocks to auth tests (#1283)
* refactor: 💡 replace ember notify with flash in notify decorator

* refactor: 💡 remove embery-notify and replace last instance

* chore: 🤖 upgrade ember dependencies in anticipation of ember 4

* refactor: 💡 add standalone server mocks to auth tests

Co-authored-by: Susmitha Girumala <susmitha@hashicorp.com>
2022-09-01 15:40:00 -04:00
Randall Morey 3ff89279e6 chore: 🤖 add refreshRouteOnChange option to resource filters (#1289) 2022-09-01 13:27:34 -04:00
Dharini Jeeva 2614b311a1 Icu 5578 - introduce injected application credential on the api (#1269)
* chore: 🤖 include injected cred sources to the target model
2022-09-01 10:07:36 -07:00
Cameron Perera bd0854b0f6 refactor: 💡 update password input field to be a password type (#1291) 2022-08-31 17:26:47 -05:00
Cameron Perera e019b825ac refactor: 💡 update passphrase field to a password text input (#1292)
Update passphrase field to a text input to allow for adding a password
type
2022-08-31 17:08:34 -05:00
Zhihe Li 6fd0301635 chore: 🤖 Remove "ember-template-lint-plugin-prettier" (#1293)
* chore: 🤖 Remove "ember-template-lint-plugin-prettier"
2022-08-31 17:17:14 -04:00
Randall Morey 96cf75bfdb chore: 🤖 upgrade ember dependencies in anticipation of ember 4 (#1280)
* refactor: 💡 replace ember notify with flash in notify decorator

* refactor: 💡 remove embery-notify and replace last instance

* chore: 🤖 upgrade ember dependencies in anticipation of ember 4
2022-08-31 11:41:50 -07:00
Randall Morey 4a6ed0b509 refactor: 💡 replace ember notify with flash in notify decorator (#1272)
* refactor: 💡 replace ember notify with flash in notify decorator

* refactor: 💡 remove embery-notify and replace last instance
2022-08-31 10:24:25 -07:00
Randall MoreyandZhihe Li cde6abd445 refactor: 💡 convert brokered cred IDs array to simple attribute (#1259)
* refactor: 💡 convert brokered cred IDs array to simple attribute

* fix: 🐛 missing test assertion

* fix: 🐛 simplify computed

* refactor: 💡 convert host sources array to simple attribute (#1260)

* refactor: 💡 convert host source IDs array to simple attribute

* fix: 🐛 host source tests

* Refactor role fragment arrays (#1262)

* refactor: 💡 convert grant strings to regular attribute

* refactor: 💡 convert principals array to simple attribute

* Update ui/admin/app/routes/scopes/scope/roles/role.js

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* fix: 🐛 remove unused import

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2022-08-31 09:55:59 -07:00
Cameron Perera 83c7b76f48 refactor: 💡 Update passphrase to private_key_passphrase (#1290)
✅ Closes: ICU-5916
2022-08-30 20:40:31 -05:00
lisbet-alvarezandZhihe Li cb3104a624 test: 💍 Add acceptance tests for deleting an spk credential (#1274)
✅ Closes: ICU-5654

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2022-08-30 13:01:38 -07:00
lisbet-alvarez f1f7be4067 test: 💍 clean-up acceptance test for list-view of credentials (#1278)
✅ Closes: ICU-5650
2022-08-30 12:44:17 -07:00
lisbet-alvarez 0ae2451b9c test: 💍 Add acceptance test for updating an spk credential (#1273)
* test: 💍 Add acceptance test for updating an spk credential

✅ Closes: ICU-5652
2022-08-30 12:20:52 -07:00
Dharini Jeeva 069a864cbb chore: 🤖 add abilities for injected app cred sources (#1285)
* chore: 🤖 add abilities for injected app cred sources
2022-08-30 12:01:59 -07:00
Dharini Jeeva a3337b3771 Add injected application credential support (#1282)
* fix: 🐛 credential application injection translations
2022-08-30 10:52:21 -07:00
Dharini Jeeva 9ee89585ec Remove unused console logs (#1286)
* fix: 🐛 remove unused logs
2022-08-30 09:49:34 -07:00
Devon Anderson 03b603be54 refactor: 💡 Disable read-only fields when editing worker (#1287)
Refactor detailed worker to not hide read-only fields when editing, but
leave them disabled

✅ Closes: ICU-5902
2022-08-30 12:11:19 -04:00
bc7ed3f0ed ICU 5247 detailed worker view and ICU 5248 edit worker view (#1246)
* feat: 🎸 Add list view for workers

✅ Closes: ICU-5251

* feat: 🎸 Add route for worker detail and include links in table

* refactor: 💡 Updated id display in table and fixed worker route

* test: 💍 Add workers list test

* feat: 🎸 Add worker detailed view and edit view

Added worker detailed view and editable form view for name and
description of worker

✅ Closes: ICU-5247 ICU-5248

* refactor: 💡 fixed conflict merge

fixed merge conflicts for scope/workers/worker

✅ Closes: ICU-5247

* Update ui/admin/app/routes/scopes/scope/workers.js

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>

* Update ui/admin/app/templates/scopes/scope/workers/worker/index.hbs

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>

* test: 💍 Test for worker/update-test.js

Created update-test.js and refactored worker/form.hbs for correct
display of last_seen

✅ Closes: ICU-5247

* Update ui/admin/app/routes/scopes/scope/workers.js

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* Update ui/admin/app/templates/scopes/scope/workers/worker/index.hbs

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* Update ui/admin/tests/acceptance/workers/read-test.js

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* refactor: 💡 code refactor and test creation

Refactored code for detailed worker view, created controller for
detailew worker view to display worker name in breadcrumbs, added test
for `delete`, `update`.

✅ Closes: ICU-5247

* refactor: 💡 Refactor test

Refactor update-test.js and clean up code.

✅ Closes: ICU-5247

* refactor: 💡 fixed workers/update-test.js

added local variable for better test coverage for cancel test in
workers/update-test.js

✅ Closes: ICU-5247

* refactor: 💡 fix test

Refactored yaml file for `last_seen.description`

✅ Closes: ICU-5247

* Update ui/admin/app/routes/scopes/scope/workers.js

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* removed `type` from  `<form.textarea/>` component

* Update ui/admin/app/controllers/scopes/scope/workers/worker.js

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* spacing for linter

* refactor: 💡 Refactor test

Refactored `worker/read-test.js` to to test correct authorization

✅ Closes: ICU-5247

* ci: 🎡 Fixed lint

fixed lint

✅ Closes: ICU-5247

* refactor: 💡 Added custom relatvie date to field

Added custom relative date to `last_status_time` input for worker view.

✅ Closes: ICU-5247

* refactor: 💡 refactored yaml file

changed delete dropdown for worker to `actions.delete`

✅ Closes: ICU-5247

* Removed unused services from workers.js

* merge changes from main

* fix lint

* fix lint

* Update index.hbs

lint issues

* refactor: 💡 fixed lint for hbs

fixed linting issues for hbs files

✅ Closes: ICU-5247 ICU-5249

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2022-08-29 10:24:41 -04:00
lisbet-alvarezandZhihe Li 0dff900795 test: 💍 Add acceptance tests for reading an spk credential (#1275)
Acceptance tests for spk type credentials added to read-test.js

✅ Closes: ICU-5653

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2022-08-26 09:54:10 -07:00
Devon AndersonandZhihe Li a3517e53a8 chore: 🤖 create relative date helper (#1276)
* chore: 🤖 create relative date helper

Create a relative date helper that outputs "time" ago format.

✅ Closes: ICU-5847

* Update addons/core/addon/helpers/relative-datetime-live.js

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* refactor: 💡 refactor test for relative-date-helper

refactor test for relative-datetime-live helper

✅ Closes: ICU-5847

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2022-08-26 12:22:24 -04:00
Zhihe Li 3130831ae0 feat: 🎸 Add create worker page (#1244)
* feat: 🎸 Add create worker page

✅ Closes: ICU-5246
2022-08-26 11:50:53 -04:00
Zhihe Li dd0d37241c feat: 🎸 Add code editor to api response display (#1271)
✅ Closes: ICU-5767
2022-08-26 11:01:23 -04:00
Cameron Perera 9a10b68bbe refactor: 💡 update credential serializer to delete password (#1277)
* refactor: 💡 update credential serializer to delete password

update credential serializer to delete password attribute if empty
string or null allowing the user to update just the username if needed.

✅ Closes: ICU-5731

* refactor: 💡 update serializer comments and test names
2022-08-25 17:02:48 -05:00
Zhihe Li 30b9f65251 chore: 🤖 Update electron to v16 (#1267)
✅ Closes: ICU-4018
2022-08-25 12:04:59 -04:00
fb981c02ea Icu 5651 create spk type (#1266)
Add functionality for creating a ssh private key credential and add
corresponding acceptance tests.

✅ Closes: ICU-5651

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
Co-authored-by: Randall Morey <randall@randallmorey.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2022-08-24 15:50:48 -07:00
Zhihe Li 1ee83dd1e6 chore: 🤖 Cleanup rose (#1270)
* refactor: 💡 Clean up use of classnames in rose

* fix: 🐛 Fix form action story using wrong disabled field
2022-08-22 16:17:06 -04:00
Dharini Jeeva 359614517e fix: 🐛 add translation string (#1268) 2022-08-18 15:50:53 -07:00
Dharini Jeeva 9a8665a314 Refactor credential sources to brokered credential sources (#1264)
* chore: 🤖 refactor credential sources to brokered credential source
2022-08-18 09:11:38 -07:00
Dharini Jeeva f4f7c0e343 fix: 🐛 disable scope (#1265) 2022-08-18 08:23:43 -07:00
lisbet-alvarezandCameron Perera dae5174d2f feat: 🎸 Update the credentials route to support both types (#1263)
Add query param to the credential route in order to support the new ssh
private key type

✅ Closes: ICU-5649

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2022-08-17 14:48:52 -07:00
Cameron Perera 53eef5caeb feat: 🎸 Add SSH Private Key mirage support (#1261)
* feat: 🎸 Add SSH Private Key mirage support

Update mirage to mock SSH Private key credential types

✅ Closes: ICU-5647

* refactor: 💡 remove default case in credential mirage mock
2022-08-17 13:20:21 -05:00
Cameron Perera 50038cdf85 Icu 5646 serializer (#1257)
* feat: 🎸 Update Credential Serializer

Add support for SSH Private Key credentials

✅ Closes: ICU-5646

* test: 💍 Add normalize test for ssh private key credentials

* refactor: 💡 remove deletion of hmac attributes in serializer
2022-08-16 14:35:33 -05:00
Randall Morey 7386b2c9ed refactor: 💡 deauth should delete the auth token (#1256) 2022-08-15 11:22:27 -07:00
Dharini Jeeva e3324ad64a chore: 🤖 rename application_credentials_sources_ids to brokered (#1255) 2022-08-15 09:48:12 -07:00
Cameron Perera 39c0835a99 feat: 🎸 Update credential model with ssh private key attributes (#1254)
✅ Closes: ICU-5645
2022-08-12 15:56:19 -05:00
lisbet-alvarez 29e3e8b843 feat: 🎸 Enable SSH Targets for development (#1239)
Enable SSH Targets for development ENV. Already enabled for testing ENV.

✅ Closes: ICU-5553
2022-08-12 10:33:05 -07:00
lisbet-alvarez 72b7b85ad1 chore: 🤖 remove filter feature flag (#1252)
✅ Closes: ICU-5599
2022-08-12 10:02:05 -07:00
Dharini Jeeva 9a1d1225ca chore: 🤖 remove unused oidc-account-crud feature flag (#1249) 2022-08-12 09:43:19 -07:00
Dharini Jeeva 33728a6496 chore: 🤖 remove managed_groups feature flag (#1253) 2022-08-12 09:27:02 -07:00
lisbet-alvarez bf2a6aeb6a chore: 🤖 remove oidc-crud feature flag (#1248)
* chore: 🤖 remove oidc-crud feature flag

✅ Closes: ICU-5597

* Update environment.js to resolve confilicts
2022-08-11 16:01:47 -07:00
Dharini Jeeva 746426fc82 chore: 🤖 cleanup feature flags - OIDC (#1245)
* chore: 🤖 cleanup OIDC feature flag
2022-08-11 15:37:44 -07:00
Randall Morey d8b5056094 fix: 🐛 fixes host set attributes field types (#1251) 2022-08-11 16:10:42 -04:00
lisbet-alvarez bdc2238f17 chore: 🤖 add got package to resolutions (#1243) 2022-08-11 12:41:34 -07:00
Zhihe Li 1842631056 fix: 🐛 Add feature flag for BYOW (#1250) 2022-08-11 13:47:22 -04:00
lisbet-alvarez 6f2a04d4c6 chore: 🤖 add async to resolutions (#1242) 2022-08-10 12:28:55 -07:00
Randall Morey e0b59b7d8b fix: 🐛 icu-5258 filter field is not sent in payload (#1238) 2022-08-10 11:58:12 -07:00
lisbet-alvarez fbf6b2c201 chore: 🤖 chore(deps): upgrade got package version (#1241)
add got to resolutions
2022-08-10 10:41:39 -07:00
lisbet-alvarez 7b212efcf2 chore: 🤖 Add terser to resolutions (#1237)
* chore: 🤖 bump terser from 4.8.0 to 4.8.1

* chore: 🤖 Update all terser dependency instances to 5.14.2
2022-08-10 10:15:13 -07:00
Dharini Jeeva ecb34d7427 chore: 🤖 dependency update (#1240) 2022-08-10 09:46:48 -07:00
Zhihe Li 4ab7304411 feat: 🎸 Added list view for workers (#1234)
* feat: 🎸 Add list view for workers

✅ Closes: ICU-5251
2022-08-09 16:12:56 -04:00
Devon AndersonandDharini Jeeva 62077d3c25 feat: 🎸 Add worker serializer (#1230)
* feat: 🎸 Add worker serializer

Add worker serializer that focus' on `config_tags.type` and
`canonical_tags.type`.
[API](https://docs.google.com/document/d/1G-lfl8gk9NfoKFImSpHb90E3xC3CSEVDwVy3bJ9eOhA/edit#heading=h.9e06o4b8etpi)

✅ Closes: ICU-5241

* refactor: 💡 refactored `models/worker.js`

Because `canonical_tags` and `config_tags` are `readOnly` attributes, we
could use `attr` decorator instead of `fragment`.

✅ Closes: ICU-5241

* refactored `model/worker.js and deleted un-needed files

* refactor: 💡 Refactored model/worker.js and created test

Refactored model/worker.js to include custom method for POST route for
adding new worker.

BREAKING CHANGE: 🧨 no

✅ Closes: ICU-5241

* refactor: 💡 Refactored custom POST route method for worker

Refactored custom method on `model/worker.js` to include serialization
for `worker_genrated_auth_token`

BREAKING CHANGE: 🧨 no

✅ Closes: ICU-5241

* refactor: 💡 Refactor test

Refactor model/worker-test.js and serializers/worker.js

BREAKING CHANGE: 🧨 no

✅ Closes: ICU-5241

* Update addons/api/addon/serializers/worker.js

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>

* update worker.js documentation block

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2022-08-09 15:34:42 -04:00
Dharini Jeeva 1f0baceb5e Icu 5476 refactor target model serializer and mirage (#1235)
chore: 🤖 refactor target model to support credentials
2022-08-08 09:21:07 -07:00
Cameron Perera 2cda4f639e refactor: 💡 update onSubmit for add-credential-sources (#1233)
Remove submit action from form component and pass selected credential
IDs directly to the submit method
2022-08-04 14:53:44 -05:00
Cameron Perera 9f09f01f36 Icu 5253 add query to include credentials (#1227)
* refactor: 💡 add-credential-sources to include credentials

* refactor: 💡 update add-credential-sources template

Update to how AddCredentialSources form is rendered in the template

✅ Closes: ICU-5253

* refactor: 💡 Update add-credential-sources method signatures

* refactor: 💡 change how add-credential-source form is rendered

* refactor: 💡 Remove duplicate add-credential-sources message

Remove the duplicate No Credential Credential Sources message from
add-credential-sources form

* refactor: 💡 Move filter logic to controller

Move credential source filter logic from route to controller for
add-credential-sources

* test: 💍 Verify all available credential sources are listed
2022-08-02 11:55:26 -05:00
dependabot[bot]andRandall Morey c8a76078ec chore(deps): bump json-pointer from 0.6.1 to 0.6.2 (#1224)
Bumps [json-pointer](https://github.com/manuelstofer/json-pointer) from 0.6.1 to 0.6.2.
- [Release notes](https://github.com/manuelstofer/json-pointer/releases)
- [Commits](https://github.com/manuelstofer/json-pointer/commits)

---
updated-dependencies:
- dependency-name: json-pointer
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-08-01 14:35:23 -07:00
Zhihe Li 96b0ae3b06 Icu 5245 add workers tab to navigation and initial overview (#1229)
* feat: 🎸 Add initial workers UI navigation page

✅ Closes: ICU-5245
2022-08-01 16:04:41 -04:00
Cameron Perera bc6f849270 fix: 🐛 Fix routing issue for new credential stores (#1232) 2022-08-01 14:41:24 -05:00
Carlos Alcaide Corvo 2fcfab7c1c refactor: 💡 Deprecate faker to use @faker-js (#1223) 2022-08-01 14:25:07 -04:00
lisbet-alvarez 210296f298 refactor: 💡 Remove helper text for Username & Password (#1231)
Remove helper text for username and password fields in Credential form
as requested in a previous conversation.

✅ Closes: ICU-5459
2022-08-01 10:47:36 -07:00
Randall Morey c675f790ef fix: 🐛 change password route should not error (#1228) 2022-07-29 15:18:57 -07:00
Zhihe Li b722fa361b * feat: 🎸 Add code-editor component (#1207)
* feat: 🎸 Add code-editor component

Added code editor component which was taken from HCP, tweaked styles and
imports to use boundary assets

✅ Closes: ICU-5167
2022-07-29 17:18:07 -04:00
Randall Morey 40184006cd chore: 🤖 introduce hcp edition for naming consistency (#1225) 2022-07-29 10:10:40 -07:00
Randall Morey ec56d2fbbe fix: 🐛 role discard should not error (#1226) 2022-07-28 17:49:51 -07:00
Randall Morey bfc433dc38 feat: 🎸 add scope filtering to role/add-principals route (#1211)
* feat: 🎸 add scope filtering to role/add-principals route

* fix: 🐛 remove unnecessary helper

* feat: 🎸 add scope filtering to group add-members route
2022-07-28 17:34:03 -07:00
lisbet-alvarez f6e1fb0e3b Icu 5330 credentials crudl tests (#1219)
* test: 💍 Add credentials CRUDL tests

* fix: 🐛 Deleted empty files

* test: 💍 Add missing tests for credentials

* test: 💍 Revise tests in read-test.js

✅ Closes: ICU-5330
2022-07-28 15:34:03 -07:00
Zhihe Li 2b58e82d6d feat: 🎸 Add worker mirage mocks (#1217)
✅ Closes: ICU-5240
2022-07-28 14:57:53 -04:00
Zhihe Li a84e8c693e feat: 🎸 Add worker model (#1213)
✅ Closes: ICU-5239
2022-07-28 14:33:23 -04:00
Michele Degges dcf24478bd [CI-only] Add build job for HCPb variant (#1221)
This new job mirrors the enterprise build job, but lets us keep the existing logic laid out in https://github.com/hashicorp/boundary/blob/main/.github/workflows/build.yml#L136 to download the right UI artifacts based on the boundary variant/edition.
2022-07-28 08:39:01 -07:00
Carlos Alcaide Corvo 04d14005c0 Fix runtime-settings to not access directly the private variable (#1220) 2022-07-27 11:14:59 -07:00
Carlos Alcaide Corvo 4fcb005a1f Refactor origin to cluster (#1210) 2022-07-27 10:25:01 -07:00
lisbet-alvarez 40ba4286d3 refactor: 💡 Edit a credentail (#1218)
Password input field is now only viewable after user clicks on "Edit
Form"

✅ Closes: ICU-5180
2022-07-27 09:20:03 -07:00
Dharini Jeeva 409e68de1e chore: 🤖 add delete and patch mirage request for credential (#1216) 2022-07-26 13:35:04 -07:00
Cameron Perera 32ba330889 fix: 🐛 spelling error in getting started on desktop redirect (#1215) 2022-07-26 13:39:39 -05:00
lisbet-alvarez f00da3d8d7 test: 💍 credential store CRUDL tests (#1212)
Revised acceptance tests to reflect two types of credential stores

✅ Closes: ICU-5329

* test: 💍 credential store CRUDL tests

* test: 💍 small addition to type of cred. store

* test: 💍 Add missing vault cred. store type tests

* fix: 🐛 rename variable in read-test.js
2022-07-26 10:02:29 -07:00
Cameron Perera f51c56b4a1 feat: 🎸 Add doc link to Credential screens (#1214)
✅ Closes: ICU-5317
2022-07-26 11:04:01 -05:00
Cameron Perera d996d085a1 Icu 5335 add doc link for credential store screens (#1208)
* feat: 🎸 Add doc links to Credential Store screens

✅ Closes: ICU-5335

* test: 💍 Add tests for Credential Store doc links
2022-07-25 12:03:21 -05:00
9274849622 feat: 🎸 display credentials for static credential store (#1205)
* feat: 🎸 Create Credential Model in API

✅ Closes: ICU-5229

* feat: 🎸 update credential model

Add attributes to credential model

✅ Closes: ICU-5229

* feat: 🎸 no verify

✅ Closes: ICU-5230

* feat: 🎸 Add credential serializer and tests

✅ Closes: ICU-5230

* feat: 🎸 Add credential serializer

Credential serializer along with unit tests were added.

✅ Closes: ICU-5230

* feat: 🎸 Credential serializer & unit tests

✅ Closes: ICU-5230

* chore: 🤖 lint

* chore: 🤖 lint

* chore: 🤖 lint

* feat: 🎸 display credentials for static credential store

* chore: 🤖 update translated string

* feat: 🎸 create a credential

* fix: 🐛 add dropdown link for create new credential

* Update new.js

* Update credentials.js

* chore: 🤖 remove the commented block

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
Co-authored-by: Lisbet Alvarez <lisbet.alvarez@hashicorp.com>
Co-authored-by: lisbet-alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
2022-07-25 11:42:34 -05:00
Cameron Perera ae0ce2bfad fix: 🐛 Add missing mirage config urls for credentials (#1209) 2022-07-22 12:29:53 -05:00
lisbet-alvarezandCameron Perera 27a676774c Icu 5232 credential mirage mocks (#1204)
* feat: 🎸 Add mirage mocks for credential

✅ Closes: ICU-5232

* chore: 🤖 Update Credential Store factory to handle credentials

✅ Closes: ICU-5232

* feat: 🎸 Added mirage mocks for credential

✅ Closes: ICU-5232

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2022-07-21 13:48:16 -07:00
Randall MoreyandDharini Jeeva 379609217b fix: 🐛 roles and principals on projects should be visible (#1202)
* fix: 🐛 roles and principals on projects should be visible

* Update ui/admin/app/routes/scopes/scope/roles/role/index.js

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2022-07-21 13:09:03 -07:00
Dharini Jeeva b31a513ec1 Create static credentials tab (#1203)
Create static credentials tab  (#1203)
2022-07-21 10:03:13 -07:00
lisbet-alvarezandCameron Perera 821b9b56a7 Icu 5230 credential serializer (#1200)
* feat: 🎸 Create Credential Model in API

✅ Closes: ICU-5229

* feat: 🎸 update credential model

Add attributes to credential model

✅ Closes: ICU-5229

* feat: 🎸 no verify

✅ Closes: ICU-5230

* feat: 🎸 Add credential serializer and tests

✅ Closes: ICU-5230

* feat: 🎸 Add credential serializer

Credential serializer along with unit tests were added.

✅ Closes: ICU-5230

* feat: 🎸 Credential serializer & unit tests

✅ Closes: ICU-5230

* fix: 🐛 Resolved commit conflicts

✅ Closes: ICU-5230

* fix: 🐛 deleted password_hmac from inside the serializer

✅ Closes: ICU-5230

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2022-07-20 12:34:18 -07:00
Randall Morey c1e1b42672 Feature cross scope role principals (#1199)
* chore: 🤖 add scope column to role principals and group members

* chore: 🤖 add recursion and filtering to user and group mocks

* feat: 🎸 expose groups and roles on projects

* feat: 🎸 enable cross-scope assignment of group members

* chore: 🤖 query group members in a single call via filtering

* chore: 🤖 query role prinicipals in two calls via filtering

* chore: 🤖 use const instead of let

* feat: 🎸 support adding cross-scope principals to roles
2022-07-19 15:18:30 -07:00
lisbet-alvarezandCameron Perera bd0189cf10 Icu 5229 credential model (#1197)
* feat: 🎸 Create Credential Model in API

✅ Closes: ICU-5229

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2022-07-19 13:02:04 -07:00
Randall Morey ca1b2ce278 Chore optimize iam queries (#1198)
* chore: 🤖 add scope column to role principals and group members

* chore: 🤖 add recursion and filtering to user and group mocks

* feat: 🎸 expose groups and roles on projects

* feat: 🎸 enable cross-scope assignment of group members

* chore: 🤖 query group members in a single call via filtering

* chore: 🤖 query role prinicipals in two calls via filtering

* chore: 🤖 use const instead of let
2022-07-19 12:11:16 -07:00
Dharini Jeeva bc76d49729 create static credential store form and route updates (#1195)
* chore: 🤖 static cred store support to route and templates
2022-07-19 09:29:43 -07:00
Randall Morey 94530cec9c Feature cross scope group members (#1196)
* chore: 🤖 add scope column to role principals and group members

* chore: 🤖 add recursion and filtering to user and group mocks

* feat: 🎸 expose groups and roles on projects

* feat: 🎸 enable cross-scope assignment of group members
2022-07-18 16:36:43 -07:00
Randall Morey 31cf696902 Feature expose roles groups in projects - ICU-4512 (#1192)
* chore: 🤖 add scope column to role principals and group members

* chore: 🤖 add recursion and filtering to user and group mocks

* feat: 🎸 expose groups and roles on projects
2022-07-18 16:15:51 -07:00
Randall Morey c2083aefab chore: 🤖 add recursion and filtering to user and group mocks - ICU-4528 (#1190)
* chore: 🤖 add scope column to role principals and group members

* chore: 🤖 add recursion and filtering to user and group mocks
2022-07-18 15:53:34 -07:00
Randall MoreyandCarlos Alcaide Corvo 817d2a44e1 chore: 🤖 add scope column to role principals and group members (#1184)
Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
2022-07-18 14:26:26 -07:00
Randall Morey bdabcc119e Refactor base scope fragment (#1166)
* refactor: 💡 migrate managed-group off fragments

* refactor: 💡 migrate credential-store off fragments

* refactor: 💡 migrate credential-library off fragments

* refactor: 💡 migrate account off fragments

* refactor: 💡 convert base model scope field to simple attr

* fix: 🐛 skip broken test
2022-07-18 11:30:53 -07:00
Dharini Jeeva b6a811cbbd fix: 🐛 filter out scopes with no auth methods (#1115)
* fix: 🐛 filter out scopes with no authenticatable auth methods
2022-07-18 09:08:09 -07:00
Dharini Jeeva 6c3e5ba4a8 chore: 🤖 add static credential store support (#1191)
* chore: 🤖 add static credential store support to the API layer
2022-07-15 13:24:04 -07:00
lisbet-alvarez b18f21e6f9 feat: 🎸 Read a credential store (#1193)
This change includes making static type credential stores clickable when
listing all credential stores, along with view the individual credential
store.

✅ Closes: ICU-5173
2022-07-15 12:39:45 -07:00
lisbet-alvarezandCameron Perera ed7e24b328 refactor: 💡 existing vault form field to radio group (#1189)
Refactored existing vault form field to use radio card instead. This
change is seen on details tab of a static credential store.

✅ Closes: ICU-5171

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2022-07-14 15:53:12 -07:00
Carlos Alcaide Corvo 66d115ab06 fix: 🐛 Add Hawk to resolutions (#1186) 2022-07-14 10:29:25 -07:00
Cameron Perera 9ad8eb93c7 refactor: 💡 Remove credential-store feature flag references (#1188) 2022-07-14 09:42:09 -05:00
lisbet-alvarez 970101d5dc feat: 🎸 Added the static-credentials feature flag (#1187)
The static-credentials feature flag was added and set to true only for
dev and test modes.

✅ Closes: ICU-5203
2022-07-13 14:11:02 -07:00
Cameron PereraandDharini Jeeva 985566d8eb docs: ✏️ Create README for translations (#1182)
✅ Closes: ICU-3872

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2022-07-13 11:17:13 -05:00
Carlos Alcaide Corvo 7234a3841a fix: 🐛 Add shell-quote to resolutions (#1185) 2022-07-12 14:55:31 -07:00
Dharini Jeeva 28c9e600aa Update content security (#1173)
* chore: 🤖 upgrade ember content security policy
2022-07-12 10:12:06 -07:00
Carlos Alcaide Corvo 163bbc9fb8 refactor: 💡 Refactor default values for target creation (#1180) 2022-07-12 08:36:35 -07:00
Carlos Alcaide Corvo b54e68cb86 chore: 🤖 Update ember-auto-import (#1178) 2022-07-12 08:09:49 -07:00
78585d999b feat: 🎸 switch to new token type parameter (#1082)
Boundary is deprecating the use of the token_type
parameter to the Authenticate endpoint, instead
replacing it with the new type parameter.

See https://github.com/hashicorp/boundary/commit/80b2c9230fa84605d9aaf7c862f780b50690a36e
for more context.

Co-authored-by: Randall Morey <randall@randallmorey.com>
Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
2022-07-11 16:39:20 -07:00
Carlos Alcaide Corvo ef9513fea9 fix: 🐛 Fix lock file discrepancy (#1183) 2022-07-11 14:47:04 -07:00
Dharini Jeeva 92fdacb635 test: 💍 onboarding tests (#1181) 2022-07-11 10:47:26 -07:00
Carlos Alcaide Corvo d16c50e33f chore: 🤖 Update ember-cli (#1176) 2022-07-11 09:49:50 -07:00
Zhihe Li 22e8971a5b chore: 🤖 Update git hook to not use commitizen on merges (#1177) 2022-07-07 15:58:39 -04:00
Carlos Alcaide Corvo f5c183a0bd chore: 🤖 Update Sinon to v14 (#1175) 2022-07-07 11:59:31 -07:00
Carlos Alcaide Corvo 49303469cb fix: 🐛 Fix ember-electron incorrect per dep (#1174) 2022-07-07 11:38:43 -07:00
Carlos Alcaide Corvo 6f8afbb7af Chore update eslint and plugins update (#1171) 2022-07-07 11:18:51 -07:00
Carlos Alcaide Corvo 923526ad26 chore: 🤖 Update electron to v15 (#1172) 2022-07-07 11:03:50 -07:00
Dharini Jeeva c21b8fdb64 chore: 🤖 update changelog (#1170)
* chore: 🤖 update changelog and bump up the binary version to 0.9.1
2022-07-06 13:13:57 -07:00
Carlos Alcaide CorvoandRandall Morey 60005f0233 chore: 🤖 Update @babel/plugin-proposal-decorators (#1157)
Update @babel/plugin-proposal-decorators

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-06-30 08:52:07 -04:00
Randall Morey da89e2f82e fix: 🐛 unable to filter for terminated sessions (#1169)
* fix: 🐛 unable to filter for terminated sessions

* fix: 🐛 reenable sessions mocks
2022-06-29 20:42:12 -04:00
Carlos Alcaide CorvoandRandall Morey c9d6f37343 chore: 🤖 Update @ember/test-helpers (#1159)
Update @ember/test-helpers

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-06-29 17:35:17 -04:00
Carlos Alcaide CorvoandRandall Morey 85e4b46821 Chore update doctoc (#1165)
* chore: 🤖 Update doc toc

Update doc toc

* chore: 🤖 Fix doctoc within core

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-06-29 16:26:36 -04:00
Carlos Alcaide CorvoandRandall Morey d464419e47 chore: 🤖 Update Cross OS (#1164)
Update Cross OS

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-06-29 15:28:46 -04:00
Carlos Alcaide CorvoandRandall Morey 021803942f chore: 🤖 Update babel-loader (#1163)
Update babel-loader

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-06-29 15:10:41 -04:00
Randall Morey eeba8dceb6 fix: 🐛 merge conflict in yarn.lock (#1168) 2022-06-29 14:10:59 -04:00
Carlos Alcaide CorvoandRandall Morey 8764633111 chore: 🤖 Update @hashicorp/flight-icons (#1162)
Update @hashicorp/flight-icons

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-06-29 13:00:27 -04:00
Carlos Alcaide CorvoandRandall Morey 9becadd3f1 chore: 🤖 Update @glimmer (#1161)
Update @glimmer

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-06-29 12:08:00 -04:00
Carlos Alcaide CorvoandRandall Morey 9f45a9a955 chore: 🤖 Update @ember/render-modifiers (#1158)
Update @ember/render-modifiers

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-06-29 11:34:31 -04:00
Carlos Alcaide CorvoandRandall Morey 51b94f7ac8 Chore update babel eslint parser (#1155)
* chore: 🤖 Fix merging conflicts

* chore: 🤖 Fix merging conflicts

Co-authored-by: Randall Morey <randall@randallmorey.com>
2022-06-29 10:51:41 -04:00
Randall Morey 890cfe5168 Refactor attributes fragments (#1156)
* refactor: 💡 migrate managed-group off fragments

* refactor: 💡 migrate credential-store off fragments

* refactor: 💡 migrate credential-library off fragments

* refactor: 💡 migrate account off fragments
2022-06-28 19:30:26 -04:00
Dharini Jeeva fe225653ec fix: 🐛 overflow dropdown ui issue (#1160) 2022-06-28 13:13:09 -07:00
Carlos Alcaide Corvo dce7447880 chore: 🤖 Upgrade @babel/core (#1153)
Upgrade @babel/core
2022-06-28 11:08:16 -07:00
Carlos Alcaide Corvo 330c3de256 Chore upgrade desktop dependencies 2 (#1152) 2022-06-28 10:27:47 -07:00
Carlos Alcaide Corvo 2d15a62990 fix: 🐛 Lock file discrepancy (#1154)
Lock file discrepancy
2022-06-27 14:38:51 -07:00
Zhihe Li 62af6e2f6e Use precommit hooks (#1150)
* chore: 🤖 Add husky and hooks

* chore: 🤖 Add lint staged for fixing lint issues

* chore: 🤖 Use prettier and disable conflicting prettier rules

* docs: ✏️ Update commit documentation in README
2022-06-27 14:35:52 -04:00
Carlos Alcaide Corvo f50acc9913 Chore upgrade desktop dependencies (#1151) 2022-06-27 09:33:10 -07:00
1933 changed files with 45118 additions and 18508 deletions

No files matched your search

+3
View File
@@ -1,3 +1,6 @@
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: MPL-2.0
contact_links: contact_links:
- name: Ask a question - name: Ask a question
url: https://discuss.hashicorp.com/c/boundary url: https://discuss.hashicorp.com/c/boundary
+3
View File
@@ -1,3 +1,6 @@
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: MPL-2.0
addons: addons:
- addons/**/* - addons/**/*
+40 -19
View File
@@ -9,25 +9,25 @@ jobs:
name: Install dependencies name: Install dependencies
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- uses: actions/cache@v3 - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
id: node-modules-cache id: node-modules-cache
with: with:
path: '**/node_modules' path: '**/node_modules'
key: node-modules-${{ hashFiles('**/yarn.lock') }} key: node-modules-${{ hashFiles('**/yarn.lock') }}
restore-keys: | restore-keys: |
node-modules- node-modules-
- uses: actions/setup-node@v3 - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
with: with:
node-version: '16.x' node-version: 16
- run: yarn install - run: yarn install
build-admin-ui-oss: build-admin-ui-oss:
name: Build Admin UI OSS name: Build Admin UI OSS
needs: [dependencies] needs: [dependencies]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- uses: actions/cache@v3 - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
id: node-modules-cache id: node-modules-cache
with: with:
path: '**/node_modules' path: '**/node_modules'
@@ -35,18 +35,17 @@ jobs:
restore-keys: | restore-keys: |
node-modules- node-modules-
- name: Build - name: Build
uses: actions/setup-node@v3 uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
with: with:
node-version: '16.x' node-version: 16
if: steps.node-modules-cache.outputs.cache-hit != 'true'
- run: yarn run build:ui:admin:oss - run: yarn run build:ui:admin:oss
- name: Upload artifact admin-ui - name: Upload artifact admin-ui
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
with: with:
name: admin-ui name: admin-ui
path: ./ui/admin/dist/ path: ./ui/admin/dist/
- name: Upload artifact Admin UI OSS - name: Upload artifact OSS admin UI
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
with: with:
name: admin-ui-oss name: admin-ui-oss
path: ./ui/admin/dist/ path: ./ui/admin/dist/
@@ -55,8 +54,8 @@ jobs:
needs: [dependencies] needs: [dependencies]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- uses: actions/cache@v3 - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
id: node-modules-cache id: node-modules-cache
with: with:
path: '**/node_modules' path: '**/node_modules'
@@ -64,13 +63,35 @@ jobs:
restore-keys: | restore-keys: |
node-modules- node-modules-
- name: Build - name: Build
uses: actions/setup-node@v3 uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
with: with:
node-version: '16.x' node-version: 16
if: steps.node-modules-cache.outputs.cache-hit != 'true'
- run: yarn run build:ui:admin:enterprise - run: yarn run build:ui:admin:enterprise
- name: Upload artifact Admin UI Enterprise - name: Upload artifact enterprise admin UI
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
with: with:
name: admin-ui-ent name: admin-ui-ent
path: ./ui/admin/dist/ path: ./ui/admin/dist/
build-admin-ui-hcp:
name: Build Admin UI HCP
needs: [dependencies]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
id: node-modules-cache
with:
path: '**/node_modules'
key: node-modules-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
node-modules-
- name: Build
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
with:
node-version: 16
- run: yarn run build:ui:admin:hcp
- name: Upload artifact HCP admin UI
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
with:
name: admin-ui-hcp
path: ./ui/admin/dist/
+4 -4
View File
@@ -30,7 +30,7 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
with: with:
# We must fetch at least the immediate parents so that if this is # We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head. # a pull request then we can checkout the head.
@@ -43,7 +43,7 @@ jobs:
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v1 uses: github/codeql-action/init@9a866ed4524fc3422c3af1e446dab8efa3503411 # codeql-bundle-20230418
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # If you wish to specify custom queries, you can do so here or in a config file.
@@ -54,7 +54,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below) # If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@v1 uses: github/codeql-action/autobuild@9a866ed4524fc3422c3af1e446dab8efa3503411 # codeql-bundle-20230418
# ℹ️ Command-line programs to run using the OS shell. # ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl # 📚 https://git.io/JvXDl
@@ -68,4 +68,4 @@ jobs:
# make release # make release
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1 uses: github/codeql-action/analyze@9a866ed4524fc3422c3af1e446dab8efa3503411 # codeql-bundle-20230418
+6 -6
View File
@@ -30,7 +30,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.JIRA_SYNC_GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.JIRA_SYNC_GITHUB_TOKEN }}
- name: Login - name: Login
uses: atlassian/gajira-login@v2.0.0 uses: atlassian/gajira-login@45fd029b9f1d6d8926c6f04175aa80c0e42c9026 # v3.0.1
env: env:
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
@@ -48,7 +48,7 @@ jobs:
- name: Create ticket - name: Create ticket
if: github.event.action == 'opened' && !steps.boundary-team-role.outputs.role if: github.event.action == 'opened' && !steps.boundary-team-role.outputs.role
uses: tomhjp/gh-action-jira-create@v0.1.0 uses: tomhjp/gh-action-jira-create@3ed1789cad3521292e591a7cfa703215ec1348bf # v0.2.1
with: with:
project: ICU project: ICU
issuetype: "GH Issue" issuetype: "GH Issue"
@@ -61,28 +61,28 @@ jobs:
- name: Search - name: Search
if: github.event.action != 'opened' if: github.event.action != 'opened'
id: search id: search
uses: tomhjp/gh-action-jira-search@v0.2.1 uses: tomhjp/gh-action-jira-search@04700b457f317c3e341ce90da5a3ff4ce058f2fa # v0.2.2
with: with:
# cf[10089] is Issue Link custom field # cf[10089] is Issue Link custom field
jql: 'issuetype = "GH Issue" and cf[10089]="${{ github.event.issue.html_url || github.event.pull_request.html_url }}"' jql: 'issuetype = "GH Issue" and cf[10089]="${{ github.event.issue.html_url || github.event.pull_request.html_url }}"'
- name: Sync comment - name: Sync comment
if: github.event.action == 'created' && steps.search.outputs.issue if: github.event.action == 'created' && steps.search.outputs.issue
uses: atlassian/gajira-comment@v2.0.2 uses: atlassian/gajira-comment@v2.0.2 # TSCCR: no entry for repository "atlassian/gajira-comment"
with: with:
issue: ${{ steps.search.outputs.issue }} issue: ${{ steps.search.outputs.issue }}
comment: "${{ github.actor }} ${{ github.event.review.state || 'commented' }}:\n\n${{ github.event.comment.body || github.event.review.body }}\n\n${{ github.event.comment.html_url || github.event.review.html_url }}" comment: "${{ github.actor }} ${{ github.event.review.state || 'commented' }}:\n\n${{ github.event.comment.body || github.event.review.body }}\n\n${{ github.event.comment.html_url || github.event.review.html_url }}"
- name: Close ticket - name: Close ticket
if: (github.event.action == 'closed' || github.event.action == 'deleted') && steps.search.outputs.issue if: (github.event.action == 'closed' || github.event.action == 'deleted') && steps.search.outputs.issue
uses: atlassian/gajira-transition@v2.0.1 uses: atlassian/gajira-transition@38fc9cd61b03d6a53dd35fcccda172fe04b36de3 # v3.0.1
with: with:
issue: ${{ steps.search.outputs.issue }} issue: ${{ steps.search.outputs.issue }}
transition: Done transition: Done
- name: Reopen ticket - name: Reopen ticket
if: github.event.action == 'reopened' && steps.search.outputs.issue if: github.event.action == 'reopened' && steps.search.outputs.issue
uses: atlassian/gajira-transition@v2.0.1 uses: atlassian/gajira-transition@38fc9cd61b03d6a53dd35fcccda172fe04b36de3 # v3.0.1
with: with:
issue: ${{ steps.search.outputs.issue }} issue: ${{ steps.search.outputs.issue }}
transition: "To Do" transition: "To Do"
+1 -1
View File
@@ -6,6 +6,6 @@ jobs:
triage: triage:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/labeler@main - uses: actions/labeler@ba790c862c380240c6d5e7427be5ace9a05c754b # v4.0.3
with: with:
repo-token: "${{ secrets.GITHUB_TOKEN }}" repo-token: "${{ secrets.GITHUB_TOKEN }}"
+16 -19
View File
@@ -6,17 +6,17 @@ jobs:
name: Install dependencies name: Install dependencies
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- uses: actions/cache@v3 - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
id: node-modules-cache id: node-modules-cache
with: with:
path: '**/node_modules' path: '**/node_modules'
key: node-modules-${{ hashFiles('**/yarn.lock') }} key: node-modules-${{ hashFiles('**/yarn.lock') }}
restore-keys: | restore-keys: |
node-modules- node-modules-
- uses: actions/setup-node@v3 - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
with: with:
node-version: '16.x' node-version: 16
- run: yarn install - run: yarn install
compliance: compliance:
@@ -24,18 +24,17 @@ jobs:
needs: [dependencies] needs: [dependencies]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- uses: actions/cache@v3 - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
id: node-modules-cache id: node-modules-cache
with: with:
path: '**/node_modules' path: '**/node_modules'
key: node-modules-${{ hashFiles('**/yarn.lock') }} key: node-modules-${{ hashFiles('**/yarn.lock') }}
restore-keys: | restore-keys: |
node-modules- node-modules-
- uses: actions/setup-node@v3 - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
with: with:
node-version: '16.x' node-version: 16
if: steps.node-modules-cache.outputs.cache-hit != 'true'
- run: yarn run compliance:licenses - run: yarn run compliance:licenses
lint: lint:
@@ -44,18 +43,17 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5 timeout-minutes: 5
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- uses: actions/cache@v3 - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
id: node-modules-cache id: node-modules-cache
with: with:
path: '**/node_modules' path: '**/node_modules'
key: node-modules-${{ hashFiles('**/yarn.lock') }} key: node-modules-${{ hashFiles('**/yarn.lock') }}
restore-keys: | restore-keys: |
node-modules- node-modules-
- uses: actions/setup-node@v3 - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
with: with:
node-version: '16.x' node-version: 16
if: steps.node-modules-cache.outputs.cache-hit != 'true'
- run: yarn lint - run: yarn lint
test: test:
@@ -64,14 +62,13 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 15 timeout-minutes: 15
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- uses: actions/cache@v3 - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
id: node-modules-cache id: node-modules-cache
with: with:
path: '**/node_modules' path: '**/node_modules'
key: node-modules-${{ hashFiles('**/yarn.lock') }} key: node-modules-${{ hashFiles('**/yarn.lock') }}
- uses: actions/setup-node@v3 - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
with: with:
node-version: '16.x' node-version: 16
if: steps.node-modules-cache.outputs.cache-hit != 'true'
- run: yarn test - run: yarn test
@@ -0,0 +1,25 @@
name: Trigger OSS to Enterprise Merge
on:
pull_request_target:
types:
- closed
branches:
- main
jobs:
trigger-oss-merge:
# Run this only on merge events in OSS repo
if: ${{ github.event.pull_request.merged && github.repository == 'hashicorp/boundary-ui' }}
runs-on: ubuntu-latest
steps:
- name: Trigger Merge
env:
GIT_REF: ${{ github.ref_name }}
GIT_SHA: ${{ github.sha }}
GH_PAT: ${{ secrets.ELEVATED_GITHUB_TOKEN }}
GIT_ACTOR: ${{ github.actor }}
run: |
curl -H "Authorization: token $GH_PAT" \
-H 'Accept: application/json' \
-d "{\"event_type\": \"oss-merge\", \"client_payload\": {\"git-ref\": \"${GIT_REF}\", \"git-sha\": \"${GIT_SHA}\", \"git-actor\": \"${GIT_ACTOR}\" }}" \
"https://api.github.com/repos/hashicorp/boundary-ui-enterprise/dispatches"
+9 -7
View File
@@ -1,6 +1,5 @@
name: "Trigger Test Boundary UI release" name: "Trigger Test Boundary UI release"
on: on:
workflow_dispatch: workflow_dispatch:
inputs: inputs:
@@ -9,15 +8,18 @@ on:
required: true required: true
jobs: jobs:
trigger-circleci-release: trigger-gha-release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Release description
- name: Trigger Release job
if: github.event_name == 'workflow_dispatch' if: github.event_name == 'workflow_dispatch'
run: | run: |
echo "Triggering Test release using BRANCH and TEST_TAG ${{ github.event.inputs.branch }}" echo "Triggering Test release using BRANCH and TEST_TAG ${{ github.event.inputs.branch }}"
- name: Trigger Release workflow in boundary-ui-releases
run: |
export GITHUB_TOKEN="${{ secrets.ELEVATED_GITHUB_TOKEN }}"
gh workflow run release.yml \
--repo hashicorp/boundary-ui-releases \
--ref main \
-f TAG="${{ github.event.inputs.branch }}"
curl -u ${{ secrets.CIRCLE_TOKEN }}: -X POST --header "Content-Type: application/json" \
-d '{ "branch": "main", "parameters": {"TAG": "'${{ github.event.inputs.branch }}'" }}' \
https://circleci.com/api/v2/project/github/hashicorp/boundary-ui-releases/pipeline
+10 -7
View File
@@ -6,14 +6,17 @@ on:
- '*' - '*'
jobs: jobs:
trigger-circleci-release: trigger-gha-release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- name: Trigger Release job - name: Release description
run: | run: |
echo "Triggering release with a TAG ${GITHUB_REF#refs/tags/}" echo "Triggering release with a TAG ${GITHUB_REF#refs/tags/}"
- name: Trigger Release workflow in boundary-ui-releases
curl -u ${{ secrets.CIRCLE_TOKEN }}: -X POST --header "Content-Type: application/json" \ run: |
-d '{ "branch": "main", "parameters": {"TAG": "'${GITHUB_REF#refs/tags/}'" }}' \ export GITHUB_TOKEN="${{ secrets.ELEVATED_GITHUB_TOKEN }}"
https://circleci.com/api/v2/project/github/hashicorp/boundary-ui-releases/pipeline gh workflow run release.yml \
--repo hashicorp/boundary-ui-releases \
--ref main \
-f TAG="${GITHUB_REF#refs/tags/}"
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
yarn compliance:licenses
npx lint-staged
+14
View File
@@ -0,0 +1,14 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3
# Don't run commitizen for merge or squash commits
if [ "${COMMIT_SOURCE}" = merge ] || [ "${COMMIT_SOURCE}" = squash ];then
exit 0
fi
# This is to allow interaction with the terminal for commitizen
exec < /dev/tty && npx git-cz --hook || true
+3
View File
@@ -1,3 +1,6 @@
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: MPL-2.0
url_license = "https://github.com/hashicorp/boundary-ui/blob/main/LICENSE" url_license = "https://github.com/hashicorp/boundary-ui/blob/main/LICENSE"
url_project_website = "https://learn.hashicorp.com/tutorials/boundary/getting-started-desktop-app" url_project_website = "https://learn.hashicorp.com/tutorials/boundary/getting-started-desktop-app"
url_source_repository = "https://github.com/hashicorp/boundary-ui" url_source_repository = "https://github.com/hashicorp/boundary-ui"
+2
View File
@@ -1,3 +1,5 @@
Copyright (c) 2020 HashiCorp, Inc.
Mozilla Public License, version 2.0 Mozilla Public License, version 2.0
1. Definitions 1. Definitions
+7 -7
View File
@@ -66,7 +66,6 @@ List of available project commands. `yarn run <command-name>`
|---------------------|---| |---------------------|---|
| build | Builds Admin UI. | | build | Builds Admin UI. |
| test | Runs tests in CI mode. | | test | Runs tests in CI mode. |
| commit | Replaces `git commit`, ensures compliance, audit, lint, and test checks pass before commit is allowed and normalizes commit messages across authors. |
| lint | Runs ember-template-lint on all of the hbs, js, and sass files. | | lint | Runs ember-template-lint on all of the hbs, js, and sass files. |
| compliance:audit | Checks for issues using `yarn audit` with moderate and above criticality.| | compliance:audit | Checks for issues using `yarn audit` with moderate and above criticality.|
| compliance:licenses | Checks that all dependencies have OSS-compatible licenses. | | compliance:licenses | Checks that all dependencies have OSS-compatible licenses. |
@@ -160,15 +159,16 @@ You will need to turn `off` mirage and run it: `$ ENABLE_MIRAGE=false yarn start
In login screen, authenticate using generated admin login name and password. In login screen, authenticate using generated admin login name and password.
Enter the origin of your Boundary dev instance, by default is: `http://localhost:9200`. Enter the cluster URL of your Boundary dev instance, by default is: `http://localhost:9200`.
### Committing ### Committing
Instead of the default `git commit`, we prescribe a custom command that ensures We use `husky` and `lint-staged` to ensure linting and other checks pass before a
linting and other checks pass before a commit may be completed. It also ensures commit is completed. Simply do a `yarn install` to make sure the hooks are installed.
that all contributors author consistent commit messages. To get started with a
commit, stage your files as usual. Then run `yarn commit` and follow the Use a normal `git commit` to go through the checks, if you need to skip these checks,
on-screen instructions to author your message. use `git commit --no-verify` to bypass them. However, a consistent commit message will
still be enforced even if you use `--no-verify`.
#### License Checking #### License Checking
+3
View File
@@ -14,3 +14,6 @@ indent_size = 2
[*.{diff,md}] [*.{diff,md}]
trim_trailing_whitespace = false trim_trailing_whitespace = false
[*.hbs]
insert_final_newline = false
+7 -1
View File
@@ -5,5 +5,11 @@
Setting `disableAnalytics` to true will prevent any data from being sent. Setting `disableAnalytics` to true will prevent any data from being sent.
*/ */
"disableAnalytics": false "disableAnalytics": false,
/**
Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript
rather than JavaScript by default, when a TypeScript version of a given blueprint is available.
*/
"isTypeScriptProject": false
} }
+8
View File
@@ -13,5 +13,13 @@
# misc # misc
/coverage/ /coverage/
!.* !.*
.*/
.eslintcache .eslintcache
# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
+15 -20
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
'use strict'; 'use strict';
module.exports = { module.exports = {
@@ -14,11 +19,7 @@ module.exports = {
// end of babel-config // end of babel-config
}, },
plugins: ['ember'], plugins: ['ember'],
extends: [ extends: ['eslint:recommended', 'plugin:ember/recommended', 'prettier'],
'eslint:recommended',
'plugin:ember/recommended',
'plugin:prettier/recommended',
],
env: { env: {
browser: true, browser: true,
}, },
@@ -33,21 +34,15 @@ module.exports = {
// node files // node files
{ {
files: [ files: [
'.eslintrc.js', './.eslintrc.js',
'.prettierrc.js', './.prettierrc.js',
'.template-lintrc.js', './.template-lintrc.js',
'ember-cli-build.js', './ember-cli-build.js',
'index.js', './index.js',
'testem.js', './testem.js',
'blueprints/*/index.js', './blueprints/*/index.js',
'config/**/*.js', './config/**/*.js',
'tests/dummy/config/**/*.js', './tests/dummy/config/**/*.js',
],
excludedFiles: [
'addon/**',
'addon-test-support/**',
'app/**',
'tests/dummy/app/**',
], ],
parserOptions: { parserOptions: {
sourceType: 'script', sourceType: 'script',
+13
View File
@@ -14,14 +14,27 @@
/.eslintignore /.eslintignore
/.eslintrc.js /.eslintrc.js
/.git/ /.git/
/.github/
/.gitignore /.gitignore
/.prettierignore
/.prettierrc.js
/.template-lintrc.js /.template-lintrc.js
/.travis.yml /.travis.yml
/.watchmanconfig /.watchmanconfig
/bower.json /bower.json
/config/ember-try.js
/CONTRIBUTING.md /CONTRIBUTING.md
/ember-cli-build.js /ember-cli-build.js
/testem.js /testem.js
/tests/ /tests/
/yarn-error.log
/yarn.lock /yarn.lock
.gitkeep .gitkeep
# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
+9
View File
@@ -14,3 +14,12 @@
/coverage/ /coverage/
!.* !.*
.eslintcache .eslintcache
.lint-todo/
# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
-4
View File
@@ -1,4 +0,0 @@
{
"singleQuote": true,
"printWidth": 80
}
+4 -1
View File
@@ -1,4 +1,7 @@
'use strict'; /**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
module.exports = { module.exports = {
singleQuote: true, singleQuote: true,
+6 -1
View File
@@ -1,5 +1,10 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
'use strict'; 'use strict';
module.exports = { module.exports = {
extends: 'octane', extends: ['recommended', 'stylistic'],
}; };
+29
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model'; import ModelAbility from './model';
/** /**
@@ -6,6 +11,30 @@ import ModelAbility from './model';
export default class AccountAbility extends ModelAbility { export default class AccountAbility extends ModelAbility {
// =permissions // =permissions
/**
* Only "known" account types may be read.
* @type {boolean}
*/
get canRead() {
return !this.model.isUnknown && this.hasAuthorizedAction('read');
}
/**
* Only "known" account types may be updated.
* @type {boolean}
*/
get canUpdate() {
return !this.model.isUnknown && this.hasAuthorizedAction('update');
}
/**
* Only "known" account types may be deleted.
* @type {boolean}
*/
get canDelete() {
return !this.model.isUnknown && this.hasAuthorizedAction('delete');
}
/** /**
* @type {boolean} * @type {boolean}
*/ */
+34
View File
@@ -0,0 +1,34 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model';
/**
* Provides abilities for auth method.
*/
export default class AuthMethodAbility extends ModelAbility {
// =permissions
/**
* Only "known" auth method types may be read.
* @type {boolean}
*/
get canRead() {
return !this.model.isUnknown && this.hasAuthorizedAction('read');
}
/**
* Only "known" auth method types may be updated.
*/
get canUpdate() {
return !this.model.isUnknown && this.hasAuthorizedAction('update');
}
/**
* Only "known" auth method types may be deleted.
*/
get canDelete() {
return !this.model.isUnknown && this.hasAuthorizedAction('delete');
}
}
@@ -0,0 +1,20 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model';
/**
* Provides abilities for credential.
*/
export default class CredentialLibraryAbility extends ModelAbility {
// =permissions
/**
* Only "known" credential library types may be read.
* @type {boolean}
*/
get canRead() {
return !this.model.isUnknown && this.hasAuthorizedAction('read');
}
}
+13 -2
View File
@@ -1,9 +1,18 @@
import ModelAbility from './model'; /**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model';
import { inject as service } from '@ember/service';
/** /**
* Provides abilities for credential store. * Provides abilities for credential store.
*/ */
export default class CredentialStoreAbility extends ModelAbility { export default class CredentialStoreAbility extends ModelAbility {
// =services
@service features;
// =permissions // =permissions
/** /**
@@ -11,6 +20,8 @@ export default class CredentialStoreAbility extends ModelAbility {
* @type {boolean} * @type {boolean}
*/ */
get canRead() { get canRead() {
return !this.model.isStatic && this.hasAuthorizedAction('read'); return this.features.isEnabled('static-credentials')
? this.hasAuthorizedAction('read')
: !this.model.isStatic && this.hasAuthorizedAction('read');
} }
} }
+20
View File
@@ -0,0 +1,20 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model';
/**
* Provides abilities for credential.
*/
export default class CredentialAbility extends ModelAbility {
// =permissions
/**
* Only "known" credential types may be read.
* @type {boolean}
*/
get canRead() {
return !this.model.isUnknown && this.hasAuthorizedAction('read');
}
}
+5
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model'; import ModelAbility from './model';
/** /**
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model'; import ModelAbility from './model';
/** /**
+13 -1
View File
@@ -1,9 +1,14 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model'; import ModelAbility from './model';
/** /**
* Provides abilities for host sets. * Provides abilities for host sets.
*/ */
export default class UserAbility extends ModelAbility { export default class HostSetAbility extends ModelAbility {
// =permissions // =permissions
/** /**
@@ -19,4 +24,11 @@ export default class UserAbility extends ModelAbility {
get canRemoveHosts() { get canRemoveHosts() {
return this.hasAuthorizedAction('remove-hosts'); return this.hasAuthorizedAction('remove-hosts');
} }
/**
* @type {boolean}
*/
get canRead() {
return !this.model.isUnknown && this.hasAuthorizedAction('read');
}
} }
@@ -0,0 +1,13 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model';
/**
* Provides abilities for managed groups.
*/
export default class ManagedGroupAbility extends ModelAbility {
// no op
}
+5
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import { Ability } from 'ember-can'; import { Ability } from 'ember-can';
/** /**
+32
View File
@@ -1,9 +1,23 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model'; import ModelAbility from './model';
import { inject as service } from '@ember/service';
class InvalidRolePrincipalTypeError extends Error {
name = 'InvalidRolePrincipalTypeError';
}
/** /**
* Provides abilities for roles. * Provides abilities for roles.
*/ */
export default class RoleAbility extends ModelAbility { export default class RoleAbility extends ModelAbility {
// =services
@service can;
// =permissions // =permissions
/** /**
@@ -26,4 +40,22 @@ export default class RoleAbility extends ModelAbility {
get canRemovePrincipals() { get canRemovePrincipals() {
return this.hasAuthorizedAction('remove-principals'); return this.hasAuthorizedAction('remove-principals');
} }
/**
* Returns the ability check for a principal model instance.
* Valid role principal models are: User, Group, and ManagedGroup.
* Throws an error if the principal type is invalid.
* @type {boolean}
* @throws {InvalidRolePrincipalTypeError}
*/
get canReadPrincipal() {
const type = this.model.constructor.modelName;
const typeIsValid =
type === 'user' || type === 'group' || type === 'managed-group';
if (!typeIsValid)
throw new InvalidRolePrincipalTypeError(
`Expected a role principal of type 'user', 'group', or 'managed-group'. Got '${type}'.`
);
return this.can.can(`read ${type}`, this.model);
}
} }
+14 -1
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model'; import ModelAbility from './model';
/** /**
@@ -30,10 +35,18 @@ export default class TargetAbility extends ModelAbility {
/** /**
* @type {boolean} * @type {boolean}
*/ */
get canAddCredentialSources() { get canAddBrokeredCredentialSources() {
return this.hasAuthorizedAction('add-credential-sources'); return this.hasAuthorizedAction('add-credential-sources');
} }
/**
* @type {boolean}
*/
get canAddInjectedApplicationCredentialSources() {
return (
this.model.isSSH && this.hasAuthorizedAction('add-credential-sources')
);
}
/** /**
* @type {boolean} * @type {boolean}
*/ */
+21
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model'; import ModelAbility from './model';
/** /**
@@ -19,4 +24,20 @@ export default class UserAbility extends ModelAbility {
get canRemoveAccounts() { get canRemoveAccounts() {
return this.hasAuthorizedAction('remove-accounts'); return this.hasAuthorizedAction('remove-accounts');
} }
/**
* @type {boolean}
*/
get canAddAccount() {
const { account, canAddAccounts } = this;
return canAddAccounts && !account.isUnknown;
}
/**
* @type {boolean}
*/
get canRemoveAccount() {
const { account, canRemoveAccounts } = this;
return canRemoveAccounts && !account.isUnknown;
}
} }
+20
View File
@@ -0,0 +1,20 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ModelAbility from './model';
/**
* Provides abilities for workers.
*/
export default class WorkerAbility extends ModelAbility {
// =permissions
/**
* @type {boolean}
*/
get canCreateWorkerLed() {
return this.hasAuthorizedCollectionAction('create:worker-led');
}
}
+16 -30
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import RESTAdapter from '@ember-data/adapter/rest'; import RESTAdapter from '@ember-data/adapter/rest';
import { serializeIntoHash } from '@ember-data/adapter/-private'; import { serializeIntoHash } from '@ember-data/adapter/-private';
/* eslint-disable-next-line ember/no-mixins */ /* eslint-disable-next-line ember/no-mixins */
@@ -263,36 +268,17 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
source: { pointer: '/data' }, source: { pointer: '/data' },
}; };
// Normalize field-specific errors, if any. // Normalize field-specific errors, if any.
const errors = fieldErrors.flatMap((error) => { const errors = fieldErrors.map((error) => ({
const newValue = [ detail: error.description,
{ // Going forward, nested attributes will be hoisted. Thus "attributes."
detail: error.description, // must be stripped from the error name key. Until all models are
// Ember Data cannot handle errors on nested attributes, so these are // transitioned away from model fragments, however, both this and the
// flattened (e.g. `attributes.foobar` becomes `attributes_foobar`). // prior error key mappings are necessary.
// To capture these errors, add read-only fields on the model source: {
// corresponding to the underscored field name. pointer: `/data/attributes/${error.name.replace('attributes.', '')}`,
source: { },
pointer: `/data/attributes/${error.name.replace('.', '_')}`, }));
},
},
];
if (error.name.includes('attributes.')) {
newValue.push({
detail: error.description,
// Going forward, nested attributes will be hoisted. Thus "attributes."
// must be stripped from the error name key. Until all models are
// transitioned away from model fragments, however, both this and the
// prior error key mappings are necessary.
source: {
pointer: `/data/attributes/${error.name.replace(
'attributes.',
''
)}`,
},
});
}
return newValue;
});
// Return a list of JSON API errors rooted under the `errors` key. // Return a list of JSON API errors rooted under the `errors` key.
return { return {
errors: [baseError, ...errors], errors: [baseError, ...errors],
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ApplicationAdapter from './application'; import ApplicationAdapter from './application';
export default class HostCatalogAdapter extends ApplicationAdapter { export default class HostCatalogAdapter extends ApplicationAdapter {
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -43,4 +48,20 @@ export default class GeneratedAccountModel extends BaseModel {
description: 'Current version number of this resource.', description: 'Current version number of this resource.',
}) })
version; version;
// =attributes (password)
@attr('string', {
for: 'password',
isNestedAttribute: true,
description: 'The account login name',
})
login_name;
// =attributes (OIDC)
@attr('string', { for: 'oidc', isNestedAttribute: true }) subject;
@attr('string', { for: 'oidc', isNestedAttribute: true }) issuer;
@attr('string', { for: 'oidc', isNestedAttribute: true, readOnly: true })
email;
@attr('string', { for: 'oidc', isNestedAttribute: true, readOnly: true })
full_name;
} }
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -49,4 +54,56 @@ export default class GeneratedAuthMethodModel extends BaseModel {
description: 'Current version number of this resource.', description: 'Current version number of this resource.',
}) })
version; version;
@attr('string', { readOnly: true, isNestedAttribute: true }) state;
@attr('string', { isNestedAttribute: true }) issuer;
@attr('string', { isNestedAttribute: true }) client_id;
@attr('string', { isNestedAttribute: true, isSecret: true }) client_secret;
@attr('string', { readOnly: true, isNestedAttribute: true })
client_secret_hmac;
@attr('number', { isNestedAttribute: true }) max_age;
@attr('string', { isNestedAttribute: true }) api_url_prefix;
@attr('string', { readOnly: true, isNestedAttribute: true }) callback_url;
@attr('boolean', { isNestedAttribute: true })
disable_discovered_config_validation;
@attr('boolean', { isNestedAttribute: true }) dry_run;
@attr('string-array', {
emptyArrayIfMissing: true,
isNestedAttribute: true,
})
claims_scopes;
@attr('string-array', {
emptyArrayIfMissing: true,
isNestedAttribute: true,
})
signing_algorithms;
@attr('string-array', {
emptyArrayIfMissing: true,
isNestedAttribute: true,
})
allowed_audiences;
@attr('string-array', {
emptyArrayIfMissing: true,
isNestedAttribute: true,
})
idp_ca_certs;
@attr('account-claim-map-array', {
emptyArrayIfMissing: true,
isNestedAttribute: true,
})
account_claim_maps;
} }
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
/** /**
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -44,4 +49,82 @@ export default class GeneratedCredentialLibraryModel extends BaseModel {
description: 'Current version number of this resource.', description: 'Current version number of this resource.',
}) })
version; version;
//= attributes (vault)
@attr('string', {
for: 'vault-generic',
isNestedAttribute: true,
description:
'The HTTP method the library uses when requesting credentials from Vault.',
defaultValue: () => 'GET',
})
http_method;
@attr('string', {
for: 'vault-generic',
isNestedAttribute: true,
description:
'The body of the HTTP request the library sends to Vault when requesting credentials. Only valid if `http_method` is set to `POST`.',
})
http_request_body;
@attr('string', {
isNestedAttribute: true,
description: 'The path in Vault to request credentials from.',
})
path;
@attr('string', {
for: 'vault-ssh-certificate',
isNestedAttribute: true,
description: 'The username to use when making an SSH connection.',
})
username;
@attr('string', {
for: 'vault-ssh-certificate',
isNestedAttribute: true,
description: 'The desired key type to use when generating a private key.',
})
key_type;
@attr('number', {
for: 'vault-ssh-certificate',
isNestedAttribute: true,
description:
'Specifies the number of bits used when generating the private key. Not used if key type is ed25519',
})
key_bits;
@attr('string', {
for: 'vault-ssh-certificate',
isNestedAttribute: true,
description: 'Specifies the requested time to live for the certificate.',
})
ttl;
@attr('string', {
for: 'vault-ssh-certificate',
isNestedAttribute: true,
description:
'Specifies the key id that the created certificate should have.',
})
key_id;
@attr('object-as-array', {
for: 'vault-ssh-certificate',
isNestedAttribute: true,
description:
'Specifies a map of the critical options that the certificate should be signed for.',
})
critical_options;
@attr('object-as-array', {
for: 'vault-ssh-certificate',
isNestedAttribute: true,
description:
'Specifies a map of the extensions that the certificate should be signed for.',
})
extensions;
} }
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -39,4 +44,91 @@ export default class GeneratedCredentialStoreModel extends BaseModel {
description: 'Current version number of this resource.', description: 'Current version number of this resource.',
}) })
version; version;
// =attributes (vault)
@attr('string', {
for: 'vault',
isNestedAttribute: true,
description:
"The address to Vault server. This should be a complete URL such as 'https://127.0.0.1:8200'",
})
address;
@attr('string', {
for: 'vault',
isNestedAttribute: true,
description: 'The namespace within Vault to use.',
})
namespace;
@attr('string', {
for: 'vault',
isNestedAttribute: true,
description:
"A PEM-encoded CA certificate to verify the Vault server's TLS certificate.",
})
ca_cert;
@attr('string', {
for: 'vault',
isNestedAttribute: true,
description:
'Name to use as the SNI host when connecting to Vault via TLS.',
})
tls_server_name;
@attr('boolean', {
for: 'vault',
isNestedAttribute: true,
description: 'Whether or not to skip TLS verification.',
})
tls_skip_verify;
@attr('string', {
for: 'vault',
isNestedAttribute: true,
isSecret: true,
description: 'A token used for accessing Vault.',
})
token;
@attr('string', {
for: 'vault',
isNestedAttribute: true,
description: 'The Vault token hmac.',
readOnly: true,
})
token_hmac;
@attr('string', {
for: 'vault',
isNestedAttribute: true,
description:
'A PEM-encoded client certificate to use for TLS authentication to the Vault server.',
})
client_certificate;
@attr('string', {
for: 'vault',
isNestedAttribute: true,
description:
"A PEM-encoded private key matching the client certificate from 'client_certificate'.",
})
client_certificate_key;
@attr('string', {
for: 'vault',
isNestedAttribute: true,
description: 'The Vault client certificate key hmac.',
readOnly: true,
})
client_certificate_key_hmac;
@attr('string', {
for: 'vault',
isNestedAttribute: true,
description:
'Filters to the worker(s) who can handle Vault requests for this cred store.',
})
worker_filter;
} }
@@ -0,0 +1,95 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base';
import { attr } from '@ember-data/model';
/**
* A credential is a data structure containing one or more secrets that binds an
* identity to a set of permissions or capabilities on a host for a session.
*/
export default class GeneratedCredentialModel extends BaseModel {
// =attributes
@attr('string', {
description:
'The ID of the Credential Store of which this Credential is a part.',
})
credential_store_id;
@attr('string', {
description: 'The type of the resource, to help differentiate schemas',
})
type;
@attr('string', {
description: 'Optional name for identification purposes',
})
name;
@attr('string', {
description: 'Optional user-set description for identification purposes',
})
description;
@attr('date', {
description: 'The time this resource was created\nOutput only.',
readOnly: true,
})
created_time;
@attr('date', {
description: 'The time this resource was last updated\nOutput only.',
readOnly: true,
})
updated_time;
@attr('number', {
description: 'Current version number of this resource.',
})
version;
// =attributes (username_password, ssh_private_key)
@attr('string', {
for: ['username_password', 'ssh_private_key'],
isNestedAttribute: true,
description: 'The username for credential.',
})
username;
// =attributes (username_password)
@attr('string', {
for: 'username_password',
isNestedAttribute: true,
isSecret: true,
description: 'The password for credential.',
})
password;
// =attributes (ssh_private_key)
@attr('string', {
for: 'ssh_private_key',
isNestedAttribute: true,
isSecret: true,
description: 'The private key for credential.',
})
private_key;
@attr('string', {
for: 'ssh_private_key',
isNestedAttribute: true,
isSecret: true,
description: 'The private key passphrase for credential.',
})
private_key_passphrase;
@attr('string', {
for: 'json',
isNestedAttribute: true,
isSecret: true,
description: 'The secret associated with credential.',
})
json_object;
}
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
+29 -2
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -63,10 +68,32 @@ export default class GeneratedHostSetModel extends BaseModel {
}) })
sync_interval_seconds; sync_interval_seconds;
// Azure specific /**
* Host IDs are read-only under normal circumstances. But these can
* be persisted via a dedicated call to `addHosts()`.
*/
@attr({
readOnly: true,
emptyArrayIfMissing: true,
})
host_ids;
@attr('string-array', {
emptyArrayIfMissing: true,
})
preferred_endpoints;
// AWS specific
@attr('string-array', {
isNestedAttribute: true,
emptyArrayIfMissing: true,
})
filters;
// Azure specific, comes in from API as "filter". This is to avoid collisions with filter
@attr('string', { @attr('string', {
description: '', description: '',
isNestedAttribute: true, isNestedAttribute: true,
}) })
filter; filter_string;
} }
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -44,4 +49,13 @@ export default class GeneratedManagedGroupModel extends BaseModel {
'The ID of the Auth Method that is associated with this ManagedGroup', 'The ID of the Auth Method that is associated with this ManagedGroup',
}) })
auth_method_id; auth_method_id;
// =attributes (OIDC)
@attr('string', {
isNestedAttribute: true,
description:
'The boolean expression filter to use to determine membership. Comes in from API as "filter".',
})
filter_string;
} }
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
+36 -1
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -30,7 +35,6 @@ export default class GeneratedTargetModel extends BaseModel {
@attr('number', { @attr('number', {
description: '', description: '',
defaultValue: 1,
}) })
session_connection_limit; session_connection_limit;
@@ -40,6 +44,18 @@ export default class GeneratedTargetModel extends BaseModel {
}) })
worker_filter; worker_filter;
@attr('string', {
description:
'Optional boolean expressions to filter the egress workers that are allowed to satisfy this request.',
})
egress_worker_filter;
@attr('string', {
description:
'Optional boolean expressions to filter the ingress workers that are allowed to satisfy this request.',
})
ingress_worker_filter;
@attr('date', { @attr('date', {
description: 'The time this resource was created\nOutput only.', description: 'The time this resource was created\nOutput only.',
readOnly: true, readOnly: true,
@@ -61,4 +77,23 @@ export default class GeneratedTargetModel extends BaseModel {
description: 'Current version number of this resource.', description: 'Current version number of this resource.',
}) })
version; version;
@attr('string', {
description:
'An IP address or DNS name for the session to connect to. Cannot be used in conjunction with host sources.',
})
address;
@attr('number', {
isNestedAttribute: true,
description: 'The default port a target should use if present.',
})
default_port;
@attr('number', {
isNestedAttribute: true,
description:
"The default port that will be listened on by the client's local proxy.",
})
default_client_port;
} }
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base'; import BaseModel from '../../models/base';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -0,0 +1,75 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import BaseModel from '../../models/base';
import { attr } from '@ember-data/model';
/**
* Worker contains all fields related to a worker resource
*/
export default class GeneratedWorkerModel extends BaseModel {
// =attributes
@attr('string', {
description: 'Optional name for identification purposes.',
})
name;
@attr('string', {
description: 'Optional user-set description for identification purposes.',
})
description;
@attr('date', {
description: 'The time this resource was created\nOutput only.',
readOnly: true,
})
created_time;
@attr('date', {
description: 'The time this resource was last updated\nOutput only.',
readOnly: true,
})
updated_time;
@attr('number', {
description: 'Current version number of this resource.',
})
version;
@attr('string', {
description: 'The address that this worker is reachable at.\nOutput only.',
readOnly: true,
})
address;
@attr('date', {
description:
'The time this worker was last reported its status.\nOutput only.',
readOnly: true,
})
last_status_time;
@attr('string', {
description:
'The version of the Boundary binary the worker is running.\nOutput only.',
readOnly: true,
})
release_version;
@attr('number', {
description:
'The number of connections that this worker is currently handling.\nOutput only.',
readOnly: true,
})
active_connection_count;
@attr('string', {
description:
'The type of the worker, denoted by how it authenticates: pki or kms.\nOutput only.',
readOnly: true,
})
type;
}
@@ -1,15 +0,0 @@
// app/initializers/fragment-serializer.js
import FragmentAuthMethodAttributesAccountClaimMapSerializer from '../serializers/fragment-auth-method-attributes-account-claim-map';
export function initialize(application) {
application.register(
'serializer:fragment-auth-method-attributes-account-claim-map',
FragmentAuthMethodAttributesAccountClaimMapSerializer
);
}
// Fragment serializers must be manually registered
export default {
name: 'fragment-auth-method-attributes-account-claim-map',
initialize: initialize,
};
@@ -1,12 +0,0 @@
// app/initializers/fragment-serializer.js
import FragmentStringSerializer from '../serializers/fragment-string';
export function initialize(application) {
application.register('serializer:fragment-string', FragmentStringSerializer);
}
// Fragment serializers must be manually registered
export default {
name: 'fragment-string',
initialize: initialize,
};
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import Mixin from '@ember/object/mixin'; import Mixin from '@ember/object/mixin';
/** /**
+29 -10
View File
@@ -1,34 +1,53 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedAccountModel from '../generated/models/account'; import GeneratedAccountModel from '../generated/models/account';
import { fragment } from 'ember-data-model-fragments/attributes'; import {
import { computed } from '@ember/object'; TYPE_AUTH_METHOD_PASSWORD,
import { equal } from '@ember/object/computed'; TYPE_AUTH_METHOD_OIDC,
TYPE_AUTH_METHOD_LDAP,
TYPES_AUTH_METHOD,
} from './auth-method';
export default class AccountModel extends GeneratedAccountModel { export default class AccountModel extends GeneratedAccountModel {
// =attributes // =attributes
/** /**
* Attributes of this resource, if any, represented as a JSON fragment. * @type {boolean}
* @type {FragmentAccountAttributesModel}
*/ */
@fragment('fragment-account-attributes', { defaultValue: {} }) attributes; get isPassword() {
return this.type === TYPE_AUTH_METHOD_PASSWORD;
}
/** /**
* @type {boolean} * @type {boolean}
*/ */
@equal('type', 'password') isPassword; get isOIDC() {
return this.type === TYPE_AUTH_METHOD_OIDC;
}
/** /**
* @type {boolean} * @type {boolean}
*/ */
@equal('type', 'oidc') isOIDC; get isLDAP() {
return this.type === TYPE_AUTH_METHOD_LDAP;
}
/**
* @type {boolean}
*/
get isUnknown() {
return !TYPES_AUTH_METHOD.includes(this.type);
}
/** /**
* Convenience for getting username in account. * Convenience for getting username in account.
* @type {string} * @type {string}
*/ */
@computed('attributes.{email,full_name,login_name}')
get accountName() { get accountName() {
const { email, full_name, login_name } = this.attributes; const { email, full_name, login_name } = this;
return email || full_name || login_name; return email || full_name || login_name;
} }
+34 -33
View File
@@ -1,8 +1,21 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedAuthMethodModel from '../generated/models/auth-method'; import GeneratedAuthMethodModel from '../generated/models/auth-method';
import { attr } from '@ember-data/model';
import { fragment } from 'ember-data-model-fragments/attributes';
import { equal } from '@ember/object/computed'; import { equal } from '@ember/object/computed';
export const TYPE_AUTH_METHOD_PASSWORD = 'password';
export const TYPE_AUTH_METHOD_OIDC = 'oidc';
export const TYPE_AUTH_METHOD_LDAP = 'ldap';
export const TYPES_AUTH_METHOD = Object.freeze([
TYPE_AUTH_METHOD_PASSWORD,
TYPE_AUTH_METHOD_OIDC,
TYPE_AUTH_METHOD_LDAP,
]);
/** /**
* Enum options per auth method type and field. * Enum options per auth method type and field.
*/ */
@@ -28,34 +41,8 @@ export const options = {
}; };
export default class AuthMethodModel extends GeneratedAuthMethodModel { export default class AuthMethodModel extends GeneratedAuthMethodModel {
// =error attributes
// These attributes exist solely to capture errors on nested fields.
// See the application adapter's error normalization method for
// more information.
@attr('string', { readOnly: true }) attributes_state;
@attr('string', { readOnly: true }) attributes_issuer;
@attr('string', { readOnly: true }) attributes_client_id;
@attr('string', { readOnly: true }) attributes_client_secret;
@attr('string', { readOnly: true }) attributes_max_age;
@attr('string', { readOnly: true }) attributes_api_url_prefix;
@attr('string', { readOnly: true })
attributes_disable_discovered_config_validation;
@attr('string', { readOnly: true }) attributes_dry_run;
@attr('string', { readOnly: true }) attributes_account_claim_maps;
@attr('string', { readOnly: true }) attributes_claims_scopes;
@attr('string', { readOnly: true }) attributes_signing_algorithms;
@attr('string', { readOnly: true }) attributes_allowed_audiences;
@attr('string', { readOnly: true }) attributes_idp_ca_certs;
// =attributes // =attributes
/**
* Attributes of this resource, if any, represented as a JSON fragment.
* @type {FragmentAuthMethodAttributesModel}
*/
@fragment('fragment-auth-method-attributes', { defaultValue: {} }) attributes;
/** /**
* @type {boolean} * @type {boolean}
*/ */
@@ -67,35 +54,49 @@ export default class AuthMethodModel extends GeneratedAuthMethodModel {
* @type {boolean} * @type {boolean}
*/ */
get isPassword() { get isPassword() {
return this.type === 'password'; return this.type === TYPE_AUTH_METHOD_PASSWORD;
} }
/** /**
* @type {boolean} * @type {boolean}
*/ */
get isOIDC() { get isOIDC() {
return this.type === 'oidc'; return this.type === TYPE_AUTH_METHOD_OIDC;
}
/**
* @type {boolean}
*/
get isLDAP() {
return this.type === TYPE_AUTH_METHOD_LDAP;
}
/**
* @type {boolean}
*/
get isUnknown() {
return !TYPES_AUTH_METHOD.includes(this.type);
} }
/** /**
* @type {boolean} * @type {boolean}
*/ */
get isInactive() { get isInactive() {
return this.attributes.state === 'inactive'; return this.state === 'inactive';
} }
/** /**
* @type {boolean} * @type {boolean}
*/ */
get isPrivate() { get isPrivate() {
return this.attributes.state === 'active-private'; return this.state === 'active-private';
} }
/** /**
* @type {boolean} * @type {boolean}
*/ */
get isPublic() { get isPublic() {
return this.attributes.state === 'active-public'; return this.state === 'active-public';
} }
// =methods // =methods
+5
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedAuthTokenModel from '../generated/models/auth-token'; import GeneratedAuthTokenModel from '../generated/models/auth-token';
export default class AuthTokenModel extends GeneratedAuthTokenModel {} export default class AuthTokenModel extends GeneratedAuthTokenModel {}
+19 -5
View File
@@ -1,7 +1,12 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import Model from '@ember-data/model'; import Model from '@ember-data/model';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
import { fragment } from 'ember-data-model-fragments/attributes';
import { computed } from '@ember/object'; import { computed } from '@ember/object';
import { inject as service } from '@ember/service';
/** /**
* Base model class provides common functionality for all models. * Base model class provides common functionality for all models.
@@ -26,13 +31,16 @@ import { computed } from '@ember/object';
* 2) Or as an ID: `record.scopeID`. * 2) Or as an ID: `record.scopeID`.
*/ */
export default class BaseModel extends Model { export default class BaseModel extends Model {
// =services
@service store;
// =relationships // =relationships
/** /**
* Scope of this resource, if any, represented as a JSON fragment. * Scope of this resource, if any, represented as a JSON fragment.
* @type {FragmentScope}
*/ */
@fragment('fragment-scope') scope; @attr() scope;
// =attributes // =attributes
@@ -51,10 +59,18 @@ export default class BaseModel extends Model {
const id = this.scopeID; const id = this.scopeID;
return this.store.peekRecord('scope', id); return this.store.peekRecord('scope', id);
} }
// Ember seems to have a bug with its internals and can't correctly set
// the `scopeModel` when passed in as part of the `inputProperties`
// of a `createRecord` call
set scopeModel(model) { set scopeModel(model) {
if (model) { if (model) {
const json = model.serialize(); const json = model.serialize();
json.scope_id = model.id; json.scope_id = model.id;
json.type = model.type;
json.isGlobal = model.isGlobal;
json.isOrg = model.isOrg;
json.isProject = model.isProject;
this.scope = json; this.scope = json;
} }
} }
@@ -85,7 +101,6 @@ export default class BaseModel extends Model {
/** /**
* @type {boolean} * @type {boolean}
*/ */
@computed('hasDirtyAttributes', 'isSaving')
get canSave() { get canSave() {
return this.hasDirtyAttributes && !this.isSaving; return this.hasDirtyAttributes && !this.isSaving;
} }
@@ -93,7 +108,6 @@ export default class BaseModel extends Model {
/** /**
* @type {boolean} * @type {boolean}
*/ */
@computed('canSave')
get cannotSave() { get cannotSave() {
return !this.canSave; return !this.canSave;
} }
+50 -15
View File
@@ -1,30 +1,65 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedCredentialLibraryModel from '../generated/models/credential-library'; import GeneratedCredentialLibraryModel from '../generated/models/credential-library';
import { attr } from '@ember-data/model';
import { fragment } from 'ember-data-model-fragments/attributes';
/** /**
* Enum options for credential library. * Enum options for credential library.
*/ */
export const options = { export const options = {
http_method: ['GET', 'POST'], http_method: ['GET', 'POST'],
key_type: ['ed25519', 'ecdsa', 'rsa'],
}; };
export const TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC = 'vault-generic';
export const TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE =
'vault-ssh-certificate';
/**
* Supported Credential Library types.
*/
export const TYPES_CREDENTIAL_LIBRARY = Object.freeze([
TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC,
TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE,
]);
export default class CredentialLibraryModel extends GeneratedCredentialLibraryModel { export default class CredentialLibraryModel extends GeneratedCredentialLibraryModel {
// =error attributes
// These attributes exist solely to capture errors on nested fields.
// See the application adapter's error normalization method for
// more information.
@attr('string', { readOnly: true }) attributes_http_method;
@attr('string', { readOnly: true }) attributes_http_request_body;
@attr('string', { readOnly: true }) attributes_path;
// =attributes // =attributes
/** /**
* Attributes of this resource, if any, represented as a JSON fragment. * True if credential is an unknown type.
* @type {FragmentCredentialLibraryAttributesModel} * @type {boolean}
*/ */
@fragment('fragment-credential-library-attributes', { defaultValue: {} }) get isUnknown() {
attributes; return !TYPES_CREDENTIAL_LIBRARY.includes(this.type);
}
/**
* True if credential is a vault type.
* @type {boolean}
*/
get isVault() {
return (
this.type === TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC ||
this.type === TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE
);
}
/**
* True if credential is a generic vault type.
* @type {boolean}
*/
get isVaultGeneric() {
return this.type === TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC;
}
/**
* True if credential is a vault ssh cert type.
* @type {boolean}
*/
get isVaultSSHCertificate() {
return this.type === TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE;
}
} }
+7 -23
View File
@@ -1,32 +1,16 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedCredentialStoreModel from '../generated/models/credential-store'; import GeneratedCredentialStoreModel from '../generated/models/credential-store';
import { attr } from '@ember-data/model';
import { fragment } from 'ember-data-model-fragments/attributes';
import { equal } from '@ember/object/computed'; import { equal } from '@ember/object/computed';
export const types = ['static', 'vault'];
export default class CredentialStoreModel extends GeneratedCredentialStoreModel { export default class CredentialStoreModel extends GeneratedCredentialStoreModel {
// =error attributes
// These attributes exist solely to capture errors on nested fields.
// See the application adapter's error normalization method for
// more information.
@attr('string', { readOnly: true }) attributes_address;
@attr('string', { readOnly: true }) attributes_namespace;
@attr('string', { readOnly: true }) attributes_ca_cert;
@attr('string', { readOnly: true }) attributes_tls_server_name;
@attr('string', { readOnly: true }) attributes_tls_skip_verify;
@attr('string', { readOnly: true }) attributes_token;
@attr('string', { readOnly: true }) attributes_client_certificate;
@attr('string', { readOnly: true }) attributes_client_certificate_key;
// =attributes // =attributes
/**
* Attributes of this resource, if any, represented as a JSON fragment.
* @type {FragmentAuthMethodAttributesModel}
*/
@fragment('fragment-credential-store-attributes', { defaultValue: {} })
attributes;
/** /**
* @type {boolean} * @type {boolean}
*/ */
+41
View File
@@ -0,0 +1,41 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedCredentialModel from '../generated/models/credential';
/**
* Supported Credential types.
*/
export const types = ['username_password', 'ssh_private_key', 'json'];
export default class CredentialModel extends GeneratedCredentialModel {
// =attributes
/**
* All Credentials are prefixed with "cred" and are considered
* static due to their relation with Static Credential Stores.
*
* True if credential starts with the "cred" prefix.
* @type {boolean}
*/
get isStatic() {
return this.id.startsWith('cred');
}
/**
* True if type is `json`.
* @type {boolean}
*/
get isJSON() {
return this.type === 'json';
}
/**
* True if credential is an unknown type.
* @type {boolean}
*/
get isUnknown() {
return !types.includes(this.type);
}
}
@@ -1,17 +0,0 @@
import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
export default class FragmentAccountAttributesModel extends Fragment {
// =attributes (password)
@attr('string', {
for: 'password',
description: 'The account login name',
})
login_name;
// =attributes (OIDC)
@attr('string', { for: 'oidc' }) subject;
@attr('string', { for: 'oidc' }) issuer;
@attr('string', { for: 'oidc', readOnly: true }) email;
@attr('string', { for: 'oidc', readOnly: true }) full_name;
}
@@ -1,9 +0,0 @@
import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
export default class FragmentAuthMethodAttributesAccountClaimMapModel extends Fragment {
// =attributes (OIDC)
@attr('string') from;
@attr('string') to;
}
@@ -1,40 +0,0 @@
import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
import { fragmentArray } from 'ember-data-model-fragments/attributes';
export default class FragmentAuthMethodAttributesModel extends Fragment {
// =attributes (OIDC)
@attr('string', { readOnly: true }) state;
@attr('string') issuer;
@attr('string') client_id;
@attr('string') client_secret;
@attr('string', { readOnly: true }) client_secret_hmac;
@attr('number') max_age;
@attr('string') api_url_prefix;
@attr('string', { readOnly: true }) callback_url;
@attr('boolean') disable_discovered_config_validation;
@attr('boolean') dry_run;
@fragmentArray('fragment-auth-method-attributes-account-claim-map', {
emptyArrayIfMissing: true,
})
account_claim_maps;
@fragmentArray('fragment-string', {
emptyArrayIfMissing: true,
})
claims_scopes;
@fragmentArray('fragment-string', {
emptyArrayIfMissing: true,
})
signing_algorithms;
@fragmentArray('fragment-string', {
emptyArrayIfMissing: true,
})
allowed_audiences;
@fragmentArray('fragment-string', { emptyArrayIfMissing: true }) idp_ca_certs;
}
@@ -1,25 +0,0 @@
import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
import { options } from './credential-library';
export default class FragmentCredentialLibraryAttributesModel extends Fragment {
//= attributes (vault)
@attr('string', {
description:
'The HTTP method the library uses when requesting credentials from Vault.',
defaultValue: () => options.http_method[0],
})
http_method;
@attr('string', {
description:
'The body of the HTTP request the library sends to Vault when requesting credentials. Only valid if `http_method` is set to `POST`.',
})
http_request_body;
@attr('string', {
description: 'The path in Vault to request credentials from.',
})
path;
}
@@ -1,72 +0,0 @@
import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
export default class FragmentCredentialStoreAttributesModel extends Fragment {
// =attributes (vault)
@attr('string', {
for: 'vault',
description:
"The address to Vault server. This should be a complete URL such as 'https://127.0.0.1:8200'",
})
address;
@attr('string', {
for: 'vault',
description: 'The namespace within Vault to use.',
})
namespace;
@attr('string', {
for: 'vault',
description:
"A PEM-encoded CA certificate to verify the Vault server's TLS certificate.",
})
ca_cert;
@attr('string', {
for: 'vault',
description:
'Name to use as the SNI host when connecting to Vault via TLS.',
})
tls_server_name;
@attr('boolean', {
for: 'vault',
description: 'Whether or not to skip TLS verification.',
})
tls_skip_verify;
@attr('string', {
for: 'vault',
description: 'A token used for accessing Vault.',
})
token;
@attr('string', {
for: 'vault',
description: 'The Vault token hmac.',
readOnly: true,
})
token_hmac;
@attr('string', {
for: 'vault',
description:
'A PEM-encoded client certificate to use for TLS authentication to the Vault server.',
})
client_certificate;
@attr('string', {
for: 'vault',
description:
"A PEM-encoded private key matching the client certificate from 'client_certificate'.",
})
client_certificate_key;
@attr('string', {
for: 'vault',
description: 'The Vault client certificate key hmac.',
readOnly: true,
})
client_certificate_key_hmac;
}
@@ -1,16 +0,0 @@
import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
export default class FragmentHostSourceModel extends Fragment {
// =attributes
@attr('string', {
description: 'ID of the related host source',
})
host_source_id;
@attr('string', {
description: 'ID of the catalog to which the host set belongs',
})
host_catalog_id;
}
@@ -1,12 +0,0 @@
import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
export default class FragmentManagedGroupAttributesModel extends Fragment {
// =attributes (OIDC)
@attr('string', {
description:
'The boolean expression filter to use to determine membership.',
})
filter;
}
@@ -1,21 +0,0 @@
import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
export default class FragmentPrincipal extends Fragment {
// =attributes
@attr('string', {
description: 'ID of the related scope',
})
scope_id;
@attr('string', {
description: 'ID of the related principal (user or group)',
})
principal_id;
@attr('string', {
description: 'Type of the related principal (user or group)',
})
type;
}
-42
View File
@@ -1,42 +0,0 @@
import Fragment from 'ember-data-model-fragments/fragment';
import { computed } from '@ember/object';
import { attr } from '@ember-data/model';
import { scopeTypes } from './scope';
export default class FragmentScope extends Fragment {
// =attributes
@attr('string', {
description: 'ID of the related scope',
})
scope_id;
@attr('string', {
description: 'The type of the resource',
})
type;
/**
* @type {boolean}
*/
@computed('type')
get isGlobal() {
return this.type === scopeTypes.global;
}
/**
* @type {boolean}
*/
@computed('type')
get isOrg() {
return this.type === scopeTypes.org;
}
/**
* @type {boolean}
*/
@computed('type')
get isProject() {
return this.type === scopeTypes.project;
}
}
@@ -1,14 +0,0 @@
import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
/**
* Represents an item in an array of strings.
*/
export default class FragmentStringModel extends Fragment {
// =attributes
@attr('string', {
description: 'The value of the string.',
})
value;
}
+10
View File
@@ -1,9 +1,19 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedGroupModel from '../generated/models/group'; import GeneratedGroupModel from '../generated/models/group';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
import { computed } from '@ember/object'; import { computed } from '@ember/object';
import { A } from '@ember/array'; import { A } from '@ember/array';
import { inject as service } from '@ember/service';
export default class GroupModel extends GeneratedGroupModel { export default class GroupModel extends GeneratedGroupModel {
// =services
@service store;
// =attributes // =attributes
/** /**
+8 -2
View File
@@ -1,6 +1,12 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedHostCatalogModel from '../generated/models/host-catalog'; import GeneratedHostCatalogModel from '../generated/models/host-catalog';
export const types = ['aws', 'azure']; export const types = ['static', 'plugin'];
export const pluginTypes = ['aws', 'azure'];
export default class HostCatalogModel extends GeneratedHostCatalogModel { export default class HostCatalogModel extends GeneratedHostCatalogModel {
// =attributes // =attributes
@@ -26,7 +32,7 @@ export default class HostCatalogModel extends GeneratedHostCatalogModel {
* @type {boolean} * @type {boolean}
*/ */
get isUnknown() { get isUnknown() {
return this.isPlugin && !types.includes(this.plugin?.name); return this.isPlugin && !pluginTypes.includes(this.plugin?.name);
} }
/** /**
+7 -25
View File
@@ -1,6 +1,10 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedHostSetModel from '../generated/models/host-set'; import GeneratedHostSetModel from '../generated/models/host-set';
import { fragmentArray } from 'ember-data-model-fragments/attributes'; import { pluginTypes } from './host-catalog';
import { types } from './host-catalog';
export default class HostSetModel extends GeneratedHostSetModel { export default class HostSetModel extends GeneratedHostSetModel {
// =attributes // =attributes
@@ -26,7 +30,7 @@ export default class HostSetModel extends GeneratedHostSetModel {
* @type {boolean} * @type {boolean}
*/ */
get isUnknown() { get isUnknown() {
return this.isPlugin && !types.includes(this.plugin?.name); return this.isPlugin && !pluginTypes.includes(this.plugin?.name);
} }
/** /**
@@ -67,28 +71,6 @@ export default class HostSetModel extends GeneratedHostSetModel {
} }
} }
/**
* Host IDs are read-only under normal circumstances. But these can
* be persisted via a dedicated call to `addHosts()`.
*/
@fragmentArray('fragment-string', {
readOnly: true,
emptyArrayIfMissing: true,
})
host_ids;
@fragmentArray('fragment-string', {
emptyArrayIfMissing: true,
})
preferred_endpoints;
// AWS specific
@fragmentArray('fragment-string', {
emptyArrayIfMissing: true,
isNestedAttribute: true,
})
filters;
// =methods // =methods
/** /**
+16
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedHostModel from '../generated/models/host'; import GeneratedHostModel from '../generated/models/host';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
@@ -24,6 +29,12 @@ export default class HostModel extends GeneratedHostModel {
}) })
external_id; external_id;
@attr('string', {
description: 'The external facing name for the plugin based host.',
readOnly: true,
})
external_name;
// Aws specific // Aws specific
@attr({ @attr({
readOnly: true, readOnly: true,
@@ -84,4 +95,9 @@ export default class HostModel extends GeneratedHostModel {
this.plugin = { name: type }; this.plugin = { name: type };
} }
} }
// Plugin hosts can support an external name
get displayName() {
return this.name || this.external_name || this.id;
}
} }
+5 -11
View File
@@ -1,18 +1,15 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedManagedGroupModel from '../generated/models/managed-group'; import GeneratedManagedGroupModel from '../generated/models/managed-group';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
import { fragment } from 'ember-data-model-fragments/attributes';
import { A } from '@ember/array'; import { A } from '@ember/array';
export default class ManagedGroupModel extends GeneratedManagedGroupModel { export default class ManagedGroupModel extends GeneratedManagedGroupModel {
// =attributes // =attributes
// =error attributes
// These attributes exist solely to capture errors on nested fields.
// See the application adapter's error normalization method for
// more information.
@attr('string', { readOnly: true }) attributes_filter;
/** /**
* Members is read-only under normal circumstances. But members can * Members is read-only under normal circumstances. But members can
* be persisted via calls to `addMembers()` or `removeMembers()`. * be persisted via calls to `addMembers()` or `removeMembers()`.
@@ -23,7 +20,4 @@ export default class ManagedGroupModel extends GeneratedManagedGroupModel {
emptyArrayIfMissing: true, emptyArrayIfMissing: true,
}) })
member_ids; member_ids;
@fragment('fragment-managed-group-attributes', { defaultValue: {} })
attributes;
} }
+135 -4
View File
@@ -1,7 +1,20 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedRoleModel from '../generated/models/role'; import GeneratedRoleModel from '../generated/models/role';
import { fragmentArray, array } from 'ember-data-model-fragments/attributes'; import { attr } from '@ember-data/model';
import { inject as service } from '@ember/service';
import { all, resolve } from 'rsvp';
import { TYPE_AUTH_METHOD_OIDC } from 'api/models/auth-method';
export default class RoleModel extends GeneratedRoleModel { export default class RoleModel extends GeneratedRoleModel {
// =services
@service store;
@service resourceFilterStore;
// =attributes // =attributes
/** /**
@@ -11,7 +24,7 @@ export default class RoleModel extends GeneratedRoleModel {
* see obvious. Instead, the application layer is expected to load referenced * see obvious. Instead, the application layer is expected to load referenced
* users and groups as needed. * users and groups as needed.
*/ */
@fragmentArray('fragment-principal', { @attr('principal-array', {
readOnly: true, readOnly: true,
emptyArrayIfMissing: true, emptyArrayIfMissing: true,
}) })
@@ -21,15 +34,133 @@ export default class RoleModel extends GeneratedRoleModel {
* Grant strings are read-only. But grants can be persisted via a dedicated * Grant strings are read-only. But grants can be persisted via a dedicated
* call to `saveGrantStrings(grants)`. * call to `saveGrantStrings(grants)`.
*/ */
@array('string', { readOnly: true }) grant_strings; @attr({ readOnly: true, emptyArrayIfMissing: true }) grant_strings;
/** /**
* Convenience for looking up the grant scope, if loaded. * Convenience for looking up the grant scope, if loaded.
*/ */
get grantScope() { get grantScope() {
return this.store.peekRecord('scope', this.grant_scope_id); return this.grant_scope_id
? this.store.peekRecord('scope', this.grant_scope_id)
: null;
} }
/**
* A list of IDs for principals of type `user`.
* @type {string[]}
*/
get userIDs() {
return this.principals
.filter(({ type }) => type === 'user')
.map(({ principal_id }) => principal_id);
}
/**
* A list of IDs for principals of type `group`.
* @type {string[]}
*/
get groupIDs() {
return this.principals
.filter(({ type }) => type === 'group')
.map(({ principal_id }) => principal_id);
}
/**
* A list of IDs for principals of type `managed group`.
* @type {string[]}
*/
get managedGroupIDs() {
return this.principals
.filter(({ type }) => type === 'managed group')
.map(({ principal_id }) => principal_id);
}
/**
* A promise that resolves to an array of User instances.
* When calling this getter, be sure to await resolution
* before interacting with the results.
* @type {Promise[UserModel]}
*/
get users() {
const ids = this.userIDs;
// Role has prinicipal IDs,
// return a promise which resolves model instances for those IDs
if (ids?.length) {
return this.resourceFilterStore
.queryBy('user', { id: ids }, { scope_id: 'global', recursive: true })
.then((models) => models.map((model) => model));
}
// No principal IDs,
// return a promise resolving to an empty array
return resolve([]);
}
/**
* A promise that resolves to an array of Group instances.
* When calling this getter, be sure to await resolution
* before interacting with the results.
* @type {Promise[GroupModel]}
*/
get groups() {
const ids = this.groupIDs;
// Role has prinicipal IDs,
// return a promise which resolves model instances for those IDs
if (ids?.length) {
return this.resourceFilterStore
.queryBy('group', { id: ids }, { scope_id: 'global', recursive: true })
.then((models) => models.map((model) => model));
}
// No principal IDs,
// return a promise resolving to an empty array
return resolve([]);
}
/**
* A promise that resolves to an array of ManagedGroup instances.
* When calling this getter, be sure to await resolution
* before interacting with the results.
* @type {Promise[ManagedGroupModel]}
*/
get managedGroups() {
const ids = this.managedGroupIDs;
// Role has prinicipal IDs
// return a promise which resolves model instances for those IDs
if (ids?.length) {
// Collect all auth methods.
const authMethods = this.resourceFilterStore.queryBy(
'auth-method',
{ type: TYPE_AUTH_METHOD_OIDC },
{ scope_id: 'global', recursive: true }
);
// For each auth method, query all managed groups with IDs
// that match the role's manage group principal IDs.
const managedGroups = authMethods
.then((methods) =>
all(
methods.map(({ id: auth_method_id }) =>
this.resourceFilterStore
.queryBy('managed-group', { id: ids }, { auth_method_id })
.then((models) => models.map((model) => model))
)
)
)
// The result is an array of arrays of model instances (grouped by
// auth methods), so these must be flattened.
.then((grouped) => grouped.flat());
return managedGroups;
}
// No principal IDs,
// return a promise resolving to an empty array
return resolve([]);
}
// =methods // =methods
/** /**
+5
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedScopeModel from '../generated/models/scope'; import GeneratedScopeModel from '../generated/models/scope';
import { computed } from '@ember/object'; import { computed } from '@ember/object';
+20
View File
@@ -1,8 +1,16 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedSessionModel from '../generated/models/session'; import GeneratedSessionModel from '../generated/models/session';
import { computed } from '@ember/object'; import { computed } from '@ember/object';
import { equal } from '@ember/object/computed'; import { equal } from '@ember/object/computed';
import { tracked } from '@glimmer/tracking'; import { tracked } from '@glimmer/tracking';
import { A } from '@ember/array'; import { A } from '@ember/array';
import { inject as service } from '@ember/service';
export const statusTypes = ['active', 'pending', 'canceling', 'terminated'];
/** /**
* *
@@ -80,6 +88,10 @@ class SessionCredential {
} }
export default class SessionModel extends GeneratedSessionModel { export default class SessionModel extends GeneratedSessionModel {
// =services
@service store;
// =attributes // =attributes
// These transient attributes are used for values that come from the CLI // These transient attributes are used for values that come from the CLI
@@ -94,6 +106,14 @@ export default class SessionModel extends GeneratedSessionModel {
@equal('status', 'active') isActive; @equal('status', 'active') isActive;
@equal('status', 'pending') isPending; @equal('status', 'pending') isPending;
/**
* True if status is an unknown string.
* @type {boolean}
*/
get isUnknownStatus() {
return !statusTypes.includes(this.status);
}
/** /**
* @type {boolean} * @type {boolean}
*/ */
+147 -38
View File
@@ -1,35 +1,51 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedTargetModel from '../generated/models/target'; import GeneratedTargetModel from '../generated/models/target';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
import { fragmentArray } from 'ember-data-model-fragments/attributes'; import { inject as service } from '@ember/service';
import { computed } from '@ember/object';
export const TYPE_TARGET_TCP = 'tcp';
export const TYPE_TARGET_SSH = 'ssh';
export const TYPES_TARGET = Object.freeze([TYPE_TARGET_TCP, TYPE_TARGET_SSH]);
export default class TargetModel extends GeneratedTargetModel { export default class TargetModel extends GeneratedTargetModel {
// =services
@service store;
// =attributes // =attributes
@attr('number', {
isNestedAttribute: true,
description: 'The default port a target should use if present.',
})
default_port;
/** /**
* @type {[FragmentHostSourceModel]} * @type Array
*/ */
@fragmentArray('fragment-host-source', { @attr('host-source-id-array', {
readOnly: true, readOnly: true,
emptyArrayIfMissing: true, emptyArrayIfMissing: true,
}) })
host_sources; host_sources;
/** /**
* Credential source ids are read only and can be * Brokered Credential source ids are read only and can be
* persisted via a dedicated call to `addCredentialSources()`. * persisted via a dedicated call to `addBrokeredCredentialSources()`.
*/ */
@fragmentArray('fragment-string', { @attr('string-array', {
readOnly: true, readOnly: true,
emptyArrayIfMissing: true, emptyArrayIfMissing: true,
}) })
application_credential_source_ids; brokered_credential_source_ids;
/**
* Injected Application Credential source ids are read only and can be
* persisted via a dedicated call to `addInjectedApplicationCredentialSources()`.
*/
@attr('string-array', {
readOnly: true,
emptyArrayIfMissing: true,
})
injected_application_credential_source_ids;
/** /**
* An array of resolved host set and host catalog instances. Model instances * An array of resolved host set and host catalog instances. Model instances
@@ -37,7 +53,6 @@ export default class TargetModel extends GeneratedTargetModel {
* instances). Unresolvable instances are excluded from the array. * instances). Unresolvable instances are excluded from the array.
* @type {[{model: HostSetModel, hostCatalog: HostCatalogModel}]} * @type {[{model: HostSetModel, hostCatalog: HostCatalogModel}]}
*/ */
@computed('host_sources.[]', 'store')
get hostSets() { get hostSets() {
return this.host_sources return this.host_sources
.map(({ host_source_id, host_catalog_id }) => ({ .map(({ host_source_id, host_catalog_id }) => ({
@@ -48,17 +63,38 @@ export default class TargetModel extends GeneratedTargetModel {
} }
/** /**
* An array of resolved credential library instances. Model instances * An array of resolved credential library and credential instances. Model instances
* must already be loaded into the store (this method will not load unloaded * must already be loaded into the store (this method will not load unloaded
* instances). Unresolvable instances are excluded from the array. * instances). Unresolvable instances are excluded from the array.
* @type {[CredentialLibraryModel]} * @type {[CredentialLibraryModel, CredentialModel]}
*/ */
@computed('application_credential_source_ids.[]', 'store') get brokeredCredentialSources() {
get credentialLibraries() { return this.brokered_credential_source_ids
return this.application_credential_source_ids .map((source) => {
.map((source) => if (source.value.startsWith('cred')) {
this.store.peekRecord('credential-library', source.value) return this.store.peekRecord('credential', source.value);
) } else {
return this.store.peekRecord('credential-library', source.value);
}
})
.filter(Boolean);
}
/**
* An array of resolved credential library and credential instances. Model instances
* must already be loaded into the store (this method will not load unloaded
* instances). Unresolvable instances are excluded from the array.
* @type {[CredentialLibraryModel, CredentialModel]}
*/
get injectedApplicationCredentialSources() {
return this.injected_application_credential_source_ids
.map((source) => {
if (source.value.startsWith('cred')) {
return this.store.peekRecord('credential', source.value);
} else {
return this.store.peekRecord('credential-library', source.value);
}
})
.filter(Boolean); .filter(Boolean);
} }
@@ -150,17 +186,20 @@ export default class TargetModel extends GeneratedTargetModel {
} }
/** /**
* Adds credential libraries via the `add-credential-sources` method. * Adds credential sources via the `add-credential-sources` method.
* See serializer and adapter for more information. * See serializer and adapter for more information.
* @param {[string]} credentialLibraryIDs * @param {[string]} brokeredCredentialSourceIDs
* @param {object} options * @param {object} options
* @param {object} options.adapterOptions * @param {object} options.adapterOptions
* @return {Promise} * @return {Promise}
*/ */
addCredentialSources(credentialLibraryIDs, options = { adapterOptions: {} }) { addBrokeredCredentialSources(
brokeredCredentialSourceIDs,
options = { adapterOptions: {} }
) {
const defaultAdapterOptions = { const defaultAdapterOptions = {
method: 'add-credential-sources', method: 'add-credential-sources',
credentialLibraryIDs, brokeredCredentialSourceIDs,
}; };
// There is no "deep merge" in ES. // There is no "deep merge" in ES.
return this.save({ return this.save({
@@ -173,20 +212,46 @@ export default class TargetModel extends GeneratedTargetModel {
} }
/** /**
* Delete credential libraries via the `remove-credential-sources` method. * Adds credential sources via the `add-credential-sources` method.
* See serializer and adapter for more information. * See serializer and adapter for more information.
* @param {[string]} credentialLibraryIDs * @param {[string]} injectedApplicationCredentialSourceIDs
* @param {object} options * @param {object} options
* @param {object} options.adapterOptions * @param {object} options.adapterOptions
* @return {Promise} * @return {Promise}
*/ */
removeCredentialSources( addInjectedApplicationCredentialSources(
credentialLibraryIDs, injectedApplicationCredentialSourceIDs,
options = { adapterOptions: {} }
) {
const defaultAdapterOptions = {
method: 'add-credential-sources',
injectedApplicationCredentialSourceIDs,
};
// There is no "deep merge" in ES.
return this.save({
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions,
},
});
}
/**
* Delete credential libraries and credentials via the `remove-credential-sources` method.
* See serializer and adapter for more information.
* @param {[string]} brokeredCredentialSourceIDs
* @param {object} options
* @param {object} options.adapterOptions
* @return {Promise}
*/
removeBrokeredCredentialSources(
brokeredCredentialSourceIDs,
options = { adapterOptions: {} } options = { adapterOptions: {} }
) { ) {
const defaultAdapterOptions = { const defaultAdapterOptions = {
method: 'remove-credential-sources', method: 'remove-credential-sources',
credentialLibraryIDs, brokeredCredentialSourceIDs,
}; };
// There is no "deep merge" in ES. // There is no "deep merge" in ES.
return this.save({ return this.save({
@@ -199,21 +264,65 @@ export default class TargetModel extends GeneratedTargetModel {
} }
/** /**
* Delete a single credential library set via the `remove-credential-sources` method. * Delete a single credential library/credential set via the `remove-credential-sources` method.
* @param {number} credentialLibraryID * @param {number} brokeredCredentialSourceID
* @param {object} options * @param {object} options
* @return {Promise} * @return {Promise}
*/ */
removeCredentialSource(credentialLibraryID, options) { removeBrokeredCredentialSource(brokeredCredentialSourceID, options) {
return this.removeCredentialSources([credentialLibraryID], options); return this.removeBrokeredCredentialSources(
[brokeredCredentialSourceID],
options
);
} }
/**
* Delete credential libraries and credentials via the `remove-credential-sources` method.
* See serializer and adapter for more information.
* @param {[string]} injectedApplicationCredentialSourceIDs
* @param {object} options
* @param {object} options.adapterOptions
* @return {Promise}
*/
removeInjectedApplicationCredentialSources(
injectedApplicationCredentialSourceIDs,
options = { adapterOptions: {} }
) {
const defaultAdapterOptions = {
method: 'remove-credential-sources',
injectedApplicationCredentialSourceIDs,
};
// There is no "deep merge" in ES.
return this.save({
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions,
},
});
}
/**
* Delete a single credential library/credential set via the `remove-credential-sources` method.
* @param {number} injectedApplicationCredentialSourceID
* @param {object} options
* @return {Promise}
*/
removeInjectedApplicationCredentialSource(
injectedApplicationCredentialSourceID,
options
) {
return this.removeInjectedApplicationCredentialSources(
[injectedApplicationCredentialSourceID],
options
);
}
/** /**
* True if the target type is tcp. * True if the target type is tcp.
* @type {boolean} * @type {boolean}
*/ */
get isTCP() { get isTCP() {
return this.type === 'tcp'; return this.type === TYPE_TARGET_TCP;
} }
/** /**
@@ -221,6 +330,6 @@ export default class TargetModel extends GeneratedTargetModel {
* @type {boolean} * @type {boolean}
*/ */
get isSSH() { get isSSH() {
return this.type === 'ssh'; return this.type === TYPE_TARGET_SSH;
} }
} }
+5
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedUserModel from '../generated/models/user'; import GeneratedUserModel from '../generated/models/user';
import { attr } from '@ember-data/model'; import { attr } from '@ember-data/model';
import { computed } from '@ember/object'; import { computed } from '@ember/object';
+93
View File
@@ -0,0 +1,93 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedWorkerModel from '../generated/models/worker';
import { attr } from '@ember-data/model';
export default class WorkerModel extends GeneratedWorkerModel {
// =attributes
/**
* Names are optional on models in our API. Thus we need to fallback on ID
* for display purposes.
* @type {string}
*/
get displayName() {
return this.name || this.id;
}
/**
* Returns whether the worker is a pki worker.
* @type {boolean}
*/
get isPki() {
return this.type === 'pki';
}
/**
* Returns the number of config tags present on the worker.
* @type {number}
*/
get tagCount() {
if (!this.config_tags) {
return 0;
}
return Object.values(this.config_tags).reduce(
(previousCount, currentTags) => previousCount + currentTags.length,
0
);
}
/**
* Returns the config tags as an array of key/value pair objects.
* @type {[object]}
*/
getConfigTagList() {
if (!this.config_tags) {
return null;
}
return Object.entries(this.config_tags).flatMap(([key, value]) =>
value.map((tag) => ({ key, value: tag }))
);
}
@attr({
description:
'The deduplicated union of the tags reported by the worker ' +
'from its configuration and any tags added through other means.\nOutput only.',
readOnly: true,
})
canonical_tags;
@attr({
description:
"The tags set in the worker's configuration file.\nOutput only.",
readOnly: true,
})
config_tags;
/**
* Method to modify the adapter to handle custom POST route for creating worker.
* @param {string} workerGeneratedAuthToken
* @param {object} options
* @param {object} options.adapterOptions
* @return {Promise}
*/
createWorkerLed(workerGeneratedAuthToken, options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'create:worker-led',
workerGeneratedAuthToken,
};
return super.save({
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions,
},
});
}
}
+6 -1
View File
@@ -1,3 +1,8 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ApplicationSerializer from './application'; import ApplicationSerializer from './application';
export default class AccountSerializer extends ApplicationSerializer { export default class AccountSerializer extends ApplicationSerializer {
@@ -38,7 +43,7 @@ export default class AccountSerializer extends ApplicationSerializer {
delete serialized.attributes; delete serialized.attributes;
if (isNew) { if (isNew) {
serialized.attributes = {}; serialized.attributes = {};
const { issuer, subject } = snapshot.attr('attributes').record; const { issuer, subject } = snapshot.record;
if (issuer) serialized.attributes.issuer = issuer; if (issuer) serialized.attributes.issuer = issuer;
if (subject) serialized.attributes.subject = subject; if (subject) serialized.attributes.subject = subject;
} }
+23 -10
View File
@@ -1,7 +1,11 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import RESTSerializer from '@ember-data/serializer/rest'; import RESTSerializer from '@ember-data/serializer/rest';
import { underscore } from '@ember/string'; import { underscore } from '@ember/string';
import { get } from '@ember/object'; import { get } from '@ember/object';
import { copy } from 'ember-copy';
/** /**
* Manages serialization/normalization of data to/from the API. * Manages serialization/normalization of data to/from the API.
@@ -39,6 +43,10 @@ export default class ApplicationSerializer extends RESTSerializer {
serializeAttribute(snapshot, json, key, attribute) { serializeAttribute(snapshot, json, key, attribute) {
const { type, options } = attribute; const { type, options } = attribute;
let value = super.serializeAttribute(...arguments); let value = super.serializeAttribute(...arguments);
// Remove secret attributes that are null or empty
if (options.isSecret) {
if (type === 'string' && !json[key]) delete json[key];
}
// Convert empty strings to null. // Convert empty strings to null.
if (type === 'string' && json[key] === '') json[key] = null; if (type === 'string' && json[key] === '') json[key] = null;
// Do not serialize read-only attributes. // Do not serialize read-only attributes.
@@ -96,7 +104,7 @@ export default class ApplicationSerializer extends RESTSerializer {
delete serialized.scope; delete serialized.scope;
// And serialize `scope_id` // And serialize `scope_id`
if (this.serializeScopeID) { if (this.serializeScopeID) {
const scope_id = snapshot?.attr('scope')?.attr('scope_id'); const scope_id = snapshot?.attr('scope')?.scope_id;
if (scope_id) serialized.scope_id = scope_id; if (scope_id) serialized.scope_id = scope_id;
} }
return serialized; return serialized;
@@ -125,7 +133,7 @@ export default class ApplicationSerializer extends RESTSerializer {
); );
// Copy the data rooted under `items` in the existing payload into the new // Copy the data rooted under `items` in the existing payload into the new
// payload under the expected root key name. // payload under the expected root key name.
transformedPayload[payloadKey] = copy(payload.items, true); transformedPayload[payloadKey] = structuredClone(payload.items);
// Return the result of normalizing the transformed payload. // Return the result of normalizing the transformed payload.
return super.normalizeArrayResponse( return super.normalizeArrayResponse(
store, store,
@@ -152,7 +160,7 @@ export default class ApplicationSerializer extends RESTSerializer {
*/ */
normalizeSingleResponse(store, primaryModelClass, payload, id, requestType) { normalizeSingleResponse(store, primaryModelClass, payload, id, requestType) {
// Copy payload (mostly to prevent mocking issues) // Copy payload (mostly to prevent mocking issues)
payload = copy(payload, true); payload = structuredClone(payload);
// Check for and normalize missing arrays // Check for and normalize missing arrays
payload = this.normalizeMissingArrays(store, primaryModelClass, payload); payload = this.normalizeMissingArrays(store, primaryModelClass, payload);
// Setup a new payload data structure. // Setup a new payload data structure.
@@ -199,19 +207,24 @@ export default class ApplicationSerializer extends RESTSerializer {
} }
/** /**
* One consequence of using model fragments to represent the embedded scope * Hydrates the incoming scope JSON with additional boolean fields and
* is that they cannot have `id` fields. We still need to know scope IDs, * delegates nested attributes and secrets normalization.
* so we copy the `scope.id` value into the `scope.scope_id` field.
* @override * @override
* @see FragmentScope
* @param {Model} typeClass * @param {Model} typeClass
* @param {Object} hash * @param {Object} hash
* @return {Object} * @return {Object}
*/ */
normalize(typeClass, hash) { normalize(typeClass, hash) {
let normalizedHash = copy(hash, true); let normalizedHash = structuredClone(hash);
const scopeID = get(normalizedHash, 'scope.id'); const scopeID = get(normalizedHash, 'scope.id');
const scopeType = get(normalizedHash, 'scope.type');
if (scopeID) normalizedHash.scope.scope_id = scopeID; if (scopeID) normalizedHash.scope.scope_id = scopeID;
if (scopeType) {
normalizedHash.scope.type = scopeType;
normalizedHash.scope.isGlobal = scopeType === 'global';
normalizedHash.scope.isOrg = scopeType === 'org';
normalizedHash.scope.isProject = scopeType === 'project';
}
normalizedHash = this.normalizeNestedAttributes(typeClass, normalizedHash); normalizedHash = this.normalizeNestedAttributes(typeClass, normalizedHash);
normalizedHash = this.normalizeNestedSecrets(typeClass, normalizedHash); normalizedHash = this.normalizeNestedSecrets(typeClass, normalizedHash);
return super.normalize(typeClass, normalizedHash); return super.normalize(typeClass, normalizedHash);
@@ -291,7 +304,7 @@ export default class ApplicationSerializer extends RESTSerializer {
id, id,
requestType requestType
) { ) {
const newPayload = copy(payload, true); const newPayload = structuredClone(payload);
primaryModelClass.attributes.forEach((attribute) => { primaryModelClass.attributes.forEach((attribute) => {
const { const {
+8 -4
View File
@@ -1,5 +1,10 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ApplicationSerializer from './application'; import ApplicationSerializer from './application';
import { copy } from 'ember-copy'; import { TYPE_AUTH_METHOD_OIDC } from 'api/models/auth-method';
export default class AuthMethodSerializer extends ApplicationSerializer { export default class AuthMethodSerializer extends ApplicationSerializer {
// =methods // =methods
@@ -12,7 +17,7 @@ export default class AuthMethodSerializer extends ApplicationSerializer {
*/ */
serialize(snapshot) { serialize(snapshot) {
switch (snapshot.record.type) { switch (snapshot.record.type) {
case 'oidc': case TYPE_AUTH_METHOD_OIDC:
return this.serializeOIDC(...arguments); return this.serializeOIDC(...arguments);
default: default:
return this.serializeDefault(...arguments); return this.serializeDefault(...arguments);
@@ -81,13 +86,12 @@ export default class AuthMethodSerializer extends ApplicationSerializer {
* *
* TODO: generalize this so that all zero values are reified. * TODO: generalize this so that all zero values are reified.
* @override * @override
* @see FragmentScope
* @param {Model} typeClass * @param {Model} typeClass
* @param {Object} hash * @param {Object} hash
* @return {Object} * @return {Object}
*/ */
normalize(typeClass, hash, ...rest) { normalize(typeClass, hash, ...rest) {
let normalizedHash = copy(hash, true); let normalizedHash = structuredClone(hash);
// switch (normalizedHash.type) { // switch (normalizedHash.type) {
// case 'oidc': // case 'oidc':
// normalizedHash = this.normalizeOIDC(normalizedHash); // normalizedHash = this.normalizeOIDC(normalizedHash);
@@ -1,3 +1,63 @@
import ApplicationSerializer from './application'; /**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
export default class CredentialLibrarySerializer extends ApplicationSerializer {} import ApplicationSerializer from './application';
import {
TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC,
TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE,
} from '../models/credential-library';
export default class CredentialLibrarySerializer extends ApplicationSerializer {
// =properties
/**
* @type {boolean}
*/
serializeScopeID = false;
/**
* @override
* @method serialize
* @param {Snapshot} snapshot
*/
serialize(snapshot) {
switch (snapshot.record.type) {
case TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC:
return this.serializeVaultGeneric(...arguments);
case TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE:
default:
return super.serialize(...arguments);
}
}
serializeAttribute(snapshot, json, key, attribute) {
super.serializeAttribute(...arguments);
const { options } = attribute;
const { type } = snapshot.record;
// If an attribute has a `for` option, it must match the
// record's `type`, else the attribute is excluded
// from serialization.
if (options?.for && options.for !== type) {
if (options.isNestedAttribute) {
delete json.attributes[key];
} else {
delete json[key];
}
}
}
serializeVaultGeneric() {
const serialized = super.serialize(...arguments);
if (serialized.attributes) {
// Set `http_request_body` only if `http_method` is POST
// otherwise set to null to have the field removed
if (!serialized.attributes?.http_method?.match(/post/i)) {
serialized.attributes.http_request_body = null;
}
}
return serialized;
}
}
@@ -1,3 +1,51 @@
import ApplicationSerializer from './application'; /**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
export default class CredentialStoreSerializer extends ApplicationSerializer {} import ApplicationSerializer from './application';
export default class CredentialStoreSerializer extends ApplicationSerializer {
/**
* @override
* @method serialize
* @param {Snapshot} snapshot
*/
serialize(snapshot) {
switch (snapshot.record.type) {
case 'vault':
return this.serializeVault(...arguments);
case 'static':
default:
return this.serializeStatic(...arguments);
}
}
serializeVault() {
const serialized = super.serialize(...arguments);
if (serialized.attributes) {
// Client certificate key cannot be unset when certificate is set.
// If it's falsy, it must be removed.
if (
!serialized.attributes?.client_certificate_key &&
serialized.attributes?.client_certificate
)
delete serialized.attributes.client_certificate_key;
}
return serialized;
}
serializeStatic() {
const serialized = super.serialize(...arguments);
// Delete attributes for static cred store
delete serialized.attributes;
return serialized;
}
normalize(typeClass, hash, ...rest) {
const normalizedHash = structuredClone(hash);
const normalized = super.normalize(typeClass, normalizedHash, ...rest);
// Remove secret fields as we don't track them after being created/updated
normalized.data.attributes.token = '';
return normalized;
}
}
@@ -0,0 +1,48 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import ApplicationSerializer from './application';
export default class CredentialSerializer extends ApplicationSerializer {
/**
* @override
* @method serialize
* @param {Snapshot} snapshot
*/
/**
* @type {boolean}
*/
serializeScopeID = false;
serialize() {
const serialized = super.serialize(...arguments);
if (serialized.type === 'json') {
delete serialized.attributes.username;
if (serialized?.attributes?.json_object) {
serialized.attributes.object = JSON.parse(
serialized.attributes.json_object
);
delete serialized.attributes.json_object;
}
} else {
delete serialized.attributes.json_object;
}
return serialized;
}
normalize(typeClass, hash, ...rest) {
const normalizedHash = structuredClone(hash);
const normalized = super.normalize(typeClass, normalizedHash, ...rest);
// Remove secret fields as we don't track them after being created/updated
normalized.data.attributes.password = '';
normalized.data.attributes.private_key = '';
normalized.data.attributes.private_key_passphrase = '';
normalized.data.attributes.json_object = '';
return normalized;
}
}
@@ -1,26 +0,0 @@
import JSONSerializer from '@ember-data/serializer/json';
export default class FragmentAccountAttributesSerializer extends JSONSerializer {
/**
* If an attribute is annotated as readOnly in the model, don't serialize it.
* Otherwise delegate to default attribute serializer.
*
* @override
* @method serializeAttribute
* @param {Snapshot} snapshot
* @param {Object} json
* @param {String} key
* @param {Object} attribute
*/
serializeAttribute(snapshot, json, key, attribute) {
const { type, options } = attribute;
let value = super.serializeAttribute(...arguments);
// Convert empty strings to null.
if (type === 'string' && json[key] === '') json[key] = null;
// Do not serialize read-only attributes.
if (options.readOnly) delete json[key];
// Client secret cannot be unset. If it's falsy, it must be removed.
if (key === 'client_secret' && !json[key]) delete json[key];
return value;
}
}
@@ -1,30 +0,0 @@
import JSONSerializer from '@ember-data/serializer/json';
export default class FragmentHostSourceSerializer extends JSONSerializer {
// =methods
/**
* Serializes an account claim to string.
* @param {Snapshot} snapshot
* @return {string}
*/
serialize(snapshot) {
const from = snapshot.attr('from');
const to = snapshot.attr('to');
return `${from}=${to}`;
}
/**
* Normalizes account claim strings into JSON API objects.
* @param {Model} typeClass
* @param {string} value
* @return {object}
*/
normalize(typeClass, value) {
const normalizedHash = {
from: value.split('=')[0],
to: value.split('=')[1],
};
return super.normalize(typeClass, normalizedHash);
}
}
@@ -1,26 +0,0 @@
import JSONSerializer from '@ember-data/serializer/json';
export default class FragmentAuthMethodAttributesSerializer extends JSONSerializer {
/**
* If an attribute is annotated as readOnly in the model, don't serialize it.
* Otherwise delegate to default attribute serializer.
*
* @override
* @method serializeAttribute
* @param {Snapshot} snapshot
* @param {Object} json
* @param {String} key
* @param {Object} attribute
*/
serializeAttribute(snapshot, json, key, attribute) {
const { type, options } = attribute;
let value = super.serializeAttribute(...arguments);
// Convert empty strings to null.
if (type === 'string' && json[key] === '') json[key] = null;
// Do not serialize read-only attributes.
if (options.readOnly) delete json[key];
// Client secret cannot be unset. If it's falsy, it must be removed.
if (key === 'client_secret' && !json[key]) delete json[key];
return value;
}
}
@@ -1,27 +0,0 @@
import JSONSerializer from '@ember-data/serializer/json';
export default class FragmentCredentialLibraryAttributesSerializer extends JSONSerializer {
/**
* If an attribute is annotated as readOnly in the model, don't serialize it.
* Otherwise delegate to default attribute serializer.
* Only serialize http_request_body when `http_method` is set to `POST`.
* @override
* @method serializeAttribute
* @param {Snapshot} snapshot
* @param {Object} json
* @param {String} key
* @param {Object} attribute
*/
serializeAttribute(snapshot, json, key, attribute) {
const { type, options } = attribute;
let value = super.serializeAttribute(...arguments);
// Convert empty strings to null.
if (type === 'string' && json[key] === '') json[key] = null;
// Do not serialize read-only attributes.
if (options.readOnly) delete json[key];
// Do not serialize http_request_body unless http_method is POST
if (key === 'http_request_body' && !json['http_method']?.match(/post/i))
delete json[key];
return value;
}
}
@@ -1,34 +0,0 @@
import JSONSerializer from '@ember-data/serializer/json';
export default class FragmentCredentialStoreAttributesSerializer extends JSONSerializer {
/**
* If an attribute is annotated as readOnly in the model, don't serialize it.
* Otherwise delegate to default attribute serializer.
*
* @override
* @method serializeAttribute
* @param {Snapshot} snapshot
* @param {Object} json
* @param {String} key
* @param {Object} attribute
*/
serializeAttribute(snapshot, json, key, attribute) {
const { type, options } = attribute;
let value = super.serializeAttribute(...arguments);
// Convert empty strings to null.
if (type === 'string' && json[key] === '') json[key] = null;
// Do not serialize read-only attributes.
if (options.readOnly) delete json[key];
// Token cannot be unset. If it's falsy, it must be removed.
if (key === 'token' && !json[key]) delete json[key];
// Client certificate key cannot be unset when certificate is set.
// If it's falsy, it must be removed.
if (
key === 'client_certificate_key' &&
!json[key] &&
json['client_certificate']
)
delete json[key];
return value;
}
}
@@ -1,16 +0,0 @@
import JSONSerializer from '@ember-data/serializer/json';
export default class FragmentHostSourceSerializer extends JSONSerializer {
// =methods
/**
* Renames `id` to `host_source_id` because fragments may not have IDs.
* Otherwise normalizes as normal.
* @param {ModelClass} typeClass
* @param {object} resourceHash
* @return {object}
*/
normalize(typeClass, { id: host_source_id, ...obj }) {
return super.normalize(typeClass, { host_source_id, ...obj });
}
}
Loaded 100 of 1933 files, more files were not shown because too many files have changed in this diff. Show more