diff --git a/ui/app/adapters/mfa-method.js b/ui/app/adapters/mfa-method.js index 5c465ec87313e..0f5a8fc83cca4 100644 --- a/ui/app/adapters/mfa-method.js +++ b/ui/app/adapters/mfa-method.js @@ -3,24 +3,26 @@ import ApplicationAdapter from './application'; export default class MfaMethodAdapter extends ApplicationAdapter { namespace = 'v1'; - urlForQuery(methodType) { - let baseUrl = this.buildURL() + '/identity/mfa/method'; - if (methodType) { - return `${baseUrl}/${methodType}`; - } - return baseUrl; + pathForType() { + return 'identity/mfa/method'; } - queryRecord(type, id) { - return this.ajax(this.urlForQuery(type), 'POST', { + queryRecord(store, type, query) { + const { id } = query; + if (!id) { + throw new Error('MFA method ID is required to fetch the details.'); + } + const url = this.urlForQuery(query, type.modelName); + return this.ajax(url, 'POST', { data: { id, }, }); } - query() { - return this.ajax(this.urlForQuery(), 'GET', { + query(store, type, query) { + const url = this.urlForQuery(query, type.modelName); + return this.ajax(url, 'GET', { data: { list: true, }, diff --git a/ui/app/controllers/vault/cluster/access/mfa/enforcements.js b/ui/app/controllers/vault/cluster/access/mfa/enforcements.js new file mode 100644 index 0000000000000..81488ac7f6c9d --- /dev/null +++ b/ui/app/controllers/vault/cluster/access/mfa/enforcements.js @@ -0,0 +1,9 @@ +import Controller from '@ember/controller'; + +export default class MfaEnforcementListController extends Controller { + queryParams = { + page: 'page', + }; + + page = 1; +} diff --git a/ui/app/controllers/vault/cluster/access/mfa/index.js b/ui/app/controllers/vault/cluster/access/mfa/index.js deleted file mode 100644 index b6b14ac823ac5..0000000000000 --- a/ui/app/controllers/vault/cluster/access/mfa/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import Controller from '@ember/controller'; - -export default class MfaListController extends Controller {} diff --git a/ui/app/controllers/vault/cluster/access/mfa/methods.js b/ui/app/controllers/vault/cluster/access/mfa/methods.js new file mode 100644 index 0000000000000..b24fe242eb6fc --- /dev/null +++ b/ui/app/controllers/vault/cluster/access/mfa/methods.js @@ -0,0 +1,9 @@ +import Controller from '@ember/controller'; + +export default class MfaMethodsListController extends Controller { + queryParams = { + page: 'page', + }; + + page = 1; +} diff --git a/ui/app/router.js b/ui/app/router.js index 8ba886c3d9dcd..91c9115b9aa3b 100644 --- a/ui/app/router.js +++ b/ui/app/router.js @@ -59,9 +59,13 @@ Router.map(function () { this.route('section', { path: '/:section_name' }); }); this.route('mfa', function () { - // lookup - this.route('index', { path: '/' }); this.route('configure', { path: '/landing' }); + this.route('methods', { path: '/' }); + this.route('method', { path: '/method/:method_id' }, function () { + this.route('index', { path: '/' }); + }); + this.route('enforcements', { path: '/enforcement-list' }); + this.route('enforcement', { path: '/enforcement/:id' }); }); this.route('leases', function () { // lookup diff --git a/ui/app/routes/vault/cluster/access/mfa/configure.js b/ui/app/routes/vault/cluster/access/mfa/configure.js index 3bf8a3ce31737..a1986fd4e7463 100644 --- a/ui/app/routes/vault/cluster/access/mfa/configure.js +++ b/ui/app/routes/vault/cluster/access/mfa/configure.js @@ -1,6 +1,6 @@ import Route from '@ember/routing/route'; -export default class ConfigureRoute extends Route { +export default class MfaConfigureRoute extends Route { model() { return {}; } diff --git a/ui/app/routes/vault/cluster/access/mfa/enforcements.js b/ui/app/routes/vault/cluster/access/mfa/enforcements.js new file mode 100644 index 0000000000000..158c41753a0bc --- /dev/null +++ b/ui/app/routes/vault/cluster/access/mfa/enforcements.js @@ -0,0 +1,27 @@ +import Route from '@ember/routing/route'; + +export default class MfaEnforcementsRoute extends Route { + queryParams = { + page: { + refreshModel: true, + }, + }; + + model(params) { + return this.store + .lazyPaginatedQuery('mfa-login-enforcement', { + responsePath: 'data.keys', + page: params.page || 1, + }) + .catch((err) => { + if (err.httpStatus === 404) { + return []; + } else { + throw err; + } + }); + } + setupController(controller, model) { + controller.set('model', model); + } +} diff --git a/ui/app/routes/vault/cluster/access/mfa/method.js b/ui/app/routes/vault/cluster/access/mfa/method.js new file mode 100644 index 0000000000000..a7671c8453a07 --- /dev/null +++ b/ui/app/routes/vault/cluster/access/mfa/method.js @@ -0,0 +1,10 @@ +import Route from '@ember/routing/route'; + +export default class MfaMethodRoute extends Route { + model(params) { + return this.store.findRecord('mfa-method', params['method_id']); + } + setupController(controller, model) { + controller.set('model', model); + } +} diff --git a/ui/app/routes/vault/cluster/access/mfa/index.js b/ui/app/routes/vault/cluster/access/mfa/methods.js similarity index 92% rename from ui/app/routes/vault/cluster/access/mfa/index.js rename to ui/app/routes/vault/cluster/access/mfa/methods.js index a7db06b280e2e..eb3d6b89f73c5 100644 --- a/ui/app/routes/vault/cluster/access/mfa/index.js +++ b/ui/app/routes/vault/cluster/access/mfa/methods.js @@ -1,7 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; -export default class MfaRoute extends Route { +export default class MfaMethodsRoute extends Route { @service router; queryParams = { diff --git a/ui/app/templates/components/mfa/nav.hbs b/ui/app/templates/components/mfa/nav.hbs new file mode 100644 index 0000000000000..33dde0a660ff8 --- /dev/null +++ b/ui/app/templates/components/mfa/nav.hbs @@ -0,0 +1,12 @@ +
+ {{item.id}}
+
+