blob: a611c590d49a25eb4487c60f1cd646687bfba3ab [file] [log] [blame]
<template>
<b-modal
id="modal-settings"
ref="modal"
:title="$t('pageLocalUserManagement.accountPolicySettings')"
@hidden="resetForm"
>
<b-form id="form-settings" novalidate @submit.prevent="handleSubmit">
<b-container>
<b-row>
<b-col>
<b-form-group
:label="
$t('pageLocalUserManagement.modal.maxFailedLoginAttempts')
"
label-for="lockout-threshold"
>
<b-form-text id="lockout-threshold-help-block">
{{
$t('global.form.valueMustBeBetween', {
min: 0,
max: 65535
})
}}
</b-form-text>
<b-form-input
id="lockout-threshold"
v-model.number="form.lockoutThreshold"
type="number"
aria-describedby="lockout-threshold-help-block"
data-test-id="localUserManagement-input-lockoutThreshold"
:state="getValidationState($v.form.lockoutThreshold)"
@input="$v.form.lockoutThreshold.$touch()"
/>
<b-form-invalid-feedback role="alert">
<template v-if="!$v.form.lockoutThreshold.required">
{{ $t('global.form.fieldRequired') }}
</template>
<template
v-if="
!$v.form.lockoutThreshold.minLength ||
!$v.form.lockoutThreshold.maxLength
"
>
{{
$t('global.form.valueMustBeBetween', {
min: 0,
max: 65535
})
}}
</template>
</b-form-invalid-feedback>
</b-form-group>
</b-col>
<b-col>
<b-form-group
:label="$t('pageLocalUserManagement.modal.userUnlockMethod')"
>
<b-form-radio
v-model="form.unlockMethod"
name="unlock-method"
class="mb-2"
:value="0"
data-test-id="localUserManagement-radio-manualUnlock"
@input="$v.form.unlockMethod.$touch()"
>
{{ $t('pageLocalUserManagement.modal.manual') }}
</b-form-radio>
<b-form-radio
v-model="form.unlockMethod"
name="unlock-method"
:value="1"
data-test-id="localUserManagement-radio-automaticUnlock"
@input="$v.form.unlockMethod.$touch()"
>
{{ $t('pageLocalUserManagement.modal.automaticAfterTimeout') }}
</b-form-radio>
<div class="mt-3 ml-4">
<b-form-text id="lockout-duration-help-block">
{{
$t('pageLocalUserManagement.modal.timeoutDurationSeconds')
}}
</b-form-text>
<b-form-input
v-model.number="form.lockoutDuration"
aria-describedby="lockout-duration-help-block"
type="number"
data-test-id="localUserManagement-input-lockoutDuration"
:state="getValidationState($v.form.lockoutDuration)"
:readonly="$v.form.unlockMethod.$model === 0"
@input="$v.form.lockoutDuration.$touch()"
/>
<b-form-invalid-feedback role="alert">
<template v-if="!$v.form.lockoutDuration.required">
{{ $t('global.form.fieldRequired') }}
</template>
<template v-else-if="!$v.form.lockoutDuration.minvalue">
{{ $t('global.form.mustBeAtLeast', { value: 1 }) }}
</template>
</b-form-invalid-feedback>
</div>
</b-form-group>
</b-col>
</b-row>
</b-container>
</b-form>
<template v-slot:modal-footer="{ ok, cancel }">
<b-button
variant="secondary"
data-test-id="localUserManagement-button-cancel"
@click="cancel()"
>
{{ $t('global.action.cancel') }}
</b-button>
<b-button
form="form-settings"
type="submit"
variant="primary"
data-test-id="localUserManagement-button-submit"
@click="onOk"
>
{{ $t('global.action.save') }}
</b-button>
</template>
</b-modal>
</template>
<script>
import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
import {
required,
requiredIf,
minValue,
maxValue
} from 'vuelidate/lib/validators';
export default {
mixins: [VuelidateMixin],
props: {
settings: {
type: Object,
required: true
}
},
data() {
return {
form: {
lockoutThreshold: 0,
unlockMethod: 0,
lockoutDuration: null
}
};
},
watch: {
settings: function({ lockoutThreshold, lockoutDuration }) {
this.form.lockoutThreshold = lockoutThreshold;
this.form.unlockMethod = lockoutDuration ? 1 : 0;
this.form.lockoutDuration = lockoutDuration ? lockoutDuration : null;
}
},
validations: {
form: {
lockoutThreshold: {
minValue: minValue(0),
maxValue: maxValue(65535),
required
},
unlockMethod: { required },
lockoutDuration: {
minValue: function(value) {
return this.form.unlockMethod === 0 || value > 0;
},
required: requiredIf(function() {
return this.form.unlockMethod === 1;
})
}
}
},
methods: {
handleSubmit() {
this.$v.$touch();
if (this.$v.$invalid) return;
let lockoutThreshold;
let lockoutDuration;
if (this.$v.form.lockoutThreshold.$dirty) {
lockoutThreshold = this.form.lockoutThreshold;
}
if (this.$v.form.unlockMethod.$dirty) {
lockoutDuration = this.form.unlockMethod
? this.form.lockoutDuration
: 0;
}
this.$emit('ok', { lockoutThreshold, lockoutDuration });
this.closeModal();
},
onOk(bvModalEvt) {
// prevent modal close
bvModalEvt.preventDefault();
this.handleSubmit();
},
closeModal() {
this.$nextTick(() => {
this.$refs.modal.hide();
});
},
resetForm() {
// Reset form models
this.form.lockoutThreshold = this.settings.lockoutThreshold;
this.form.unlockMethod = this.settings.lockoutDuration ? 1 : 0;
this.form.lockoutDuration = this.settings.lockoutDuration
? this.settings.lockoutDuration
: null;
this.$v.$reset(); // clear validations
}
}
};
</script>