diff --git a/app/components/input-edit-password/component.js b/app/components/input-edit-password/component.js index 6ee931910..3c69cc2d3 100644 --- a/app/components/input-edit-password/component.js +++ b/app/components/input-edit-password/component.js @@ -4,6 +4,7 @@ import { get, set, computed, observer } from '@ember/object'; import { inject as service } from '@ember/service'; import { later, run } from '@ember/runloop'; import { randomStr } from 'shared/utils/util'; +import { resolve, all } from 'rsvp'; const CHANGE = 'change'; const SET = 'set'; @@ -16,17 +17,19 @@ export default Component.extend({ access: service(), layout, - showCurrent: true, - generate: false, - setOrChange: CHANGE, - editLabel: 'modalEditPassword.actionButton', - currentPassword: null, - user: null, + showCurrent: true, + generate: false, + setOrChange: CHANGE, + editLabel: 'modalEditPassword.actionButton', + currentPassword: null, + user: null, + showDeleteTokens: false, - confirmBlurred: false, - serverErrors: null, - password: null, - confirm: null, + confirmBlurred: false, + serverErrors: null, + password: null, + confirm: null, + deleteTokens: false, didReceiveAttrs() { if ( get(this, 'generate') ) { @@ -69,16 +72,31 @@ export default Component.extend({ promise = user.doAction('setpassword', { newPassword: neu.trim(), }); } - return promise.then(() => get(this, 'access').loadMe() - .then(() => { - get(this, 'complete')(true); - later(this, () => { - if ( this.isDestroyed || this.isDestroying ) { - return; - } - cb(true); - }, 1000); - })).catch((err) => { + return promise.then(() => get(this, 'access').loadMe().then(() => { + if ( get(this, 'deleteTokens') ) { + return get(this, 'globalStore').findAll('token').then((tokens) => { + const promises = []; + + tokens.forEach((token) => { + if ( !token.current ) { + promises.push(token.delete()); + } + }); + + return all(promises); + }); + } else { + return resolve(); + } + }).then(() => { + get(this, 'complete')(true); + later(this, () => { + if ( this.isDestroyed || this.isDestroying ) { + return; + } + cb(true); + }, 1000); + })).catch((err) => { set(this, 'serverErrors', [err.message]); get(this, 'complete')(false); cb(false); diff --git a/app/components/input-edit-password/template.hbs b/app/components/input-edit-password/template.hbs index f4871f1dd..fe6368d6b 100644 --- a/app/components/input-edit-password/template.hbs +++ b/app/components/input-edit-password/template.hbs @@ -7,6 +7,10 @@ style="display: none;" />
+ {{#if showDeleteTokens}} + + {{/if}} + {{#if showCurrent}}
diff --git a/app/components/modal-edit-password/template.hbs b/app/components/modal-edit-password/template.hbs index f7062693c..950a5380d 100644 --- a/app/components/modal-edit-password/template.hbs +++ b/app/components/modal-edit-password/template.hbs @@ -7,6 +7,7 @@ {{input-edit-password complete=(action "complete") showCurrent=true + showDeleteTokens=true cancel=(action "cancel") editButton='modalEditPassword.actionButton' user=user diff --git a/lib/shared/addon/components/cluster-driver/driver-rke/template.hbs b/lib/shared/addon/components/cluster-driver/driver-rke/template.hbs index 70bbd2c87..6beb0b673 100644 --- a/lib/shared/addon/components/cluster-driver/driver-rke/template.hbs +++ b/lib/shared/addon/components/cluster-driver/driver-rke/template.hbs @@ -165,6 +165,7 @@ @value={{config.kubernetesVersion}} @versions={{versionChoices}} @clusterTemplateQuestions={{clusterTemplateQuestions}} + @showNotAllowed=true />
diff --git a/lib/shared/addon/components/form-versions/component.js b/lib/shared/addon/components/form-versions/component.js index 2a1332746..68a9180f0 100644 --- a/lib/shared/addon/components/form-versions/component.js +++ b/lib/shared/addon/components/form-versions/component.js @@ -23,6 +23,7 @@ export default Component.extend({ disabled: false, value: null, mode: 'new', + showNotAllowed: false, editing: equal('mode', 'edit'), isView: equal('mode', 'view'), @@ -135,11 +136,13 @@ export default Component.extend({ }; } } else { + const suffix = ( this.showNotAllowed ? 'formVersions.notallowed' : 'formVersions.unsupported' ); + if (gt(version, coerceVersion(maxVersion))) { if (overrideMatch && !isEmpty(overrideMatch.satisfies)) { out = { disabled: true, - label: `${ label } ${ this.intl.t('formVersions.unsupported') }`, + label: `${ label } ${ this.intl.t(suffix) }`, value: v }; } else { @@ -152,7 +155,7 @@ export default Component.extend({ } else if (lt(version, coerceVersion(maxVersion))) { out = { disabled: true, - label: `${ label } ${ this.intl.t('formVersions.unsupported') }`, + label: `${ label } ${ this.intl.t(suffix) }`, value: v }; } diff --git a/package.json b/package.json index 0b5d16806..b0968cd2c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ui", - "version": "2.3.2", + "version": "2.3.3", "private": true, "repository": "https://github.com/rancher/ui", "license": "Apache-2.0", diff --git a/translations/en-us.yaml b/translations/en-us.yaml index 5a90d2a09..92c8c400f 100644 --- a/translations/en-us.yaml +++ b/translations/en-us.yaml @@ -5579,7 +5579,8 @@ formVersions: experimental: "(experimental)" dotx: "Latest {minor} (allows patch version upgrades)" downgrade: "(can't downgrade)" - unsupported: "(not allowed by template)" + notallowed: "(not allowed by template)" + unsupported: "(unsupported)" formIstioHost: prompt: Select a host... @@ -6154,6 +6155,7 @@ modalEditPassword: mode: generate: 'Use a new randomly generated password:' manual: 'Set a specific password to use:' + deleteTokens: Delete all existing API keys modalFeedback: header: Welcome to {appName}!