mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-11-01 19:17:58 +00:00
Ember Upgrade to 4.4 (#17086)
* runs ember-cli-update to 4.4.0 * updates yarn.lock * updates dependencies causing runtime errors (#17135) * Inject Store Service When Accessed Implicitly (#17345) * adds codemod for injecting store service * adds custom babylon parser with decorators-legacy plugin for jscodeshift transforms * updates inject-store-service codemod to only look for .extend object expressions and adds recast options * runs inject-store-service codemod on js files * replace query-params helper with hash (#17404) * Updates/removes dependencies throwing errors in Ember 4.4 (#17396) * updates ember-responsive to latest * updates ember-composable-helpers to latest and uses includes helper since contains was removed * updates ember-concurrency to latest * updates ember-cli-clipboard to latest * temporary workaround for toolbar-link component throwing errors for using params arg with LinkTo * adds missing store injection to auth configure route * fixes issue with string-list component throwing error for accessing prop in same computation * fixes non-iterable query params issue in mfa methods controller * refactors field-to-attrs to handle belongsTo rather than fragments * converts mount-config fragment to belongsTo on auth-method model * removes ember-api-actions and adds tune method to auth-method adapter * converts cluster replication attributes from fragment to relationship * updates ember-data, removes ember-data-fragments and updates yarn to latest * removes fragments from secret-engine model * removes fragment from test-form-model * removes commented out code * minor change to inject-store-service codemod and runs again on js files * Remove LinkTo positional params (#17421) * updates ember-cli-page-object to latest version * update toolbar-link to support link-to args and not positional params * adds replace arg to toolbar-link component * Clean up js lint errors (#17426) * replaces assert.equal to assert.strictEqual * update eslint no-console to error and disables invididual intended uses of console * cleans up hbs lint warnings (#17432) * Upgrade bug and test fixes (#17500) * updates inject-service codemod to take arg for service name and runs for flashMessages service * fixes hbs lint error after merging main * fixes flash messages * updates more deps * bug fixes * test fixes * updates ember-cli-content-security-policy and prevents default form submission throwing errors * more bug and test fixes * removes commented out code * fixes issue with code-mirror modifier sending change event on setup causing same computation error * Upgrade Clean Up (#17543) * updates deprecation workflow and filter * cleans up build errors, removes unused ivy-codemirror and sass and updates ember-cli-sass and node-sass to latest * fixes control groups test that was skipped after upgrade * updates control group service tests * addresses review feedback * updates control group service handleError method to use router.currentURL rather that transition.intent.url * adds changelog entry
This commit is contained in:
3
changelog/17086.txt
Normal file
3
changelog/17086.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
```release-note:change
|
||||||
|
ui: Upgrade Ember to version 4.4.0
|
||||||
|
```
|
||||||
@@ -6,5 +6,11 @@
|
|||||||
Setting `disableAnalytics` to true will prevent any data from being sent.
|
Setting `disableAnalytics` to true will prevent any data from being sent.
|
||||||
*/
|
*/
|
||||||
"disableAnalytics": true,
|
"disableAnalytics": true,
|
||||||
"output-path": "../http/web_ui"
|
"output-path": "../http/web_ui",
|
||||||
|
|
||||||
|
/**
|
||||||
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,8 @@
|
|||||||
# ember-try
|
# ember-try
|
||||||
/.node_modules.ember-try/
|
/.node_modules.ember-try/
|
||||||
/bower.json.ember-try
|
/bower.json.ember-try
|
||||||
|
/npm-shrinkwrap.json.ember-try
|
||||||
/package.json.ember-try
|
/package.json.ember-try
|
||||||
|
/package-lock.json.ember-try
|
||||||
|
/yarn.lock.ember-try
|
||||||
/tests/helpers/vault-keys.js
|
/tests/helpers/vault-keys.js
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ module.exports = {
|
|||||||
browser: true,
|
browser: true,
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
'no-console': 'warn',
|
'no-console': 'error',
|
||||||
'ember/no-mixins': 'warn',
|
'ember/no-mixins': 'warn',
|
||||||
'ember/no-new-mixins': 'off', // should be warn but then every line of the mixin is green
|
'ember/no-new-mixins': 'off', // should be warn but then every line of the mixin is green
|
||||||
// need to be fully glimmerized before these rules can be turned on
|
// need to be fully glimmerized before these rules can be turned on
|
||||||
@@ -63,7 +63,7 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// Test files:
|
// test files
|
||||||
files: ['tests/**/*-test.{js,ts}'],
|
files: ['tests/**/*-test.{js,ts}'],
|
||||||
extends: ['plugin:qunit/recommended'],
|
extends: ['plugin:qunit/recommended'],
|
||||||
},
|
},
|
||||||
|
|||||||
45
ui/.github/workflows/ci.yml
vendored
Normal file
45
ui/.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
pull_request: {}
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ci-${{ github.head_ref || github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
name: "Lint"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Install Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 12.x
|
||||||
|
cache: yarn
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: yarn install --frozen-lockfile
|
||||||
|
- name: Lint
|
||||||
|
run: yarn lint
|
||||||
|
|
||||||
|
test:
|
||||||
|
name: "Test"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Install Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 12.x
|
||||||
|
cache: yarn
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: yarn install --frozen-lockfile
|
||||||
|
- name: Run Tests
|
||||||
|
run: yarn test
|
||||||
6
ui/.gitignore
vendored
6
ui/.gitignore
vendored
@@ -22,4 +22,10 @@ package-lock.json
|
|||||||
# ember-try
|
# ember-try
|
||||||
/.node_modules.ember-try/
|
/.node_modules.ember-try/
|
||||||
/bower.json.ember-try
|
/bower.json.ember-try
|
||||||
|
/npm-shrinkwrap.json.ember-try
|
||||||
/package.json.ember-try
|
/package.json.ember-try
|
||||||
|
/package-lock.json.ember-try
|
||||||
|
/yarn.lock.ember-try
|
||||||
|
|
||||||
|
# broccoli-debug
|
||||||
|
/DEBUG/
|
||||||
|
|||||||
@@ -14,8 +14,12 @@
|
|||||||
/coverage/
|
/coverage/
|
||||||
!.*
|
!.*
|
||||||
.eslintcache
|
.eslintcache
|
||||||
|
.lint-todo/
|
||||||
|
|
||||||
# ember-try
|
# ember-try
|
||||||
/.node_modules.ember-try/
|
/.node_modules.ember-try/
|
||||||
/bower.json.ember-try
|
/bower.json.ember-try
|
||||||
|
/npm-shrinkwrap.json.ember-try
|
||||||
/package.json.ember-try
|
/package.json.ember-try
|
||||||
|
/package-lock.json.ember-try
|
||||||
|
/yarn.lock.ember-try
|
||||||
|
|||||||
@@ -29,22 +29,18 @@ try {
|
|||||||
prettier: false,
|
prettier: false,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error); // eslint-disable-line
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
plugins: ['ember-template-lint-plugin-prettier'],
|
plugins: ['ember-template-lint-plugin-prettier'],
|
||||||
extends: ['recommended', 'ember-template-lint-plugin-prettier:recommended'],
|
extends: ['recommended', 'ember-template-lint-plugin-prettier:recommended'],
|
||||||
rules: {
|
rules: {
|
||||||
'no-bare-strings': 'off',
|
|
||||||
'no-action': 'off',
|
'no-action': 'off',
|
||||||
'no-duplicate-landmark-elements': 'warn',
|
|
||||||
'no-implicit-this': {
|
'no-implicit-this': {
|
||||||
allow: ['supported-auth-backends'],
|
allow: ['supported-auth-backends'],
|
||||||
},
|
},
|
||||||
'require-input-label': 'off',
|
'require-input-label': 'off',
|
||||||
'no-down-event-binding': 'warn',
|
|
||||||
'self-closing-void-elements': 'off',
|
|
||||||
},
|
},
|
||||||
ignore: ['lib/story-md', 'tests/**'],
|
ignore: ['lib/story-md', 'tests/**'],
|
||||||
// ember language server vscode extension does not currently respect the ignore field
|
// ember language server vscode extension does not currently respect the ignore field
|
||||||
|
|||||||
175346
ui/.yarn/releases/yarn-1.22.19.js
vendored
Executable file
175346
ui/.yarn/releases/yarn-1.22.19.js
vendored
Executable file
File diff suppressed because one or more lines are too long
@@ -2,5 +2,5 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
lastUpdateCheck 1572032507422
|
lastUpdateCheck 1664829239911
|
||||||
yarn-path ".yarn/releases/yarn-1.19.1.js"
|
yarn-path ".yarn/releases/yarn-1.22.19.js"
|
||||||
|
|||||||
20
ui/README.md
20
ui/README.md
@@ -24,6 +24,7 @@ This README outlines the details of collaborating on this Ember application.
|
|||||||
|
|
||||||
| Vault Version | Ember Version |
|
| Vault Version | Ember Version |
|
||||||
| ------------- | ------------- |
|
| ------------- | ------------- |
|
||||||
|
| 1.13.x | 4.4.0 |
|
||||||
| 1.10.x | 3.28.5 |
|
| 1.10.x | 3.28.5 |
|
||||||
| 1.9.x | 3.22.0 |
|
| 1.9.x | 3.22.0 |
|
||||||
| 1.8.x | 3.22.0 |
|
| 1.8.x | 3.22.0 |
|
||||||
@@ -33,10 +34,11 @@ This README outlines the details of collaborating on this Ember application.
|
|||||||
|
|
||||||
You will need the following things properly installed on your computer.
|
You will need the following things properly installed on your computer.
|
||||||
|
|
||||||
- [Node.js](https://nodejs.org/) (with NPM)
|
* [Git](https://git-scm.com/)
|
||||||
- [Yarn](https://yarnpkg.com/en/)
|
* [Node.js](https://nodejs.org/)
|
||||||
- [Git](https://git-scm.com/)
|
* [Yarn](https://yarnpkg.com/)
|
||||||
- [Ember CLI](https://ember-cli.com/)
|
* [Ember CLI](https://cli.emberjs.com/release/)
|
||||||
|
* [Google Chrome](https://google.com/chrome/)
|
||||||
- [lint-staged\*](https://www.npmjs.com/package/lint-staged)
|
- [lint-staged\*](https://www.npmjs.com/package/lint-staged)
|
||||||
|
|
||||||
\* lint-staged is an optional dependency - running `yarn` will install it.
|
\* lint-staged is an optional dependency - running `yarn` will install it.
|
||||||
@@ -127,8 +129,8 @@ setting `VAULT_UI` environment variable.
|
|||||||
|
|
||||||
## Further Reading / Useful Links
|
## Further Reading / Useful Links
|
||||||
|
|
||||||
- [ember.js](http://emberjs.com/)
|
* [ember.js](https://emberjs.com/)
|
||||||
- [ember-cli](https://ember-cli.com/)
|
* [ember-cli](https://cli.emberjs.com/release/)
|
||||||
- Development Browser Extensions
|
* Development Browser Extensions
|
||||||
- [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi)
|
* [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi)
|
||||||
- [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/)
|
* [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ export default ApplicationAdapter.extend({
|
|||||||
return path ? url + '/' + encodePath(path) : url;
|
return path ? url + '/' + encodePath(path) : url;
|
||||||
},
|
},
|
||||||
|
|
||||||
// used in updateRecord on the model#tune action
|
// used in updateRecord
|
||||||
pathForType() {
|
pathForType() {
|
||||||
return 'mounts/auth';
|
return 'mounts/auth';
|
||||||
},
|
},
|
||||||
@@ -48,6 +48,7 @@ export default ApplicationAdapter.extend({
|
|||||||
|
|
||||||
return this.ajax(this.url(path), 'POST', { data }).then(() => {
|
return this.ajax(this.url(path), 'POST', { data }).then(() => {
|
||||||
// ember data doesn't like 204s if it's not a DELETE
|
// ember data doesn't like 204s if it's not a DELETE
|
||||||
|
data.config.id = path; // config relationship needs an id so use path for now
|
||||||
return {
|
return {
|
||||||
data: assign({}, data, { path: path + '/', id: path }),
|
data: assign({}, data, { path: path + '/', id: path }),
|
||||||
};
|
};
|
||||||
@@ -61,4 +62,9 @@ export default ApplicationAdapter.extend({
|
|||||||
exchangeOIDC(path, state, code) {
|
exchangeOIDC(path, state, code) {
|
||||||
return this.ajax(`/v1/auth/${encodePath(path)}/oidc/callback`, 'GET', { data: { state, code } });
|
return this.ajax(`/v1/auth/${encodePath(path)}/oidc/callback`, 'GET', { data: { state, code } });
|
||||||
},
|
},
|
||||||
|
|
||||||
|
tune(path, data) {
|
||||||
|
const url = `${this.buildURL()}/${this.pathForType()}/${encodePath(path)}tune`;
|
||||||
|
return this.ajax(url, 'POST', { data });
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
import { assign } from '@ember/polyfills';
|
import { assign } from '@ember/polyfills';
|
||||||
import ApplicationAdapter from './application';
|
import ApplicationAdapter from './application';
|
||||||
import { task } from 'ember-concurrency';
|
import { task } from 'ember-concurrency';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default ApplicationAdapter.extend({
|
export default ApplicationAdapter.extend({
|
||||||
|
store: service(),
|
||||||
namespace: 'v1',
|
namespace: 'v1',
|
||||||
urlForItem() {},
|
urlForItem() {},
|
||||||
dynamicApiPath: '',
|
dynamicApiPath: '',
|
||||||
|
|
||||||
getDynamicApiPath: task(function* (id) {
|
getDynamicApiPath: task(function* (id) {
|
||||||
// TODO: remove yield at some point.
|
// TODO: remove yield at some point.
|
||||||
let result = yield this.store.peekRecord('auth-method', id);
|
let result = yield this.store.peekRecord('auth-method', id);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import ApplicationAdapter from '../application';
|
import ApplicationAdapter from '../application';
|
||||||
import { encodePath } from 'vault/utils/path-encoding-helpers';
|
import { encodePath } from 'vault/utils/path-encoding-helpers';
|
||||||
import ControlGroupError from '../../lib/control-group-error';
|
import ControlGroupError from '../../lib/control-group-error';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
function pickKeys(obj, picklist) {
|
function pickKeys(obj, picklist) {
|
||||||
const data = {};
|
const data = {};
|
||||||
@@ -11,7 +12,9 @@ function pickKeys(obj, picklist) {
|
|||||||
});
|
});
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class KeymgmtKeyAdapter extends ApplicationAdapter {
|
export default class KeymgmtKeyAdapter extends ApplicationAdapter {
|
||||||
|
@service store;
|
||||||
namespace = 'v1';
|
namespace = 'v1';
|
||||||
|
|
||||||
pathForType() {
|
pathForType() {
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ export default ApplicationAdapter.extend({
|
|||||||
let data = serializer.serialize(snapshot);
|
let data = serializer.serialize(snapshot);
|
||||||
const path = snapshot.attr('path');
|
const path = snapshot.attr('path');
|
||||||
// for kv2 we make two network requests
|
// for kv2 we make two network requests
|
||||||
|
data.config.id = path; // config relationship needs an id so use path for now
|
||||||
if (data.type === 'kv' && data.options.version === 2) {
|
if (data.type === 'kv' && data.options.version === 2) {
|
||||||
// data has both data for sys mount and the config, we need to separate them
|
// data has both data for sys mount and the config, we need to separate them
|
||||||
let splitObjects = splitObject(data, ['max_versions', 'delete_version_after', 'cas_required']);
|
let splitObjects = splitObject(data, ['max_versions', 'delete_version_after', 'cas_required']);
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
import AdapterError from '@ember-data/adapter/error';
|
import AdapterError from '@ember-data/adapter/error';
|
||||||
|
|
||||||
import { isEmpty } from '@ember/utils';
|
import { isEmpty } from '@ember/utils';
|
||||||
import { get } from '@ember/object';
|
import { get } from '@ember/object';
|
||||||
import ApplicationAdapter from './application';
|
import ApplicationAdapter from './application';
|
||||||
import { encodePath } from 'vault/utils/path-encoding-helpers';
|
import { encodePath } from 'vault/utils/path-encoding-helpers';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default ApplicationAdapter.extend({
|
export default ApplicationAdapter.extend({
|
||||||
|
store: service(),
|
||||||
namespace: 'v1',
|
namespace: 'v1',
|
||||||
|
|
||||||
_url(backend, id, infix = 'data') {
|
_url(backend, id, infix = 'data') {
|
||||||
let url = `${this.buildURL()}/${encodePath(backend)}/${infix}/`;
|
let url = `${this.buildURL()}/${encodePath(backend)}/${infix}/`;
|
||||||
if (!isEmpty(id)) {
|
if (!isEmpty(id)) {
|
||||||
|
|||||||
@@ -18,8 +18,10 @@ import { waitFor } from '@ember/test-waiters';
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export default AuthConfigComponent.extend({
|
export default AuthConfigComponent.extend({
|
||||||
|
flashMessages: service(),
|
||||||
router: service(),
|
router: service(),
|
||||||
wizard: service(),
|
wizard: service(),
|
||||||
|
|
||||||
saveModel: task(
|
saveModel: task(
|
||||||
waitFor(function* () {
|
waitFor(function* () {
|
||||||
let data = this.model.config.serialize();
|
let data = this.model.config.serialize();
|
||||||
|
|||||||
@@ -277,7 +277,6 @@ export default Component.extend(DEFAULTS, {
|
|||||||
|
|
||||||
delayAuthMessageReminder: task(function* () {
|
delayAuthMessageReminder: task(function* () {
|
||||||
if (Ember.testing) {
|
if (Ember.testing) {
|
||||||
this.showLoading = true;
|
|
||||||
yield timeout(0);
|
yield timeout(0);
|
||||||
} else {
|
} else {
|
||||||
yield timeout(5000);
|
yield timeout(5000);
|
||||||
@@ -285,15 +284,9 @@ export default Component.extend(DEFAULTS, {
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
doSubmit() {
|
doSubmit(passedData, event) {
|
||||||
let passedData, e;
|
if (event) {
|
||||||
if (arguments.length > 1) {
|
event.preventDefault();
|
||||||
[passedData, e] = arguments;
|
|
||||||
} else {
|
|
||||||
[e] = arguments;
|
|
||||||
}
|
|
||||||
if (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
}
|
}
|
||||||
let data = {};
|
let data = {};
|
||||||
this.setProperties({
|
this.setProperties({
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ class CalendarWidget extends Component {
|
|||||||
const year = this.args.endTimeDisplay.split(' ')[1];
|
const year = this.args.endTimeDisplay.split(' ')[1];
|
||||||
setYear = parseInt(year);
|
setYear = parseInt(year);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.debug('Error resetting display year', e);
|
console.debug('Error resetting display year', e); // eslint-disable-line
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.displayYear = setYear;
|
this.displayYear = setYear;
|
||||||
|
|||||||
@@ -49,9 +49,10 @@ export default class LineChart extends Component {
|
|||||||
const upgradeData = this.args.upgradeData;
|
const upgradeData = this.args.upgradeData;
|
||||||
if (!upgradeData) return null;
|
if (!upgradeData) return null;
|
||||||
if (!Array.isArray(upgradeData)) {
|
if (!Array.isArray(upgradeData)) {
|
||||||
console.debug('upgradeData must be an array of objects containing upgrade history');
|
console.debug('upgradeData must be an array of objects containing upgrade history'); // eslint-disable-line
|
||||||
return null;
|
return null;
|
||||||
} else if (!Object.keys(upgradeData[0]).includes('timestampInstalled')) {
|
} else if (!Object.keys(upgradeData[0]).includes('timestampInstalled')) {
|
||||||
|
// eslint-disable-next-line
|
||||||
console.debug(
|
console.debug(
|
||||||
`upgrade must be an object with the following key names: ['id', 'previousVersion', 'timestampInstalled']`
|
`upgrade must be an object with the following key names: ['id', 'previousVersion', 'timestampInstalled']`
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -31,12 +31,14 @@ import { action } from '@ember/object';
|
|||||||
*/
|
*/
|
||||||
export default class ConfigureAwsSecretComponent extends Component {
|
export default class ConfigureAwsSecretComponent extends Component {
|
||||||
@action
|
@action
|
||||||
saveRootCreds(data) {
|
saveRootCreds(data, event) {
|
||||||
|
event.preventDefault();
|
||||||
this.args.saveAWSRoot(data);
|
this.args.saveAWSRoot(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
saveLease(data) {
|
saveLease(data, event) {
|
||||||
|
event.preventDefault();
|
||||||
this.args.saveAWSLease(data);
|
this.args.saveAWSLease(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ import { action } from '@ember/object';
|
|||||||
*/
|
*/
|
||||||
export default class ConfigureSshSecretComponent extends Component {
|
export default class ConfigureSshSecretComponent extends Component {
|
||||||
@action
|
@action
|
||||||
saveConfig(data) {
|
saveConfig(data, event) {
|
||||||
|
event.preventDefault();
|
||||||
this.args.saveConfig(data);
|
this.args.saveConfig(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ export default class DatabaseRoleEdit extends Component {
|
|||||||
try {
|
try {
|
||||||
this.router.transitionTo(LIST_ROOT_ROUTE, backend, { queryParams: { tab: 'role' } });
|
this.router.transitionTo(LIST_ROOT_ROUTE, backend, { queryParams: { tab: 'role' } });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.debug(e);
|
console.debug(e); // eslint-disable-line
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
@@ -97,7 +97,7 @@ export default class DatabaseRoleEdit extends Component {
|
|||||||
try {
|
try {
|
||||||
this.router.transitionTo(SHOW_ROUTE, `role/${secretId}`);
|
this.router.transitionTo(SHOW_ROUTE, `role/${secretId}`);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.debug(e);
|
console.debug(e); // eslint-disable-line
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import Component from '@glimmer/component';
|
|||||||
import { inject as service } from '@ember/service';
|
import { inject as service } from '@ember/service';
|
||||||
import { action } from '@ember/object';
|
import { action } from '@ember/object';
|
||||||
import { tracked } from '@glimmer/tracking';
|
import { tracked } from '@glimmer/tracking';
|
||||||
|
import { htmlSafe } from '@ember/template';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @module DiffVersionSelector
|
* @module DiffVersionSelector
|
||||||
@@ -57,10 +58,11 @@ export default class DiffVersionSelector extends Component {
|
|||||||
let delta = diffpatcher.diff(rightSideVersionData, leftSideVersionData);
|
let delta = diffpatcher.diff(rightSideVersionData, leftSideVersionData);
|
||||||
if (delta === undefined) {
|
if (delta === undefined) {
|
||||||
this.statesMatch = true;
|
this.statesMatch = true;
|
||||||
this.visualDiff = JSON.stringify(leftSideVersionData, undefined, 2); // params: value, replacer (all properties included), space (white space and indentation, line break, etc.)
|
// params: value, replacer (all properties included), space (white space and indentation, line break, etc.)
|
||||||
|
this.visualDiff = htmlSafe(JSON.stringify(leftSideVersionData, undefined, 2));
|
||||||
} else {
|
} else {
|
||||||
this.statesMatch = false;
|
this.statesMatch = false;
|
||||||
this.visualDiff = jsondiffpatch.formatters.html.format(delta, rightSideVersionData);
|
this.visualDiff = htmlSafe(jsondiffpatch.formatters.html.format(delta, rightSideVersionData));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,10 @@
|
|||||||
import { computed } from '@ember/object';
|
|
||||||
import FlashMessage from 'ember-cli-flash/components/flash-message';
|
import FlashMessage from 'ember-cli-flash/components/flash-message';
|
||||||
|
|
||||||
export default FlashMessage.extend({
|
export default class FlashMessageComponent extends FlashMessage {
|
||||||
// override alertType to get Bulma specific prefix
|
// override alertType to get Bulma specific prefix
|
||||||
//https://github.com/poteto/ember-cli-flash/blob/master/addon/components/flash-message.js#L35
|
//https://github.com/poteto/ember-cli-flash/blob/master/addon/components/flash-message.js#L55
|
||||||
alertType: computed('flash.type', {
|
get alertType() {
|
||||||
get() {
|
const flashType = this.args.flash.type || '';
|
||||||
const flashType = this.flash.type || '';
|
return `is-${flashType}`;
|
||||||
let prefix = 'is-';
|
}
|
||||||
|
}
|
||||||
return `${prefix}${flashType}`;
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|||||||
@@ -66,7 +66,9 @@ export default Component.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
willDestroy() {
|
willDestroy() {
|
||||||
|
if (!this.model.isDestroyed && !this.model.isDestroying) {
|
||||||
this.model.unloadRecord();
|
this.model.unloadRecord();
|
||||||
|
}
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -33,12 +33,6 @@ import KVObject from 'vault/lib/kv-object';
|
|||||||
export default class KvObjectEditor extends Component {
|
export default class KvObjectEditor extends Component {
|
||||||
@tracked kvData;
|
@tracked kvData;
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super(...arguments);
|
|
||||||
this.kvData = KVObject.create({ content: [] }).fromJSON(this.args.value);
|
|
||||||
this.addRow();
|
|
||||||
}
|
|
||||||
|
|
||||||
get placeholders() {
|
get placeholders() {
|
||||||
return {
|
return {
|
||||||
key: this.args.keyPlaceholder || 'key',
|
key: this.args.keyPlaceholder || 'key',
|
||||||
@@ -49,6 +43,12 @@ export default class KvObjectEditor extends Component {
|
|||||||
return this.kvData.uniqBy('name').length !== this.kvData.get('length');
|
return this.kvData.uniqBy('name').length !== this.kvData.get('length');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fired on did-insert from render modifier
|
||||||
|
@action
|
||||||
|
createKvData(elem, [value]) {
|
||||||
|
this.kvData = KVObject.create({ content: [] }).fromJSON(value);
|
||||||
|
this.addRow();
|
||||||
|
}
|
||||||
@action
|
@action
|
||||||
addRow() {
|
addRow() {
|
||||||
if (!isNone(this.kvData.findBy('name', ''))) {
|
if (!isNone(this.kvData.findBy('name', ''))) {
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ export default class MountBackendForm extends Component {
|
|||||||
const type = this.args.mountType || 'auth';
|
const type = this.args.mountType || 'auth';
|
||||||
const modelType = type === 'secret' ? 'secret-engine' : 'auth-method';
|
const modelType = type === 'secret' ? 'secret-engine' : 'auth-method';
|
||||||
const model = this.store.createRecord(modelType);
|
const model = this.store.createRecord(modelType);
|
||||||
|
model.set('config', this.store.createRecord('mount-config'));
|
||||||
this.mountModel = model;
|
this.mountModel = model;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +95,8 @@ export default class MountBackendForm extends Component {
|
|||||||
|
|
||||||
@task
|
@task
|
||||||
@waitFor
|
@waitFor
|
||||||
*mountBackend() {
|
*mountBackend(event) {
|
||||||
|
event.preventDefault();
|
||||||
const mountModel = this.mountModel;
|
const mountModel = this.mountModel;
|
||||||
const { type, path } = mountModel;
|
const { type, path } = mountModel;
|
||||||
// only submit form if validations pass
|
// only submit form if validations pass
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ export default class OidcConsentBlockComponent extends Component {
|
|||||||
});
|
});
|
||||||
return url;
|
return url;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.debug('DEBUG: parsing url failed for', urlString);
|
console.debug('DEBUG: parsing url failed for', urlString); // eslint-disable-line
|
||||||
throw new Error('Invalid URL');
|
throw new Error('Invalid URL');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,12 +31,6 @@ export default class OidcProviderForm extends Component {
|
|||||||
? 'allow_all'
|
? 'allow_all'
|
||||||
: 'limited';
|
: 'limited';
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super(...arguments);
|
|
||||||
const { model } = this.args;
|
|
||||||
model.issuer = model.isNew ? '' : parseURL(model.issuer).origin;
|
|
||||||
}
|
|
||||||
|
|
||||||
// function passed to search select
|
// function passed to search select
|
||||||
renderInfoTooltip(selection, dropdownOptions) {
|
renderInfoTooltip(selection, dropdownOptions) {
|
||||||
// if a client has been deleted it will not exist in dropdownOptions (response from search select's query)
|
// if a client has been deleted it will not exist in dropdownOptions (response from search select's query)
|
||||||
@@ -44,6 +38,12 @@ export default class OidcProviderForm extends Component {
|
|||||||
return !clientExists ? 'The application associated with this client_id no longer exists' : false;
|
return !clientExists ? 'The application associated with this client_id no longer exists' : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fired on did-insert from render modifier
|
||||||
|
@action
|
||||||
|
setIssuer(elem, [model]) {
|
||||||
|
model.issuer = model.isNew ? '' : parseURL(model.issuer).origin;
|
||||||
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
handleClientSelection(selection) {
|
handleClientSelection(selection) {
|
||||||
// if array then coming from search-select component, set selection as model clients
|
// if array then coming from search-select component, set selection as model clients
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ export default Component.extend({
|
|||||||
|
|
||||||
willDestroy() {
|
willDestroy() {
|
||||||
const ca = this.model;
|
const ca = this.model;
|
||||||
if (ca) {
|
if (ca && !ca.isDestroyed && !ca.isDestroying) {
|
||||||
ca.unloadRecord();
|
ca.unloadRecord();
|
||||||
}
|
}
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ export default Component.extend({
|
|||||||
preference: 'join',
|
preference: 'join',
|
||||||
showJoinForm: false,
|
showJoinForm: false,
|
||||||
actions: {
|
actions: {
|
||||||
advanceFirstScreen() {
|
advanceFirstScreen(event) {
|
||||||
|
event.preventDefault();
|
||||||
if (this.preference !== 'join') {
|
if (this.preference !== 'join') {
|
||||||
this.onDismiss();
|
this.onDismiss();
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -27,11 +27,9 @@ import Component from '@glimmer/component';
|
|||||||
import ControlGroupError from 'vault/lib/control-group-error';
|
import ControlGroupError from 'vault/lib/control-group-error';
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
import keys from 'vault/lib/keycodes';
|
import keys from 'vault/lib/keycodes';
|
||||||
|
|
||||||
import { action, set } from '@ember/object';
|
import { action, set } from '@ember/object';
|
||||||
import { inject as service } from '@ember/service';
|
import { inject as service } from '@ember/service';
|
||||||
import { tracked } from '@glimmer/tracking';
|
import { tracked } from '@glimmer/tracking';
|
||||||
|
|
||||||
import { isBlank, isNone } from '@ember/utils';
|
import { isBlank, isNone } from '@ember/utils';
|
||||||
import { task, waitForEvent } from 'ember-concurrency';
|
import { task, waitForEvent } from 'ember-concurrency';
|
||||||
|
|
||||||
@@ -52,9 +50,9 @@ export default class SecretCreateOrUpdate extends Component {
|
|||||||
@service store;
|
@service store;
|
||||||
@service wizard;
|
@service wizard;
|
||||||
|
|
||||||
constructor() {
|
@action
|
||||||
super(...arguments);
|
setup(elem, [secretData, model, mode]) {
|
||||||
this.codemirrorString = this.args.secretData.toJSONString();
|
this.codemirrorString = secretData.toJSONString();
|
||||||
this.validationMessages = {
|
this.validationMessages = {
|
||||||
path: '',
|
path: '',
|
||||||
};
|
};
|
||||||
@@ -62,16 +60,16 @@ export default class SecretCreateOrUpdate extends Component {
|
|||||||
if (Ember.testing) {
|
if (Ember.testing) {
|
||||||
this.secretPaths = ['beep', 'bop', 'boop'];
|
this.secretPaths = ['beep', 'bop', 'boop'];
|
||||||
} else {
|
} else {
|
||||||
let adapter = this.store.adapterFor('secret-v2');
|
const adapter = this.store.adapterFor('secret-v2');
|
||||||
let type = { modelName: 'secret-v2' };
|
const type = { modelName: 'secret-v2' };
|
||||||
let query = { backend: this.args.model.backend };
|
const query = { backend: model.backend };
|
||||||
adapter.query(this.store, type, query).then((result) => {
|
adapter.query(this.store, type, query).then((result) => {
|
||||||
this.secretPaths = result.data.keys;
|
this.secretPaths = result.data.keys;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
this.checkRows();
|
this.checkRows();
|
||||||
|
|
||||||
if (this.args.mode === 'edit') {
|
if (mode === 'edit') {
|
||||||
this.addRow();
|
this.addRow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,18 +34,17 @@ export default class SecretEdit extends Component {
|
|||||||
@tracked isV2 = false;
|
@tracked isV2 = false;
|
||||||
@tracked codemirrorString = null;
|
@tracked codemirrorString = null;
|
||||||
|
|
||||||
constructor() {
|
// fired on did-insert from render modifier
|
||||||
super(...arguments);
|
@action
|
||||||
let secrets = this.args.model.secretData;
|
createKvData(elem, [model]) {
|
||||||
if (!secrets && this.args.model.selectedVersion) {
|
if (!model.secretData && model.selectedVersion) {
|
||||||
this.isV2 = true;
|
this.isV2 = true;
|
||||||
secrets = this.args.model.belongsTo('selectedVersion').value().secretData;
|
model.secretData = model.belongsTo('selectedVersion').value().secretData;
|
||||||
}
|
}
|
||||||
const data = KVObject.create({ content: [] }).fromJSON(secrets);
|
this.secretData = KVObject.create({ content: [] }).fromJSON(model.secretData);
|
||||||
this.secretData = data;
|
this.codemirrorString = this.secretData.toJSONString();
|
||||||
this.codemirrorString = data.toJSONString();
|
|
||||||
if (this.wizard.featureState === 'details' && this.args.mode === 'create') {
|
if (this.wizard.featureState === 'details' && this.args.mode === 'create') {
|
||||||
let engine = this.args.model.backend.includes('kv') ? 'kv' : this.args.model.backend;
|
const engine = model.backend.includes('kv') ? 'kv' : model.backend;
|
||||||
this.wizard.transitionFeatureMachine('details', 'CONTINUE', engine);
|
this.wizard.transitionFeatureMachine('details', 'CONTINUE', engine);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import TransformBase, { addToList, removeFromList } from './transform-edit-base';
|
import TransformBase, { addToList, removeFromList } from './transform-edit-base';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default TransformBase.extend({
|
export default TransformBase.extend({
|
||||||
|
flashMessages: service(),
|
||||||
|
store: service(),
|
||||||
initialTransformations: null,
|
initialTransformations: null,
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import TransformBase, { addToList, removeFromList } from './transform-edit-base';
|
import TransformBase, { addToList, removeFromList } from './transform-edit-base';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default TransformBase.extend({
|
export default TransformBase.extend({
|
||||||
|
flashMessages: service(),
|
||||||
|
store: service(),
|
||||||
initialRoles: null,
|
initialRoles: null,
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
|
|||||||
@@ -216,7 +216,11 @@ export default Component.extend(TRANSIT_PARAMS, {
|
|||||||
this.toggleProperty('isModalActive');
|
this.toggleProperty('isModalActive');
|
||||||
},
|
},
|
||||||
|
|
||||||
doSubmit(data, options = {}) {
|
doSubmit(data, options = {}, maybeEvent) {
|
||||||
|
const event = options.type === 'submit' ? options : maybeEvent;
|
||||||
|
if (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
const { backend, id } = this.getModelInfo();
|
const { backend, id } = this.getModelInfo();
|
||||||
const action = this.selectedAction;
|
const action = this.selectedAction;
|
||||||
const { encodedBase64, ...formData } = data || {};
|
const { encodedBase64, ...formData } = data || {};
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ export default Component.extend({
|
|||||||
label='Wrap response'
|
label='Wrap response'
|
||||||
helperTextDisabled='Will not wrap response'
|
helperTextDisabled='Will not wrap response'
|
||||||
helperTextEnabled='Will wrap response with a lease of'
|
helperTextEnabled='Will wrap response with a lease of'
|
||||||
enableTTL=wrapResponse
|
enableTTL=this.wrapResponse
|
||||||
initialValue=ttl
|
initialValue=this.ttl
|
||||||
onChange=(action 'changedValue')
|
onChange=(action 'changedValue')
|
||||||
}}
|
}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ export default Controller.extend({
|
|||||||
router: service(),
|
router: service(),
|
||||||
permissions: service(),
|
permissions: service(),
|
||||||
namespaceService: service('namespace'),
|
namespaceService: service('namespace'),
|
||||||
|
flashMessages: service(),
|
||||||
|
|
||||||
vaultVersion: service('version'),
|
vaultVersion: service('version'),
|
||||||
console: service(),
|
console: service(),
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
import Controller from '@ember/controller';
|
import Controller from '@ember/controller';
|
||||||
import { task } from 'ember-concurrency';
|
import { task } from 'ember-concurrency';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Controller.extend({
|
export default Controller.extend({
|
||||||
|
flashMessages: service(),
|
||||||
|
|
||||||
queryParams: {
|
queryParams: {
|
||||||
page: 'page',
|
page: 'page',
|
||||||
pageFilter: 'pageFilter',
|
pageFilter: 'pageFilter',
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
import Controller from '@ember/controller';
|
import Controller from '@ember/controller';
|
||||||
|
|
||||||
export default class MfaMethodsListController extends Controller {
|
export default class MfaMethodsListController extends Controller {
|
||||||
queryParams = {
|
queryParams = ['page'];
|
||||||
page: 'page',
|
|
||||||
};
|
|
||||||
|
|
||||||
page = 1;
|
page = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { capitalize } from '@ember/string';
|
|||||||
import { task } from 'ember-concurrency';
|
import { task } from 'ember-concurrency';
|
||||||
|
|
||||||
export default class MfaMethodCreateController extends Controller {
|
export default class MfaMethodCreateController extends Controller {
|
||||||
|
@service store;
|
||||||
@service flashMessages;
|
@service flashMessages;
|
||||||
@service router;
|
@service router;
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { task } from 'ember-concurrency';
|
|||||||
import { waitFor } from '@ember/test-waiters';
|
import { waitFor } from '@ember/test-waiters';
|
||||||
|
|
||||||
export default class OidcKeyDetailsController extends Controller {
|
export default class OidcKeyDetailsController extends Controller {
|
||||||
|
@service store;
|
||||||
@service router;
|
@service router;
|
||||||
@service flashMessages;
|
@service flashMessages;
|
||||||
|
|
||||||
|
|||||||
@@ -4,20 +4,18 @@ import Controller, { inject as controller } from '@ember/controller';
|
|||||||
import { task, timeout } from 'ember-concurrency';
|
import { task, timeout } from 'ember-concurrency';
|
||||||
|
|
||||||
export default Controller.extend({
|
export default Controller.extend({
|
||||||
|
flashMessages: service(),
|
||||||
vaultController: controller('vault'),
|
vaultController: controller('vault'),
|
||||||
clusterController: controller('vault.cluster'),
|
clusterController: controller('vault.cluster'),
|
||||||
namespaceService: service('namespace'),
|
namespaceService: service('namespace'),
|
||||||
featureFlagService: service('featureFlag'),
|
featureFlagService: service('featureFlag'),
|
||||||
auth: service(),
|
auth: service(),
|
||||||
router: service(),
|
router: service(),
|
||||||
|
|
||||||
queryParams: [{ authMethod: 'with', oidcProvider: 'o' }],
|
queryParams: [{ authMethod: 'with', oidcProvider: 'o' }],
|
||||||
|
|
||||||
namespaceQueryParam: alias('clusterController.namespaceQueryParam'),
|
namespaceQueryParam: alias('clusterController.namespaceQueryParam'),
|
||||||
wrappedToken: alias('vaultController.wrappedToken'),
|
wrappedToken: alias('vaultController.wrappedToken'),
|
||||||
redirectTo: alias('vaultController.redirectTo'),
|
redirectTo: alias('vaultController.redirectTo'),
|
||||||
managedNamespaceRoot: alias('featureFlagService.managedNamespaceRoot'),
|
managedNamespaceRoot: alias('featureFlagService.managedNamespaceRoot'),
|
||||||
|
|
||||||
authMethod: '',
|
authMethod: '',
|
||||||
oidcProvider: '',
|
oidcProvider: '',
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,11 @@ import { computed } from '@ember/object';
|
|||||||
import Controller from '@ember/controller';
|
import Controller from '@ember/controller';
|
||||||
import { task } from 'ember-concurrency';
|
import { task } from 'ember-concurrency';
|
||||||
import { supportedSecretBackends } from 'vault/helpers/supported-secret-backends';
|
import { supportedSecretBackends } from 'vault/helpers/supported-secret-backends';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
const LINKED_BACKENDS = supportedSecretBackends();
|
const LINKED_BACKENDS = supportedSecretBackends();
|
||||||
|
|
||||||
export default Controller.extend({
|
export default Controller.extend({
|
||||||
|
flashMessages: service(),
|
||||||
displayableBackends: filterBy('model', 'shouldIncludeInList'),
|
displayableBackends: filterBy('model', 'shouldIncludeInList'),
|
||||||
|
|
||||||
supportedBackends: computed('displayableBackends', 'displayableBackends.[]', function () {
|
supportedBackends: computed('displayableBackends', 'displayableBackends.[]', function () {
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ export default Controller.extend(CONFIG_ATTRS, {
|
|||||||
const isDelete = options.delete;
|
const isDelete = options.delete;
|
||||||
if (this.model.type === 'ssh') {
|
if (this.model.type === 'ssh') {
|
||||||
this.set('loading', true);
|
this.set('loading', true);
|
||||||
this.model.saveCA({ isDelete }).then(() => {
|
this.model
|
||||||
|
.saveCA({ isDelete })
|
||||||
|
.then(() => {
|
||||||
this.set('loading', false);
|
this.set('loading', false);
|
||||||
this.send('refreshRoute');
|
this.send('refreshRoute');
|
||||||
this.set('configured', !isDelete);
|
this.set('configured', !isDelete);
|
||||||
@@ -37,6 +39,10 @@ export default Controller.extend(CONFIG_ATTRS, {
|
|||||||
} else {
|
} else {
|
||||||
this.flashMessages.success('SSH Certificate Authority Configuration saved!');
|
this.flashMessages.success('SSH Certificate Authority Configuration saved!');
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
const errorMessage = error.errors ? error.errors.join('. ') : error;
|
||||||
|
this.flashMessages.danger(errorMessage);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -57,7 +63,6 @@ export default Controller.extend(CONFIG_ATTRS, {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.model.send('pushedData');
|
|
||||||
this.reset();
|
this.reset();
|
||||||
this.flashMessages.success('The backend configuration saved successfully!');
|
this.flashMessages.success('The backend configuration saved successfully!');
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export function parsePkiCert([model]) {
|
|||||||
let cert_asn1 = asn1js.fromBER(stringToArrayBuffer(cert_der));
|
let cert_asn1 = asn1js.fromBER(stringToArrayBuffer(cert_der));
|
||||||
cert = new Certificate({ schema: cert_asn1.result });
|
cert = new Certificate({ schema: cert_asn1.result });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.debug('DEBUG: Parsing Certificate', error);
|
console.debug('DEBUG: Parsing Certificate', error); // eslint-disable-line
|
||||||
return {
|
return {
|
||||||
can_parse: false,
|
can_parse: false,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta http-equiv="cache-control" content="no-store" />
|
<meta http-equiv="cache-control" content="no-store" />
|
||||||
<meta http-equiv="expires" content="0" />
|
<meta http-equiv="expires" content="0" />
|
||||||
<meta http-equiv="pragma" content="no-cache" />
|
<meta http-equiv="pragma" content="no-cache" />
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ export function initialize() {
|
|||||||
registerDeprecationHandler((message, options, next) => {
|
registerDeprecationHandler((message, options, next) => {
|
||||||
// filter deprecations that are scheduled to be removed in a specific version
|
// filter deprecations that are scheduled to be removed in a specific version
|
||||||
// when upgrading or addressing deprecation warnings be sure to update this or remove if not needed
|
// when upgrading or addressing deprecation warnings be sure to update this or remove if not needed
|
||||||
if (options?.until !== '4.0.0') {
|
if (options?.until !== '5.0.0') {
|
||||||
next(message, options);
|
next(message, options);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
import Model, { hasMany, attr } from '@ember-data/model';
|
import Model, { belongsTo, hasMany, attr } from '@ember-data/model';
|
||||||
import { alias } from '@ember/object/computed'; // eslint-disable-line
|
import { alias } from '@ember/object/computed'; // eslint-disable-line
|
||||||
import { computed } from '@ember/object'; // eslint-disable-line
|
import { computed } from '@ember/object'; // eslint-disable-line
|
||||||
import { fragment } from 'ember-data-model-fragments/attributes';
|
import { inject as service } from '@ember/service';
|
||||||
import fieldToAttrs, { expandAttributeMeta } from 'vault/utils/field-to-attrs';
|
import fieldToAttrs, { expandAttributeMeta } from 'vault/utils/field-to-attrs';
|
||||||
import { memberAction } from 'ember-api-actions';
|
|
||||||
import apiPath from 'vault/utils/api-path';
|
import apiPath from 'vault/utils/api-path';
|
||||||
import attachCapabilities from 'vault/lib/attach-capabilities';
|
import attachCapabilities from 'vault/lib/attach-capabilities';
|
||||||
import { withModelValidations } from 'vault/decorators/model-validations';
|
import { withModelValidations } from 'vault/decorators/model-validations';
|
||||||
@@ -17,6 +16,9 @@ const validations = {
|
|||||||
@withModelValidations(validations)
|
@withModelValidations(validations)
|
||||||
class AuthMethodModel extends Model {}
|
class AuthMethodModel extends Model {}
|
||||||
const ModelExport = AuthMethodModel.extend({
|
const ModelExport = AuthMethodModel.extend({
|
||||||
|
store: service(),
|
||||||
|
|
||||||
|
config: belongsTo('mount-config', { async: false, inverse: null }), // one-to-none that replaces former fragment
|
||||||
authConfigs: hasMany('auth-config', { polymorphic: true, inverse: 'backend', async: false }),
|
authConfigs: hasMany('auth-config', { polymorphic: true, inverse: 'backend', async: false }),
|
||||||
path: attr('string'),
|
path: attr('string'),
|
||||||
accessor: attr('string'),
|
accessor: attr('string'),
|
||||||
@@ -30,7 +32,6 @@ const ModelExport = AuthMethodModel.extend({
|
|||||||
description: attr('string', {
|
description: attr('string', {
|
||||||
editType: 'textarea',
|
editType: 'textarea',
|
||||||
}),
|
}),
|
||||||
config: fragment('mount-config', { defaultValue: {} }),
|
|
||||||
local: attr('boolean', {
|
local: attr('boolean', {
|
||||||
helpText:
|
helpText:
|
||||||
'When Replication is enabled, a local mount will not be replicated across clusters. This can only be specified at mount time.',
|
'When Replication is enabled, a local mount will not be replicated across clusters. This can only be specified at mount time.',
|
||||||
@@ -67,13 +68,6 @@ const ModelExport = AuthMethodModel.extend({
|
|||||||
return expandAttributeMeta(this, tuneAttrs);
|
return expandAttributeMeta(this, tuneAttrs);
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// sys/mounts/auth/[auth-path]/tune.
|
|
||||||
tune: memberAction({
|
|
||||||
path: 'tune',
|
|
||||||
type: 'post',
|
|
||||||
urlType: 'updateRecord',
|
|
||||||
}),
|
|
||||||
|
|
||||||
formFields: computed(function () {
|
formFields: computed(function () {
|
||||||
return [
|
return [
|
||||||
'type',
|
'type',
|
||||||
@@ -110,6 +104,10 @@ const ModelExport = AuthMethodModel.extend({
|
|||||||
}),
|
}),
|
||||||
canDisable: alias('deletePath.canDelete'),
|
canDisable: alias('deletePath.canDelete'),
|
||||||
canEdit: alias('configPath.canUpdate'),
|
canEdit: alias('configPath.canUpdate'),
|
||||||
|
|
||||||
|
tune(data) {
|
||||||
|
return this.store.adapterFor('auth-method').tune(this.path, data);
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default attachCapabilities(ModelExport, {
|
export default attachCapabilities(ModelExport, {
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import Model, { attr, hasMany } from '@ember-data/model';
|
import Model, { attr, belongsTo, hasMany } from '@ember-data/model';
|
||||||
import { inject as service } from '@ember/service';
|
import { inject as service } from '@ember/service';
|
||||||
import { alias, and, equal, gte, not, or } from '@ember/object/computed';
|
import { alias, and, equal, gte, not, or } from '@ember/object/computed';
|
||||||
import { get, computed } from '@ember/object';
|
import { get, computed } from '@ember/object';
|
||||||
import { fragment } from 'ember-data-model-fragments/attributes';
|
|
||||||
|
|
||||||
export default Model.extend({
|
export default Model.extend({
|
||||||
version: service(),
|
version: service(),
|
||||||
@@ -53,10 +52,10 @@ export default Model.extend({
|
|||||||
allReplicationDisabled: and('{dr,performance}.replicationDisabled'),
|
allReplicationDisabled: and('{dr,performance}.replicationDisabled'),
|
||||||
anyReplicationEnabled: or('{dr,performance}.replicationEnabled'),
|
anyReplicationEnabled: or('{dr,performance}.replicationEnabled'),
|
||||||
|
|
||||||
dr: fragment('replication-attributes'),
|
dr: belongsTo('replication-attributes', { async: false, inverse: null }),
|
||||||
performance: fragment('replication-attributes'),
|
performance: belongsTo('replication-attributes', { async: false, inverse: null }),
|
||||||
// this service exposes what mode the UI is currently viewing
|
// this service exposes what mode the UI is currently viewing
|
||||||
// replicationAttrs will then return the relevant `replication-attributes` fragment
|
// replicationAttrs will then return the relevant `replication-attributes` model
|
||||||
rm: service('replication-mode'),
|
rm: service('replication-mode'),
|
||||||
drMode: alias('dr.mode'),
|
drMode: alias('dr.mode'),
|
||||||
replicationMode: alias('rm.mode'),
|
replicationMode: alias('rm.mode'),
|
||||||
|
|||||||
@@ -3,13 +3,16 @@ import { tracked } from '@glimmer/tracking';
|
|||||||
import { expandAttributeMeta } from 'vault/utils/field-to-attrs';
|
import { expandAttributeMeta } from 'vault/utils/field-to-attrs';
|
||||||
import { withModelValidations } from 'vault/decorators/model-validations';
|
import { withModelValidations } from 'vault/decorators/model-validations';
|
||||||
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
|
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
const CRED_PROPS = {
|
const CRED_PROPS = {
|
||||||
azurekeyvault: ['client_id', 'client_secret', 'tenant_id'],
|
azurekeyvault: ['client_id', 'client_secret', 'tenant_id'],
|
||||||
awskms: ['access_key', 'secret_key', 'session_token', 'endpoint'],
|
awskms: ['access_key', 'secret_key', 'session_token', 'endpoint'],
|
||||||
gcpckms: ['service_account_file'],
|
gcpckms: ['service_account_file'],
|
||||||
};
|
};
|
||||||
|
|
||||||
const OPTIONAL_CRED_PROPS = ['session_token', 'endpoint'];
|
const OPTIONAL_CRED_PROPS = ['session_token', 'endpoint'];
|
||||||
|
|
||||||
// since we have dynamic credential attributes based on provider we need a dynamic presence validator
|
// since we have dynamic credential attributes based on provider we need a dynamic presence validator
|
||||||
// add validators for all cred props and return true for value if not associated with selected provider
|
// add validators for all cred props and return true for value if not associated with selected provider
|
||||||
const credValidators = Object.keys(CRED_PROPS).reduce((obj, providerKey) => {
|
const credValidators = Object.keys(CRED_PROPS).reduce((obj, providerKey) => {
|
||||||
@@ -27,13 +30,16 @@ const credValidators = Object.keys(CRED_PROPS).reduce((obj, providerKey) => {
|
|||||||
});
|
});
|
||||||
return obj;
|
return obj;
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
const validations = {
|
const validations = {
|
||||||
name: [{ type: 'presence', message: 'Provider name is required' }],
|
name: [{ type: 'presence', message: 'Provider name is required' }],
|
||||||
keyCollection: [{ type: 'presence', message: 'Key Vault instance name' }],
|
keyCollection: [{ type: 'presence', message: 'Key Vault instance name' }],
|
||||||
...credValidators,
|
...credValidators,
|
||||||
};
|
};
|
||||||
|
|
||||||
@withModelValidations(validations)
|
@withModelValidations(validations)
|
||||||
export default class KeymgmtProviderModel extends Model {
|
export default class KeymgmtProviderModel extends Model {
|
||||||
|
@service store;
|
||||||
@attr('string') backend;
|
@attr('string') backend;
|
||||||
@attr('string', {
|
@attr('string', {
|
||||||
label: 'Provider name',
|
label: 'Provider name',
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import PromiseProxyMixin from '@ember/object/promise-proxy-mixin';
|
|||||||
import { methods } from 'vault/helpers/mountable-auth-methods';
|
import { methods } from 'vault/helpers/mountable-auth-methods';
|
||||||
import { withModelValidations } from 'vault/decorators/model-validations';
|
import { withModelValidations } from 'vault/decorators/model-validations';
|
||||||
import { isPresent } from '@ember/utils';
|
import { isPresent } from '@ember/utils';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
const validations = {
|
const validations = {
|
||||||
name: [{ type: 'presence', message: 'Name is required' }],
|
name: [{ type: 'presence', message: 'Name is required' }],
|
||||||
@@ -26,8 +27,10 @@ const validations = {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
@withModelValidations(validations)
|
@withModelValidations(validations)
|
||||||
export default class MfaLoginEnforcementModel extends Model {
|
export default class MfaLoginEnforcementModel extends Model {
|
||||||
|
@service store;
|
||||||
@attr('string') name;
|
@attr('string') name;
|
||||||
@hasMany('mfa-method') mfa_methods;
|
@hasMany('mfa-method') mfa_methods;
|
||||||
@attr('string') namespace_id;
|
@attr('string') namespace_id;
|
||||||
|
|||||||
@@ -1,41 +1,53 @@
|
|||||||
import { attr } from '@ember-data/model';
|
import Model, { attr } from '@ember-data/model';
|
||||||
import Fragment from 'ember-data-model-fragments/fragment';
|
|
||||||
|
|
||||||
export default Fragment.extend({
|
export default class MountConfigModel extends Model {
|
||||||
defaultLeaseTtl: attr({
|
@attr({
|
||||||
label: 'Default Lease TTL',
|
label: 'Default Lease TTL',
|
||||||
editType: 'ttl',
|
editType: 'ttl',
|
||||||
}),
|
})
|
||||||
maxLeaseTtl: attr({
|
defaultLeaseTtl;
|
||||||
|
|
||||||
|
@attr({
|
||||||
label: 'Max Lease TTL',
|
label: 'Max Lease TTL',
|
||||||
editType: 'ttl',
|
editType: 'ttl',
|
||||||
}),
|
})
|
||||||
auditNonHmacRequestKeys: attr({
|
maxLeaseTtl;
|
||||||
|
|
||||||
|
@attr({
|
||||||
label: 'Request keys excluded from HMACing in audit',
|
label: 'Request keys excluded from HMACing in audit',
|
||||||
editType: 'stringArray',
|
editType: 'stringArray',
|
||||||
helpText: "Keys that will not be HMAC'd by audit devices in the request data object.",
|
helpText: "Keys that will not be HMAC'd by audit devices in the request data object.",
|
||||||
}),
|
})
|
||||||
auditNonHmacResponseKeys: attr({
|
auditNonHmacRequestKeys;
|
||||||
|
|
||||||
|
@attr({
|
||||||
label: 'Response keys excluded from HMACing in audit',
|
label: 'Response keys excluded from HMACing in audit',
|
||||||
editType: 'stringArray',
|
editType: 'stringArray',
|
||||||
helpText: "Keys that will not be HMAC'd by audit devices in the response data object.",
|
helpText: "Keys that will not be HMAC'd by audit devices in the response data object.",
|
||||||
}),
|
})
|
||||||
listingVisibility: attr('string', {
|
auditNonHmacResponseKeys;
|
||||||
|
|
||||||
|
@attr('string', {
|
||||||
editType: 'boolean',
|
editType: 'boolean',
|
||||||
label: 'List method when unauthenticated',
|
label: 'List method when unauthenticated',
|
||||||
trueValue: 'unauth',
|
trueValue: 'unauth',
|
||||||
falseValue: 'hidden',
|
falseValue: 'hidden',
|
||||||
}),
|
})
|
||||||
passthroughRequestHeaders: attr({
|
listingVisibility;
|
||||||
|
|
||||||
|
@attr({
|
||||||
label: 'Allowed passthrough request headers',
|
label: 'Allowed passthrough request headers',
|
||||||
helpText: 'Headers to allow and pass from the request to the backend',
|
helpText: 'Headers to allow and pass from the request to the backend',
|
||||||
editType: 'stringArray',
|
editType: 'stringArray',
|
||||||
}),
|
})
|
||||||
tokenType: attr('string', {
|
passthroughRequestHeaders;
|
||||||
|
|
||||||
|
@attr('string', {
|
||||||
label: 'Token Type',
|
label: 'Token Type',
|
||||||
helpText:
|
helpText:
|
||||||
"The type of token that should be generated via this role. Can be `service`, `batch`, or `default` to use the mount's default (which unless changed will be `service` tokens).",
|
"The type of token that should be generated via this role. Can be `service`, `batch`, or `default` to use the mount's default (which unless changed will be `service` tokens).",
|
||||||
possibleValues: ['default', 'batch', 'service'],
|
possibleValues: ['default', 'batch', 'service'],
|
||||||
defaultFormValue: 'default',
|
defaultFormValue: 'default',
|
||||||
}),
|
})
|
||||||
});
|
tokenType;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
import { attr } from '@ember-data/model';
|
|
||||||
import Fragment from 'ember-data-model-fragments/fragment';
|
|
||||||
|
|
||||||
export default Fragment.extend({
|
|
||||||
version: attr('number', {
|
|
||||||
label: 'Version',
|
|
||||||
helpText:
|
|
||||||
'The KV Secrets Engine can operate in different modes. Version 1 is the original generic Secrets Engine the allows for storing of static key/value pairs. Version 2 added more features including data versioning, TTLs, and check and set.',
|
|
||||||
possibleValues: [2, 1],
|
|
||||||
// This shouldn't be defaultValue because if no version comes back from API we should assume it's v1
|
|
||||||
defaultFormValue: 2, // Set the form to 2 by default
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
|
import Model, { attr } from '@ember-data/model';
|
||||||
import { match, not } from '@ember/object/computed';
|
import { match, not } from '@ember/object/computed';
|
||||||
import { computed } from '@ember/object';
|
import { computed } from '@ember/object';
|
||||||
import { attr } from '@ember-data/model';
|
|
||||||
import Fragment from 'ember-data-model-fragments/fragment';
|
|
||||||
|
|
||||||
export default Fragment.extend({
|
export default Model.extend({
|
||||||
clusterId: attr('string'),
|
clusterId: attr('string'),
|
||||||
clusterIdDisplay: computed('clusterId', 'mode', function () {
|
clusterIdDisplay: computed('clusterId', 'mode', function () {
|
||||||
const clusterId = this.clusterId;
|
const clusterId = this.clusterId;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import Model, { attr } from '@ember-data/model';
|
import Model, { attr, belongsTo } from '@ember-data/model';
|
||||||
import { computed } from '@ember/object'; // eslint-disable-line
|
import { computed } from '@ember/object'; // eslint-disable-line
|
||||||
import { equal } from '@ember/object/computed'; // eslint-disable-line
|
import { equal } from '@ember/object/computed'; // eslint-disable-line
|
||||||
import { fragment } from 'ember-data-model-fragments/attributes';
|
|
||||||
import fieldToAttrs, { expandAttributeMeta } from 'vault/utils/field-to-attrs';
|
import fieldToAttrs, { expandAttributeMeta } from 'vault/utils/field-to-attrs';
|
||||||
import { withModelValidations } from 'vault/decorators/model-validations';
|
import { withModelValidations } from 'vault/decorators/model-validations';
|
||||||
|
|
||||||
@@ -29,8 +28,16 @@ export default SecretEngineModel.extend({
|
|||||||
description: attr('string', {
|
description: attr('string', {
|
||||||
editType: 'textarea',
|
editType: 'textarea',
|
||||||
}),
|
}),
|
||||||
config: fragment('mount-config', { defaultValue: {} }),
|
// will only have value for kv type
|
||||||
options: fragment('mount-options', { defaultValue: {} }),
|
version: attr('number', {
|
||||||
|
label: 'Version',
|
||||||
|
helpText:
|
||||||
|
'The KV Secrets Engine can operate in different modes. Version 1 is the original generic Secrets Engine the allows for storing of static key/value pairs. Version 2 added more features including data versioning, TTLs, and check and set.',
|
||||||
|
possibleValues: [2, 1],
|
||||||
|
// This shouldn't be defaultValue because if no version comes back from API we should assume it's v1
|
||||||
|
defaultFormValue: 2, // Set the form to 2 by default
|
||||||
|
}),
|
||||||
|
config: belongsTo('mount-config', { async: false, inverse: null }),
|
||||||
local: attr('boolean', {
|
local: attr('boolean', {
|
||||||
helpText:
|
helpText:
|
||||||
'When Replication is enabled, a local mount will not be replicated across clusters. This can only be specified at mount time.',
|
'When Replication is enabled, a local mount will not be replicated across clusters. This can only be specified at mount time.',
|
||||||
@@ -60,11 +67,10 @@ export default SecretEngineModel.extend({
|
|||||||
helperTextEnabled: 'Delete all new versions of this secret after',
|
helperTextEnabled: 'Delete all new versions of this secret after',
|
||||||
}),
|
}),
|
||||||
|
|
||||||
modelTypeForKV: computed('engineType', 'options.version', function () {
|
modelTypeForKV: computed('engineType', 'version', function () {
|
||||||
let type = this.engineType;
|
let type = this.engineType;
|
||||||
let version = this.options?.version;
|
|
||||||
let modelType = 'secret';
|
let modelType = 'secret';
|
||||||
if ((type === 'kv' || type === 'generic') && version === 2) {
|
if ((type === 'kv' || type === 'generic') && this.version === 2) {
|
||||||
modelType = 'secret-v2';
|
modelType = 'secret-v2';
|
||||||
}
|
}
|
||||||
return modelType;
|
return modelType;
|
||||||
@@ -72,18 +78,17 @@ export default SecretEngineModel.extend({
|
|||||||
|
|
||||||
isV2KV: equal('modelTypeForKV', 'secret-v2'),
|
isV2KV: equal('modelTypeForKV', 'secret-v2'),
|
||||||
|
|
||||||
formFields: computed('engineType', 'options.version', function () {
|
formFields: computed('engineType', 'version', function () {
|
||||||
let type = this.engineType;
|
let type = this.engineType;
|
||||||
let version = this.options?.version;
|
|
||||||
let fields = ['type', 'path', 'description', 'accessor', 'local', 'sealWrap'];
|
let fields = ['type', 'path', 'description', 'accessor', 'local', 'sealWrap'];
|
||||||
// no ttl options for keymgmt
|
// no ttl options for keymgmt
|
||||||
const ttl = type !== 'keymgmt' ? 'defaultLeaseTtl,maxLeaseTtl,' : '';
|
const ttl = type !== 'keymgmt' ? 'defaultLeaseTtl,maxLeaseTtl,' : '';
|
||||||
fields.push(`config.{${ttl}auditNonHmacRequestKeys,auditNonHmacResponseKeys,passthroughRequestHeaders}`);
|
fields.push(`config.{${ttl}auditNonHmacRequestKeys,auditNonHmacResponseKeys,passthroughRequestHeaders}`);
|
||||||
if (type === 'kv' || type === 'generic') {
|
if (type === 'kv' || type === 'generic') {
|
||||||
fields.push('options.{version}');
|
fields.push('version');
|
||||||
}
|
}
|
||||||
// version comes in as number not string
|
// version comes in as number not string
|
||||||
if (type === 'kv' && version === 2) {
|
if (type === 'kv' && this.version === 2) {
|
||||||
fields.push('casRequired', 'deleteVersionAfter', 'maxVersions');
|
fields.push('casRequired', 'deleteVersionAfter', 'maxVersions');
|
||||||
}
|
}
|
||||||
return fields;
|
return fields;
|
||||||
@@ -108,7 +113,7 @@ export default SecretEngineModel.extend({
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (type === 'kv' || type === 'generic') {
|
if (type === 'kv' || type === 'generic') {
|
||||||
optionsGroup['Method Options'].unshift('options.{version}');
|
optionsGroup['Method Options'].unshift('version');
|
||||||
}
|
}
|
||||||
if (type === 'database') {
|
if (type === 'database') {
|
||||||
// For the Database Secret Engine we want to highlight the defaultLeaseTtl and maxLeaseTtl, removing them from the options object
|
// For the Database Secret Engine we want to highlight the defaultLeaseTtl and maxLeaseTtl, removing them from the options object
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import AuthMethodModel from './auth-method';
|
import AuthMethodModel from './auth-method';
|
||||||
import { fragment } from 'ember-data-model-fragments/attributes';
|
import { belongsTo } from '@ember-data/model';
|
||||||
|
|
||||||
export default AuthMethodModel.extend({
|
export default AuthMethodModel.extend({
|
||||||
otherConfig: fragment('mount-config', { defaultValue: {} }),
|
otherConfig: belongsTo('mount-config', { async: false, inverse: null }),
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -29,8 +29,11 @@ export default class CodeMirrorModifier extends Modifier {
|
|||||||
|
|
||||||
@action
|
@action
|
||||||
_onChange(editor) {
|
_onChange(editor) {
|
||||||
|
// avoid sending change event after initial setup when editor value is set to content
|
||||||
|
if (this.args.named.content !== editor.getValue()) {
|
||||||
this.args.named.onUpdate(editor.getValue(), this._editor);
|
this.args.named.onUpdate(editor.getValue(), this._editor);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
_onFocus(editor) {
|
_onFocus(editor) {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export default Route.extend({
|
|||||||
error(error, transition) {
|
error(error, transition) {
|
||||||
let controlGroup = this.controlGroup;
|
let controlGroup = this.controlGroup;
|
||||||
if (error instanceof ControlGroupError) {
|
if (error instanceof ControlGroupError) {
|
||||||
return controlGroup.handleError(error, transition);
|
return controlGroup.handleError(error);
|
||||||
}
|
}
|
||||||
if (error.path === '/v1/sys/wrapping/unwrap') {
|
if (error.path === '/v1/sys/wrapping/unwrap') {
|
||||||
controlGroup.unmarkTokenForUnwrap();
|
controlGroup.unmarkTokenForUnwrap();
|
||||||
|
|||||||
@@ -7,10 +7,13 @@ import Ember from 'ember';
|
|||||||
const SPLASH_DELAY = Ember.testing ? 0 : 300;
|
const SPLASH_DELAY = Ember.testing ? 0 : 300;
|
||||||
|
|
||||||
export default Route.extend({
|
export default Route.extend({
|
||||||
|
store: service(),
|
||||||
version: service(),
|
version: service(),
|
||||||
|
|
||||||
beforeModel() {
|
beforeModel() {
|
||||||
return this.version.fetchVersion();
|
return this.version.fetchVersion();
|
||||||
},
|
},
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
// hardcode single cluster
|
// hardcode single cluster
|
||||||
const fixture = {
|
const fixture = {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import Route from '@ember/routing/route';
|
|||||||
import UnloadModel from 'vault/mixins/unload-model-route';
|
import UnloadModel from 'vault/mixins/unload-model-route';
|
||||||
|
|
||||||
export default Route.extend(UnloadModel, {
|
export default Route.extend(UnloadModel, {
|
||||||
|
store: service(),
|
||||||
version: service(),
|
version: service(),
|
||||||
|
|
||||||
beforeModel() {
|
beforeModel() {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import Route from '@ember/routing/route';
|
|||||||
import UnloadModel from 'vault/mixins/unload-model-route';
|
import UnloadModel from 'vault/mixins/unload-model-route';
|
||||||
|
|
||||||
export default Route.extend(UnloadModel, {
|
export default Route.extend(UnloadModel, {
|
||||||
|
store: service(),
|
||||||
version: service(),
|
version: service(),
|
||||||
|
|
||||||
beforeModel() {
|
beforeModel() {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import Route from '@ember/routing/route';
|
|||||||
import UnloadModel from 'vault/mixins/unload-model-route';
|
import UnloadModel from 'vault/mixins/unload-model-route';
|
||||||
|
|
||||||
export default Route.extend(UnloadModel, {
|
export default Route.extend(UnloadModel, {
|
||||||
|
store: service(),
|
||||||
version: service(),
|
version: service(),
|
||||||
|
|
||||||
beforeModel() {
|
beforeModel() {
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
||||||
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
|
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend(UnloadModelRoute, UnsavedModelRoute, {
|
export default Route.extend(UnloadModelRoute, UnsavedModelRoute, {
|
||||||
|
store: service(),
|
||||||
|
|
||||||
model(params) {
|
model(params) {
|
||||||
let itemType = this.modelFor('vault.cluster.access.identity');
|
let itemType = this.modelFor('vault.cluster.access.identity');
|
||||||
let modelType = `identity/${itemType}-alias`;
|
let modelType = `identity/${itemType}-alias`;
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
||||||
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
|
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend(UnloadModelRoute, UnsavedModelRoute, {
|
export default Route.extend(UnloadModelRoute, UnsavedModelRoute, {
|
||||||
|
store: service(),
|
||||||
|
|
||||||
model(params) {
|
model(params) {
|
||||||
let itemType = this.modelFor('vault.cluster.access.identity');
|
let itemType = this.modelFor('vault.cluster.access.identity');
|
||||||
let modelType = `identity/${itemType}-alias`;
|
let modelType = `identity/${itemType}-alias`;
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import ListRoute from 'core/mixins/list-route';
|
import ListRoute from 'core/mixins/list-route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend(ListRoute, {
|
export default Route.extend(ListRoute, {
|
||||||
|
store: service(),
|
||||||
|
|
||||||
model(params) {
|
model(params) {
|
||||||
let itemType = this.modelFor('vault.cluster.access.identity');
|
let itemType = this.modelFor('vault.cluster.access.identity');
|
||||||
let modelType = `identity/${itemType}-alias`;
|
let modelType = `identity/${itemType}-alias`;
|
||||||
@@ -19,10 +22,12 @@ export default Route.extend(ListRoute, {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
setupController(controller) {
|
setupController(controller) {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
controller.set('identityType', this.modelFor('vault.cluster.access.identity'));
|
controller.set('identityType', this.modelFor('vault.cluster.access.identity'));
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
willTransition(transition) {
|
willTransition(transition) {
|
||||||
window.scrollTo(0, 0);
|
window.scrollTo(0, 0);
|
||||||
|
|||||||
@@ -3,8 +3,11 @@ import { hash } from 'rsvp';
|
|||||||
import { set } from '@ember/object';
|
import { set } from '@ember/object';
|
||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import { TABS } from 'vault/helpers/tabs-for-identity-show';
|
import { TABS } from 'vault/helpers/tabs-for-identity-show';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend({
|
export default Route.extend({
|
||||||
|
store: service(),
|
||||||
|
|
||||||
model(params) {
|
model(params) {
|
||||||
let { section } = params;
|
let { section } = params;
|
||||||
let itemType = this.modelFor('vault.cluster.access.identity') + '-alias';
|
let itemType = this.modelFor('vault.cluster.access.identity') + '-alias';
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
||||||
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
|
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend(UnloadModelRoute, UnsavedModelRoute, {
|
export default Route.extend(UnloadModelRoute, UnsavedModelRoute, {
|
||||||
|
store: service(),
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
let itemType = this.modelFor('vault.cluster.access.identity');
|
let itemType = this.modelFor('vault.cluster.access.identity');
|
||||||
let modelType = `identity/${itemType}`;
|
let modelType = `identity/${itemType}`;
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
||||||
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
|
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend(UnloadModelRoute, UnsavedModelRoute, {
|
export default Route.extend(UnloadModelRoute, UnsavedModelRoute, {
|
||||||
|
store: service(),
|
||||||
|
|
||||||
model(params) {
|
model(params) {
|
||||||
let itemType = this.modelFor('vault.cluster.access.identity');
|
let itemType = this.modelFor('vault.cluster.access.identity');
|
||||||
let modelType = `identity/${itemType}`;
|
let modelType = `identity/${itemType}`;
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import ListRoute from 'core/mixins/list-route';
|
import ListRoute from 'core/mixins/list-route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend(ListRoute, {
|
export default Route.extend(ListRoute, {
|
||||||
|
store: service(),
|
||||||
|
|
||||||
model(params) {
|
model(params) {
|
||||||
let itemType = this.modelFor('vault.cluster.access.identity');
|
let itemType = this.modelFor('vault.cluster.access.identity');
|
||||||
let modelType = `identity/${itemType}`;
|
let modelType = `identity/${itemType}`;
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend(UnloadModelRoute, {
|
export default Route.extend(UnloadModelRoute, {
|
||||||
|
store: service(),
|
||||||
|
|
||||||
beforeModel() {
|
beforeModel() {
|
||||||
let itemType = this.modelFor('vault.cluster.access.identity');
|
let itemType = this.modelFor('vault.cluster.access.identity');
|
||||||
if (itemType !== 'entity') {
|
if (itemType !== 'entity') {
|
||||||
return this.transitionTo('vault.cluster.access.identity');
|
return this.transitionTo('vault.cluster.access.identity');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
let modelType = `identity/entity-merge`;
|
let modelType = `identity/entity-merge`;
|
||||||
return this.store.createRecord(modelType);
|
return this.store.createRecord(modelType);
|
||||||
|
|||||||
@@ -4,8 +4,11 @@ import { hash } from 'rsvp';
|
|||||||
import { set } from '@ember/object';
|
import { set } from '@ember/object';
|
||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import { TABS } from 'vault/helpers/tabs-for-identity-show';
|
import { TABS } from 'vault/helpers/tabs-for-identity-show';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend({
|
export default Route.extend({
|
||||||
|
store: service(),
|
||||||
|
|
||||||
model(params) {
|
model(params) {
|
||||||
let { section } = params;
|
let { section } = params;
|
||||||
let itemType = this.modelFor('vault.cluster.access.identity');
|
let itemType = this.modelFor('vault.cluster.access.identity');
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import ClusterRoute from 'vault/mixins/cluster-route';
|
import ClusterRoute from 'vault/mixins/cluster-route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend(ClusterRoute, {
|
export default Route.extend(ClusterRoute, {
|
||||||
|
store: service(),
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
return this.store.findRecord('capabilities', 'sys/leases/lookup/');
|
return this.store.findRecord('capabilities', 'sys/leases/lookup/');
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
import { set } from '@ember/object';
|
import { set } from '@ember/object';
|
||||||
import { hash } from 'rsvp';
|
import { hash } from 'rsvp';
|
||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend({
|
export default Route.extend({
|
||||||
|
store: service(),
|
||||||
|
|
||||||
queryParams: {
|
queryParams: {
|
||||||
page: {
|
page: {
|
||||||
refreshModel: true,
|
refreshModel: true,
|
||||||
|
|||||||
@@ -2,10 +2,12 @@ import { set } from '@ember/object';
|
|||||||
import { hash } from 'rsvp';
|
import { hash } from 'rsvp';
|
||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
||||||
|
|
||||||
import utils from 'vault/lib/key-utils';
|
import utils from 'vault/lib/key-utils';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend(UnloadModelRoute, {
|
export default Route.extend(UnloadModelRoute, {
|
||||||
|
store: service(),
|
||||||
|
|
||||||
beforeModel() {
|
beforeModel() {
|
||||||
const { lease_id: leaseId } = this.paramsFor(this.routeName);
|
const { lease_id: leaseId } = this.paramsFor(this.routeName);
|
||||||
const parentKey = utils.parentKeyForKey(leaseId);
|
const parentKey = utils.parentKeyForKey(leaseId);
|
||||||
|
|||||||
@@ -4,7 +4,9 @@ import Route from '@ember/routing/route';
|
|||||||
import { inject as service } from '@ember/service';
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend({
|
export default Route.extend({
|
||||||
|
store: service(),
|
||||||
pathHelp: service('path-help'),
|
pathHelp: service('path-help'),
|
||||||
|
|
||||||
model(params) {
|
model(params) {
|
||||||
const { path } = params;
|
const { path } = params;
|
||||||
return this.store.findAll('auth-method').then((modelArray) => {
|
return this.store.findAll('auth-method').then((modelArray) => {
|
||||||
|
|||||||
@@ -2,8 +2,11 @@ import Route from '@ember/routing/route';
|
|||||||
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
||||||
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
|
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
|
||||||
import { singularize } from 'ember-inflector';
|
import { singularize } from 'ember-inflector';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend(UnloadModelRoute, UnsavedModelRoute, {
|
export default Route.extend(UnloadModelRoute, UnsavedModelRoute, {
|
||||||
|
store: service(),
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
const { item_type: itemType } = this.paramsFor('vault.cluster.access.method.item');
|
const { item_type: itemType } = this.paramsFor('vault.cluster.access.method.item');
|
||||||
const methodModel = this.modelFor('vault.cluster.access.method');
|
const methodModel = this.modelFor('vault.cluster.access.method');
|
||||||
|
|||||||
@@ -2,8 +2,11 @@ import Route from '@ember/routing/route';
|
|||||||
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
import UnloadModelRoute from 'vault/mixins/unload-model-route';
|
||||||
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
|
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
|
||||||
import { singularize } from 'ember-inflector';
|
import { singularize } from 'ember-inflector';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend(UnloadModelRoute, UnsavedModelRoute, {
|
export default Route.extend(UnloadModelRoute, UnsavedModelRoute, {
|
||||||
|
store: service(),
|
||||||
|
|
||||||
model(params) {
|
model(params) {
|
||||||
const id = params.item_id;
|
const id = params.item_id;
|
||||||
const { item_type: itemType } = this.paramsFor('vault.cluster.access.method.item');
|
const { item_type: itemType } = this.paramsFor('vault.cluster.access.method.item');
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { singularize } from 'ember-inflector';
|
|||||||
import ListRoute from 'vault/mixins/list-route';
|
import ListRoute from 'vault/mixins/list-route';
|
||||||
|
|
||||||
export default Route.extend(ListRoute, {
|
export default Route.extend(ListRoute, {
|
||||||
|
store: service(),
|
||||||
wizard: service(),
|
wizard: service(),
|
||||||
pathHelp: service('path-help'),
|
pathHelp: service('path-help'),
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ export default Route.extend(ListRoute, {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
willTransition(transition) {
|
willTransition(transition) {
|
||||||
window.scrollTo(0, 0);
|
window.scrollTo(0, 0);
|
||||||
@@ -49,6 +51,7 @@ export default Route.extend(ListRoute, {
|
|||||||
this.refresh();
|
this.refresh();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
setupController(controller) {
|
setupController(controller) {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
const { apiPath, authMethodPath, itemType, methodModel } = this.getMethodAndModelInfo();
|
const { apiPath, authMethodPath, itemType, methodModel } = this.getMethodAndModelInfo();
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ import { inject as service } from '@ember/service';
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
|
||||||
export default Route.extend({
|
export default Route.extend({
|
||||||
|
store: service(),
|
||||||
pathHelp: service('path-help'),
|
pathHelp: service('path-help'),
|
||||||
|
|
||||||
model(params) {
|
model(params) {
|
||||||
const id = params.item_id;
|
const id = params.item_id;
|
||||||
const { item_type: itemType } = this.paramsFor('vault.cluster.access.method.item');
|
const { item_type: itemType } = this.paramsFor('vault.cluster.access.method.item');
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default Route.extend({
|
export default Route.extend({
|
||||||
|
store: service(),
|
||||||
|
|
||||||
queryParams: {
|
queryParams: {
|
||||||
page: {
|
page: {
|
||||||
refreshModel: true,
|
refreshModel: true,
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class MfaEnforcementsRoute extends Route {
|
export default class MfaEnforcementsRoute extends Route {
|
||||||
|
@service store;
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
return this.store.query('mfa-login-enforcement', {}).catch((err) => {
|
return this.store.query('mfa-login-enforcement', {}).catch((err) => {
|
||||||
if (err.httpStatus === 404) {
|
if (err.httpStatus === 404) {
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class MfaConfigureRoute extends Route {
|
export default class MfaConfigureRoute extends Route {
|
||||||
|
@service store;
|
||||||
|
|
||||||
beforeModel() {
|
beforeModel() {
|
||||||
return this.store
|
return this.store
|
||||||
.query('mfa-method', {})
|
.query('mfa-method', {})
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import Route from '@ember/routing/route';
|
|||||||
import { inject as service } from '@ember/service';
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class MfaMethodsRoute extends Route {
|
export default class MfaMethodsRoute extends Route {
|
||||||
|
@service store;
|
||||||
@service router;
|
@service router;
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import { hash } from 'rsvp';
|
import { hash } from 'rsvp';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class MfaMethodRoute extends Route {
|
export default class MfaMethodRoute extends Route {
|
||||||
|
@service store;
|
||||||
|
|
||||||
model({ id }) {
|
model({ id }) {
|
||||||
return hash({
|
return hash({
|
||||||
method: this.store.findRecord('mfa-method', id).then((data) => data),
|
method: this.store.findRecord('mfa-method', id).then((data) => data),
|
||||||
|
|||||||
@@ -3,12 +3,15 @@ import Route from '@ember/routing/route';
|
|||||||
import UnloadModel from 'vault/mixins/unload-model-route';
|
import UnloadModel from 'vault/mixins/unload-model-route';
|
||||||
|
|
||||||
export default Route.extend(UnloadModel, {
|
export default Route.extend(UnloadModel, {
|
||||||
|
store: service(),
|
||||||
version: service(),
|
version: service(),
|
||||||
|
|
||||||
beforeModel() {
|
beforeModel() {
|
||||||
return this.version.fetchFeatures().then(() => {
|
return this.version.fetchFeatures().then(() => {
|
||||||
return this._super(...arguments);
|
return this._super(...arguments);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
return this.version.hasNamespaces ? this.store.createRecord('namespace') : null;
|
return this.version.hasNamespaces ? this.store.createRecord('namespace') : null;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -3,12 +3,16 @@ import Route from '@ember/routing/route';
|
|||||||
import UnloadModel from 'vault/mixins/unload-model-route';
|
import UnloadModel from 'vault/mixins/unload-model-route';
|
||||||
|
|
||||||
export default Route.extend(UnloadModel, {
|
export default Route.extend(UnloadModel, {
|
||||||
|
store: service(),
|
||||||
|
|
||||||
queryParams: {
|
queryParams: {
|
||||||
page: {
|
page: {
|
||||||
refreshModel: true,
|
refreshModel: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
version: service(),
|
version: service(),
|
||||||
|
|
||||||
beforeModel() {
|
beforeModel() {
|
||||||
this.store.unloadAll('namespace');
|
this.store.unloadAll('namespace');
|
||||||
return this.version.fetchFeatures().then(() => {
|
return this.version.fetchFeatures().then(() => {
|
||||||
@@ -50,6 +54,7 @@ export default Route.extend(UnloadModel, {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
error(error, transition) {
|
error(error, transition) {
|
||||||
/* eslint-disable-next-line ember/no-controller-access-in-routes */
|
/* eslint-disable-next-line ember/no-controller-access-in-routes */
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class OidcAssignmentRoute extends Route {
|
export default class OidcAssignmentRoute extends Route {
|
||||||
|
@service store;
|
||||||
|
|
||||||
model({ name }) {
|
model({ name }) {
|
||||||
return this.store.findRecord('oidc/assignment', name);
|
return this.store.findRecord('oidc/assignment', name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class OidcAssignmentsCreateRoute extends Route {
|
export default class OidcAssignmentsCreateRoute extends Route {
|
||||||
|
@service store;
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
return this.store.createRecord('oidc/assignment');
|
return this.store.createRecord('oidc/assignment');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class OidcAssignmentsRoute extends Route {
|
export default class OidcAssignmentsRoute extends Route {
|
||||||
|
@service store;
|
||||||
model() {
|
model() {
|
||||||
return this.store.query('oidc/assignment', {}).catch((err) => {
|
return this.store.query('oidc/assignment', {}).catch((err) => {
|
||||||
if (err.httpStatus === 404) {
|
if (err.httpStatus === 404) {
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class OidcClientRoute extends Route {
|
export default class OidcClientRoute extends Route {
|
||||||
|
@service store;
|
||||||
|
|
||||||
model({ name }) {
|
model({ name }) {
|
||||||
return this.store.findRecord('oidc/client', name);
|
return this.store.findRecord('oidc/client', name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class OidcClientProvidersRoute extends Route {
|
export default class OidcClientProvidersRoute extends Route {
|
||||||
|
@service store;
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
const model = this.modelFor('vault.cluster.access.oidc.clients.client');
|
const model = this.modelFor('vault.cluster.access.oidc.clients.client');
|
||||||
return this.store
|
return this.store
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class OidcClientsCreateRoute extends Route {
|
export default class OidcClientsCreateRoute extends Route {
|
||||||
|
@service store;
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
return this.store.createRecord('oidc/client');
|
return this.store.createRecord('oidc/client');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
import { inject as service } from '@ember/service';
|
import { inject as service } from '@ember/service';
|
||||||
export default class OidcClientsRoute extends Route {
|
export default class OidcClientsRoute extends Route {
|
||||||
|
@service store;
|
||||||
@service router;
|
@service router;
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import Route from '@ember/routing/route';
|
|||||||
import { inject as service } from '@ember/service';
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class OidcConfigureRoute extends Route {
|
export default class OidcConfigureRoute extends Route {
|
||||||
|
@service store;
|
||||||
@service router;
|
@service router;
|
||||||
|
|
||||||
beforeModel() {
|
beforeModel() {
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class OidcKeysCreateRoute extends Route {
|
export default class OidcKeysCreateRoute extends Route {
|
||||||
|
@service store;
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
return this.store.createRecord('oidc/key');
|
return this.store.createRecord('oidc/key');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class OidcKeysRoute extends Route {
|
export default class OidcKeysRoute extends Route {
|
||||||
|
@service store;
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
return this.store.query('oidc/key', {}).catch((err) => {
|
return this.store.query('oidc/key', {}).catch((err) => {
|
||||||
if (err.httpStatus === 404) {
|
if (err.httpStatus === 404) {
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class OidcKeyRoute extends Route {
|
export default class OidcKeyRoute extends Route {
|
||||||
|
@service store;
|
||||||
|
|
||||||
model({ name }) {
|
model({ name }) {
|
||||||
return this.store.findRecord('oidc/key', name);
|
return this.store.findRecord('oidc/key', name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import Route from '@ember/routing/route';
|
import Route from '@ember/routing/route';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
export default class OidcKeyClientsRoute extends Route {
|
export default class OidcKeyClientsRoute extends Route {
|
||||||
|
@service store;
|
||||||
|
|
||||||
async model() {
|
async model() {
|
||||||
const { allowedClientIds } = this.modelFor('vault.cluster.access.oidc.keys.key');
|
const { allowedClientIds } = this.modelFor('vault.cluster.access.oidc.keys.key');
|
||||||
return await this.store.query('oidc/client', { paramKey: 'client_id', filterFor: allowedClientIds });
|
return await this.store.query('oidc/client', { paramKey: 'client_id', filterFor: allowedClientIds });
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user