HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/web/matomo.circ/plugins/TwoFactorAuth/vue/src/ShowRecoveryCodes/ShowRecoveryCodes.vue
<!--
  Matomo - free/libre analytics platform

  @link    https://matomo.org
  @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
-->

<template>
  <div>
    <p>{{ translate('TwoFactorAuth_RecoveryCodesExplanation') }}<br /><br /></p>
    <div class="alert alert-warning">{{ translate('TwoFactorAuth_RecoveryCodesSecurity') }}</div>

    <ul v-select-on-focus="{}" class="twoFactorRecoveryCodes browser-default" v-if="codes?.length">
      <li v-for="(code, index) in codes" :key="index">
        {{ code.toUpperCase().match(/.{1,4}/g).join('-') }}
      </li>
    </ul>
    <div class="alert alert-danger" v-else>
      {{ translate('TwoFactorAuth_RecoveryCodesAllUsed') }}
    </div>

    <p>
      <br />
      <input
        type="button"
        class="btn backupRecoveryCode"
        @click="downloadRecoveryCodes(); $emit('downloaded');"
        :value="translate('General_Download')"
        style="margin-right:3.5px"
      />
      <input
        type="button"
        class="btn backupRecoveryCode"
        @click="print(); $emit('downloaded');"
        :value="translate('General_Print')"
        style="margin-right:3.5px"
      />
      <input
        type="button"
        class="btn backupRecoveryCode"
        @click="copyRecoveryCodesToClipboard(); $emit('downloaded');"
        :value="translate('General_Copy')"
      />
    </p>
  </div>
</template>

<script lang="ts">
import { defineComponent } from 'vue';
import { Matomo, SelectOnFocus } from 'CoreHome';

export default defineComponent({
  props: {
    codes: {
      type: Array,
      default() { return []; },
    },
  },
  directives: {
    SelectOnFocus,
  },
  emits: ['downloaded'],
  methods: {
    copyRecoveryCodesToClipboard() {
      const textarea = document.createElement('textarea');
      textarea.value = this.codes.join('\n');
      textarea.setAttribute('readonly', '');
      textarea.style.position = 'absolute';
      textarea.style.left = '-9999px';
      document.body.appendChild(textarea);
      textarea.select();
      document.execCommand('copy');
      document.body.removeChild(textarea);
    },
    downloadRecoveryCodes() {
      Matomo.helper.sendContentAsDownload('analytics_recovery_codes.txt', this.codes.join('\n'));
    },
    print() {
      window.print();
    },
  },
});
</script>