| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | <template lang="pug">  transition(:duration="400")    .modal(v-show='isShown', v-cloak)      transition(name='modal-background')        .modal-background(v-show='isShown')      .modal-container        transition(name='modal-content')          .modal-content(v-show='isShown')            template(v-if='step === "qr"')              header.is-blue Setup your 2FA app              section.modal-loading                i                span Wiki.js {{ mode }} in progress...                em Please wait            template(v-if='step === "error"')              header.is-red Error              section.modal-loading                span {{ error }}              footer                a.button.is-grey.is-outlined(@click='cancel') Discard            template(v-if='step === "confirm"')              header.is-blue Two-Factor Authentication              section                label.label Do you want to enable 2FA?                span.note Two-Factor Authentication (2FA) provides an extra layer of security for your account. Upon login, you will be prompted to enter a token generated by a 2FA app (e.g. Authy, Google Authenticator, etc.).              footer                a.button.is-grey.is-outlined(@click='cancel') Discard                a.button.is-blue(@click='confirm') Setup</template><script>export default {  name: 'modal-profile-2fa',  data() {    return {      isLoading: false,      error: ''    }  },  computed: {    isShown() {      return this.$store.state.modalProfile2fa.shown    },    step() {      return this.$store.state.modalProfile2fa.step    }  },  methods: {    cancel() {      this.isLoading = false      this.$store.dispatch('modalProfile2fa/close')    },    confirm() {      this.$http.post('/admin/profile/2fa', {        action: 'setup'      }).then(resp => {        this.$store.commit('modalProfile2fa/stepChange', 'qr')      }).catch(err => {        this.$store.commit('modalProfile2fa/stepChange', 'error')        this.error = err.body.msg      })    }  }}</script>
 |