summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoshie Muranaka <yoshiemuranaka@gmail.com>2020-03-27 02:59:54 +0300
committerDerick Montague <derick.montague@ibm.com>2020-03-31 02:01:14 +0300
commit1f9ed4c310fe029b960b2ebf9c32e57c5d1498f3 (patch)
tree971c868c0ee2e6acbfc4fd79213afbf4dbfd7cff
parent5ee04ef522612e27d6fef02154bf23e45076ceee (diff)
downloadwebui-vue-1f9ed4c310fe029b960b2ebf9c32e57c5d1498f3.tar.xz
Add local user account manual unlock
Adds ability to manually unlock user account if account service settings lockout duration set to 0. Signed-off-by: Yoshie Muranaka <yoshiemuranaka@gmail.com> Change-Id: I75351c5e03bd5403e8dc7679d8d98b90adb90277
-rw-r--r--src/components/Global/Alert.vue12
-rw-r--r--src/locales/en-US.json3
-rw-r--r--src/store/modules/AccessControl/LocalUserMangementStore.js3
-rw-r--r--src/views/AccessControl/LocalUserManagement/ModalUser.vue45
4 files changed, 57 insertions, 6 deletions
diff --git a/src/components/Global/Alert.vue b/src/components/Global/Alert.vue
index bc65b6e9..d59b25ca 100644
--- a/src/components/Global/Alert.vue
+++ b/src/components/Global/Alert.vue
@@ -1,5 +1,5 @@
<template>
- <b-alert :show="show" :variant="variant">
+ <b-alert :show="show" :variant="variant" :class="{ small }">
<div v-if="variant == 'warning' || variant == 'danger'" class="alert-icon">
<status-icon :status="variant" />
</div>
@@ -27,7 +27,15 @@ export default {
variant: {
type: String,
default: ''
- }
+ },
+ small: Boolean
}
};
</script>
+
+<style lang="scss" scoped>
+.alert.small {
+ padding: $spacer / 2;
+ font-size: 1rem;
+}
+</style>
diff --git a/src/locales/en-US.json b/src/locales/en-US.json
index adc11850..19b20824 100644
--- a/src/locales/en-US.json
+++ b/src/locales/en-US.json
@@ -85,9 +85,11 @@
"editUser": "Edit user",
"viewPrivilegeRoleDescriptions": "View privilege role descriptions",
"modal": {
+ "accountLocked": "Account locked",
"accountStatus": "Account status",
"automaticAfterTimeout": "Automatic after timeout",
"cannotStartWithANumber": "Cannot start with a number",
+ "clickSaveToUnlockAccount": "Click \"Save\" to unlock account",
"confirmUserPassword": "Confirm user password",
"deleteConfirmMessage": "Are you sure you want to delete user '%{user}'? This action cannot be undone.",
"manual": "Manual",
@@ -97,6 +99,7 @@
"passwordsDoNotMatch": "Passwords do not match",
"privilege": "Privilege",
"timeoutDurationSeconds": "Timeout duration (seconds)",
+ "unlock": "Unlock",
"username": "Username",
"userPassword": "User password",
"userUnlockMethod": "User unlock method"
diff --git a/src/store/modules/AccessControl/LocalUserMangementStore.js b/src/store/modules/AccessControl/LocalUserMangementStore.js
index ab314fb8..c729d15f 100644
--- a/src/store/modules/AccessControl/LocalUserMangementStore.js
+++ b/src/store/modules/AccessControl/LocalUserMangementStore.js
@@ -106,13 +106,14 @@ const LocalUserManagementStore = {
},
async updateUser(
{ dispatch },
- { originalUsername, username, password, privilege, status }
+ { originalUsername, username, password, privilege, status, locked }
) {
const data = {};
if (username) data.UserName = username;
if (password) data.Password = password;
if (privilege) data.RoleId = privilege;
if (status !== undefined) data.Enabled = status;
+ if (locked !== undefined) data.Locked = locked;
return await api
.patch(`/redfish/v1/AccountService/Accounts/${originalUsername}`, data)
.then(() => dispatch('getUsers'))
diff --git a/src/views/AccessControl/LocalUserManagement/ModalUser.vue b/src/views/AccessControl/LocalUserManagement/ModalUser.vue
index aacda11b..a9c0f6c5 100644
--- a/src/views/AccessControl/LocalUserManagement/ModalUser.vue
+++ b/src/views/AccessControl/LocalUserManagement/ModalUser.vue
@@ -10,6 +10,31 @@
</template>
<b-form novalidate @submit="handleSubmit">
<b-container>
+ <!-- Manual unlock form control -->
+ <b-row v-if="!newUser && manualUnlockPolicy && user.Locked">
+ <b-col sm="9">
+ <alert :show="true" variant="warning" small>
+ <template v-if="!$v.form.manualUnlock.$dirty">
+ {{ $t('pageLocalUserManagement.modal.accountLocked') }}
+ </template>
+ <template v-else>
+ {{
+ $t('pageLocalUserManagement.modal.clickSaveToUnlockAccount')
+ }}
+ </template>
+ </alert>
+ </b-col>
+ <b-col sm="3">
+ <input v-model="form.manualUnlock" type="hidden" value="false" />
+ <b-button
+ variant="primary"
+ :disabled="$v.form.manualUnlock.$dirty"
+ @click="$v.form.manualUnlock.$touch()"
+ >
+ {{ $t('pageLocalUserManagement.modal.unlock') }}
+ </b-button>
+ </b-col>
+ </b-row>
<b-row>
<b-col>
<b-form-group
@@ -183,9 +208,10 @@ import {
} from 'vuelidate/lib/validators';
import VuelidateMixin from '../../../components/Mixins/VuelidateMixin.js';
import InputPasswordToggle from '../../../components/Global/InputPasswordToggle';
+import Alert from '../../../components/Global/Alert';
export default {
- components: { InputPasswordToggle },
+ components: { Alert, InputPasswordToggle },
mixins: [VuelidateMixin],
props: {
user: {
@@ -206,13 +232,20 @@ export default {
username: '',
privilege: '',
password: '',
- passwordConfirmation: ''
+ passwordConfirmation: '',
+ manualUnlock: false
}
};
},
computed: {
newUser() {
return this.user ? false : true;
+ },
+ accountSettings() {
+ return this.$store.getters['localUsers/accountSettings'];
+ },
+ manualUnlockPolicy() {
+ return !this.accountSettings.accountLockoutDuration;
}
},
watch: {
@@ -250,7 +283,8 @@ export default {
return this.requirePassword();
}),
sameAsPassword: sameAs('password')
- }
+ },
+ manualUnlock: {}
}
};
},
@@ -280,6 +314,11 @@ export default {
if (this.$v.form.password.$dirty) {
userData.password = this.form.password;
}
+ if (this.$v.form.manualUnlock.$dirty) {
+ // If form manualUnlock control $dirty then
+ // set user Locked property to false
+ userData.locked = false;
+ }
if (Object.entries(userData).length === 1) {
this.closeModal();
return;