About.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <template>
  2. <responsive-width-wrapper>
  3. <h1 class="title has-text-grey-dark">{{ pagetitle }}</h1>
  4. <p class="block">
  5. <span :class="$root.showDarkMode ? 'has-text-white':'has-text-black'"><span class="is-size-5">2FAuth</span> v{{ appVersion }}</span><br />
  6. {{ $t('commons.2fauth_teaser')}}
  7. </p>
  8. <img class="about-logo" src="logo.svg" alt="2FAuth logo" />
  9. <p class="block" :class="showUserOptions ? 'mb-5' : '' ">
  10. ©Bubka <a class="is-size-7" href="https://github.com/Bubka/2FAuth/blob/master/LICENSE">AGPL-3.0 license</a>
  11. </p>
  12. <h2 class="title is-5 has-text-grey-light">
  13. {{ $t('commons.resources') }}
  14. </h2>
  15. <div class="buttons">
  16. <a class="button" :class="{'is-dark' : $root.showDarkMode}" href="https://github.com/Bubka/2FAuth" target="_blank">
  17. <span class="icon is-small">
  18. <font-awesome-icon :icon="['fab', 'github-alt']" />
  19. </span>
  20. <span>Github</span>
  21. </a>
  22. <a class="button" :class="{'is-dark' : $root.showDarkMode}" href="https://docs.2fauth.app/" target="_blank">
  23. <span class="icon is-small">
  24. <font-awesome-icon :icon="['fas', 'book']" />
  25. </span>
  26. <span>Docs</span>
  27. </a>
  28. <a class="button" :class="{'is-dark' : $root.showDarkMode}" href="https://demo.2fauth.app/" target="_blank">
  29. <span class="icon is-small">
  30. <font-awesome-icon :icon="['fas', 'flask']" />
  31. </span>
  32. <span>Demo</span>
  33. </a>
  34. <a class="button" :class="{'is-dark' : $root.showDarkMode}" href="https://docs.2fauth.app/resources/rapidoc.html" target="_blank">
  35. <span class="icon is-small">
  36. <font-awesome-icon :icon="['fas', 'code']" />
  37. </span>
  38. <span>API</span>
  39. </a>
  40. </div>
  41. <h2 class="title is-5 has-text-grey-light">
  42. {{ $t('commons.credits') }}
  43. </h2>
  44. <p class="block">
  45. <ul>
  46. <li>{{ $t('commons.made_with')}}&nbsp;<a href="https://docs.2fauth.app/credits/">Laravel, Bulma CSS, Vue.js and more</a></li>
  47. <li>{{ $t('commons.ui_icons_by')}}&nbsp;<a href="https://fontawesome.com/">Font Awesome</a>&nbsp;<a class="is-size-7" href="https://fontawesome.com/license/free">(CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)</a></li>
  48. <li>{{ $t('commons.logos_by')}}&nbsp;<a href="https://2fa.directory/">2FA Directory</a>&nbsp;<a class="is-size-7" href="https://github.com/2factorauth/twofactorauth/blob/master/LICENSE.md">(MIT License)</a></li>
  49. </ul>
  50. </p>
  51. <h2 class="title is-5 has-text-grey-light">
  52. {{ $t('commons.environment') }}
  53. </h2>
  54. <div class="about-debug box is-family-monospace is-size-7">
  55. <button :aria-label="$t('commons.copy_to_clipboard')" class="button is-like-text is-pulled-right is-small is-text" v-clipboard="() => this.$refs.listInfos.innerText" v-clipboard:success="clipboardSuccessHandler">
  56. <font-awesome-icon :icon="['fas', 'copy']" />
  57. </button>
  58. <ul ref="listInfos">
  59. <li v-for="(value, key) in infos" :value="value" :key="key"><b>{{key}}</b>: {{value}}</li>
  60. </ul>
  61. </div>
  62. <div v-if="showUserOptions">
  63. <h2 class="title is-5 has-text-grey-light">
  64. {{ $t('settings.user_options') }}
  65. </h2>
  66. <div class="about-debug box is-family-monospace is-size-7">
  67. <button :aria-label="$t('commons.copy_to_clipboard')" class="button is-like-text is-pulled-right is-small is-text" v-clipboard="() => this.$refs.listUserOptions.innerText" v-clipboard:success="clipboardSuccessHandler">
  68. <font-awesome-icon :icon="['fas', 'copy']" />
  69. </button>
  70. <ul ref="listUserOptions">
  71. <li v-for="(value, option) in options" :value="value" :key="option"><b>{{option}}</b>: {{value}}</li>
  72. </ul>
  73. </div>
  74. </div>
  75. <!-- footer -->
  76. <vue-footer :showButtons="true">
  77. <!-- close button -->
  78. <p class="control">
  79. <router-link :to="{ name: 'accounts', params: { toRefresh: true } }" role="button" :aria-label="$t('commons.close_the_x_page', {pagetitle: pagetitle})" class="button is-rounded" :class="{'is-dark' : $root.showDarkMode}">{{ $t('commons.close') }}</router-link>
  80. </p>
  81. </vue-footer>
  82. </responsive-width-wrapper>
  83. </template>
  84. <script>
  85. export default {
  86. data() {
  87. return {
  88. pagetitle: this.$t('commons.about'),
  89. infos : null,
  90. options : null,
  91. showUserOptions: false,
  92. }
  93. },
  94. async mounted() {
  95. await this.axios.get('infos').then(response => {
  96. this.infos = response.data
  97. if (response.data.options) {
  98. this.options = response.data.options
  99. delete this.infos.options
  100. this.showUserOptions = true
  101. }
  102. })
  103. },
  104. methods: {
  105. clipboardSuccessHandler ({ value, event }) {
  106. this.$notify({ type: 'is-success', text: this.$t('commons.copied_to_clipboard') })
  107. },
  108. clipboardErrorHandler ({ value, event }) {
  109. console.log('error', value)
  110. },
  111. }
  112. }
  113. </script>