xref: /openbmc/webui-vue/src/views/ChangePassword/ChangePassword.vue (revision 2c98b0954ac5c50ea9c77e9ee780e3dee4fcdad8)
133058576SYoshie Muranaka<template>
233058576SYoshie Muranaka  <div class="change-password-container mx-auto ml-md-5 mb-3">
333058576SYoshie Muranaka    <alert variant="danger" class="mb-4">
4*2c98b095SYoshie Muranaka      <p v-if="changePasswordError">
5*2c98b095SYoshie Muranaka        {{ $t('pageChangePassword.changePasswordError') }}
6*2c98b095SYoshie Muranaka      </p>
7*2c98b095SYoshie Muranaka      <p v-else>{{ $t('pageChangePassword.changePasswordAlertMessage') }}</p>
833058576SYoshie Muranaka    </alert>
933058576SYoshie Muranaka    <dl>
1033058576SYoshie Muranaka      <dt>{{ $t('pageChangePassword.username') }}</dt>
1133058576SYoshie Muranaka      <dd>{{ username }}</dd>
1233058576SYoshie Muranaka    </dl>
1333058576SYoshie Muranaka    <b-form novalidate @submit.prevent="changePassword">
1433058576SYoshie Muranaka      <b-form-group
1533058576SYoshie Muranaka        label-for="password"
1633058576SYoshie Muranaka        :label="$t('pageChangePassword.newPassword')"
1733058576SYoshie Muranaka      >
1833058576SYoshie Muranaka        <input-password-toggle>
1933058576SYoshie Muranaka          <b-form-input
2033058576SYoshie Muranaka            id="password"
2133058576SYoshie Muranaka            v-model="form.password"
2233058576SYoshie Muranaka            autofocus="autofocus"
2333058576SYoshie Muranaka            type="password"
2433058576SYoshie Muranaka            :state="getValidationState($v.form.password)"
25*2c98b095SYoshie Muranaka            @change="$v.form.password.$touch()"
2633058576SYoshie Muranaka          >
2733058576SYoshie Muranaka          </b-form-input>
2833058576SYoshie Muranaka          <b-form-invalid-feedback role="alert">
2933058576SYoshie Muranaka            <template v-if="!$v.form.password.required">
3033058576SYoshie Muranaka              {{ $t('global.form.fieldRequired') }}
3133058576SYoshie Muranaka            </template>
3233058576SYoshie Muranaka          </b-form-invalid-feedback>
3333058576SYoshie Muranaka        </input-password-toggle>
3433058576SYoshie Muranaka      </b-form-group>
3533058576SYoshie Muranaka      <b-form-group
3633058576SYoshie Muranaka        label-for="password-confirm"
3733058576SYoshie Muranaka        :label="$t('pageChangePassword.confirmNewPassword')"
3833058576SYoshie Muranaka      >
3933058576SYoshie Muranaka        <input-password-toggle>
4033058576SYoshie Muranaka          <b-form-input
4133058576SYoshie Muranaka            id="password-confirm"
4233058576SYoshie Muranaka            v-model="form.passwordConfirm"
4333058576SYoshie Muranaka            type="password"
4433058576SYoshie Muranaka            :state="getValidationState($v.form.passwordConfirm)"
45*2c98b095SYoshie Muranaka            @change="$v.form.passwordConfirm.$touch()"
4633058576SYoshie Muranaka          >
4733058576SYoshie Muranaka          </b-form-input>
4833058576SYoshie Muranaka          <b-form-invalid-feedback role="alert">
4933058576SYoshie Muranaka            <template v-if="!$v.form.passwordConfirm.required">
5033058576SYoshie Muranaka              {{ $t('global.form.fieldRequired') }}
5133058576SYoshie Muranaka            </template>
5233058576SYoshie Muranaka            <template v-else-if="!$v.form.passwordConfirm.sameAsPassword">
5333058576SYoshie Muranaka              {{ $t('global.form.passwordsDoNotMatch') }}
5433058576SYoshie Muranaka            </template>
5533058576SYoshie Muranaka          </b-form-invalid-feedback>
5633058576SYoshie Muranaka        </input-password-toggle>
5733058576SYoshie Muranaka      </b-form-group>
5833058576SYoshie Muranaka      <div class="text-right">
59*2c98b095SYoshie Muranaka        <b-button type="button" variant="link" @click="goBack">
6033058576SYoshie Muranaka          {{ $t('pageChangePassword.goBack') }}
6133058576SYoshie Muranaka        </b-button>
6233058576SYoshie Muranaka        <b-button type="submit" variant="primary">
6333058576SYoshie Muranaka          {{ $t('pageChangePassword.changePassword') }}
6433058576SYoshie Muranaka        </b-button>
6533058576SYoshie Muranaka      </div>
6633058576SYoshie Muranaka    </b-form>
6733058576SYoshie Muranaka  </div>
6833058576SYoshie Muranaka</template>
6933058576SYoshie Muranaka
7033058576SYoshie Muranaka<script>
7133058576SYoshie Muranakaimport { required, sameAs } from 'vuelidate/lib/validators';
7233058576SYoshie Muranakaimport Alert from '@/components/Global/Alert';
7333058576SYoshie Muranakaimport VuelidateMixin from '@/components/Mixins/VuelidateMixin';
7433058576SYoshie Muranakaimport InputPasswordToggle from '@/components/Global/InputPasswordToggle';
75*2c98b095SYoshie Muranakaimport BVToastMixin from '@/components/Mixins/BVToastMixin';
7633058576SYoshie Muranaka
7733058576SYoshie Muranakaexport default {
7833058576SYoshie Muranaka  name: 'ChangePassword',
7933058576SYoshie Muranaka  components: { Alert, InputPasswordToggle },
80*2c98b095SYoshie Muranaka  mixins: [VuelidateMixin, BVToastMixin],
8133058576SYoshie Muranaka  data() {
8233058576SYoshie Muranaka    return {
8333058576SYoshie Muranaka      form: {
8433058576SYoshie Muranaka        password: null,
8533058576SYoshie Muranaka        passwordConfirm: null
8633058576SYoshie Muranaka      },
87*2c98b095SYoshie Muranaka      username: this.$store.getters['global/username'],
88*2c98b095SYoshie Muranaka      changePasswordError: false
8933058576SYoshie Muranaka    };
9033058576SYoshie Muranaka  },
9133058576SYoshie Muranaka  validations() {
9233058576SYoshie Muranaka    return {
9333058576SYoshie Muranaka      form: {
9433058576SYoshie Muranaka        password: { required },
9533058576SYoshie Muranaka        passwordConfirm: {
9633058576SYoshie Muranaka          required,
9733058576SYoshie Muranaka          sameAsPassword: sameAs('password')
9833058576SYoshie Muranaka        }
9933058576SYoshie Muranaka      }
10033058576SYoshie Muranaka    };
10133058576SYoshie Muranaka  },
10233058576SYoshie Muranaka  methods: {
10333058576SYoshie Muranaka    goBack() {
104*2c98b095SYoshie Muranaka      // Remove session created if navigating back to the Login page
105*2c98b095SYoshie Muranaka      this.$store.dispatch('authentication/logout');
10633058576SYoshie Muranaka    },
10733058576SYoshie Muranaka    changePassword() {
108*2c98b095SYoshie Muranaka      this.$v.$touch();
109*2c98b095SYoshie Muranaka      if (this.$v.$invalid) return;
110*2c98b095SYoshie Muranaka      let data = {
111*2c98b095SYoshie Muranaka        originalUsername: this.username,
112*2c98b095SYoshie Muranaka        password: this.form.password
113*2c98b095SYoshie Muranaka      };
114*2c98b095SYoshie Muranaka
115*2c98b095SYoshie Muranaka      this.$store
116*2c98b095SYoshie Muranaka        .dispatch('localUsers/updateUser', data)
117*2c98b095SYoshie Muranaka        .then(() => this.$router.push('/'))
118*2c98b095SYoshie Muranaka        .catch(() => (this.changePasswordError = true));
11933058576SYoshie Muranaka    }
12033058576SYoshie Muranaka  }
12133058576SYoshie Muranaka};
12233058576SYoshie Muranaka</script>
12333058576SYoshie Muranaka
12433058576SYoshie Muranaka<style lang="scss" scoped>
12533058576SYoshie Muranaka.change-password-container {
12633058576SYoshie Muranaka  max-width: 360px;
12733058576SYoshie Muranaka}
12833058576SYoshie Muranaka</style>
129