|
|
<template lang='pug'> v-container(fluid, grid-list-lg) v-layout(row wrap) v-flex(xs12) .admin-header img.animated.fadeInUp(src='/_assets/svg/icon-validation.svg', alt='SSL', style='width: 80px;') .admin-header-title .headline.primary--text.animated.fadeInLeft {{ $t('admin:ssl.title') }} .subtitle-1.grey--text.animated.fadeInLeft {{ $t('admin:ssl.subtitle') }} v-spacer v-btn.animated.fadeInDown( v-if='info.sslProvider === `letsencrypt` && info.httpsPort > 0' color='black' dark depressed @click='renewCertificate' large :loading='loadingRenew' ) v-icon(left) mdi-cached span {{$t('admin:ssl.renewCertificate')}} v-form.pt-3 v-layout(row wrap) v-flex(lg6 xs12) v-card.animated.fadeInUp v-subheader {{ $t('admin:ssl.currentState') }} v-list(two-line, dense) v-list-item v-list-item-avatar v-icon.indigo.white--text mdi-handshake v-list-item-content v-list-item-title {{ $t(`admin:ssl.provider`) }} v-list-item-subtitle {{ providerTitle }} template(v-if='info.sslProvider === `letsencrypt` && info.httpsPort > 0') v-list-item v-list-item-avatar v-icon.indigo.white--text mdi-application v-list-item-content v-list-item-title {{ $t(`admin:ssl.domain`) }} v-list-item-subtitle {{ info.sslDomain }} v-list-item v-list-item-avatar v-icon.indigo.white--text mdi-at v-list-item-content v-list-item-title {{ $t('admin:ssl.subscriberEmail') }} v-list-item-subtitle {{ info.sslSubscriberEmail }} v-list-item v-list-item-avatar v-icon.indigo.white--text mdi-calendar-remove-outline v-list-item-content v-list-item-title {{ $t('admin:ssl.expiration') }} v-list-item-subtitle {{ info.sslExpirationDate | moment('calendar') }} v-list-item v-list-item-avatar v-icon.indigo.white--text mdi-traffic-light v-list-item-content v-list-item-title {{ $t(`admin:ssl.status`) }} v-list-item-subtitle {{ info.sslStatus }}
v-flex(lg6 xs12) v-card.animated.fadeInUp.wait-p2s v-subheader {{ $t('admin:ssl.ports') }} v-list(two-line, dense) v-list-item v-list-item-avatar v-icon.blue.white--text mdi-lock-open-variant v-list-item-content v-list-item-title {{ $t(`admin:ssl.httpPort`) }} v-list-item-subtitle {{ info.httpPort }} template(v-if='info.httpsPort > 0') v-divider v-list-item v-list-item-avatar v-icon.green.white--text mdi-lock v-list-item-content v-list-item-title {{ $t(`admin:ssl.httpsPort`) }} v-list-item-subtitle {{ info.httpsPort }} v-divider v-list-item v-list-item-avatar v-icon.indigo.white--text mdi-sign-direction v-list-item-content v-list-item-title {{ $t(`admin:ssl.httpPortRedirect`) }} v-list-item-subtitle {{ info.httpRedirection }} v-list-item-action v-btn.red--text( v-if='info.httpRedirection' depressed :color='$vuetify.theme.dark ? `red darken-4` : `red lighten-5`' :class='$vuetify.theme.dark ? `text--lighten-5` : `text--darken-2`' @click='toggleRedir' :loading='loadingRedir' ) v-icon(left) mdi-power span {{$t('admin:ssl.httpPortRedirectTurnOff')}} v-btn.green--text( v-else depressed :color='$vuetify.theme.dark ? `green darken-4` : `green lighten-5`' :class='$vuetify.theme.dark ? `text--lighten-5` : `text--darken-2`' @click='toggleRedir' :loading='loadingRedir' ) v-icon(left) mdi-power span {{$t('admin:ssl.httpPortRedirectTurnOn')}}
v-dialog( v-model='loadingRenew' persistent max-width='450' ) v-card(color='black', dark) v-card-text.pa-10.text-center semipolar-spinner.animated.fadeIn( :animation-duration='1500' :size='65' color='#FFF' style='margin: 0 auto;' ) .mt-5.body-1.white--text {{$t('admin:ssl.renewCertificateLoadingTitle')}} .caption.mt-4 {{$t('admin:ssl.renewCertificateLoadingSubtitle')}}
</template>
<script> import _ from 'lodash' import gql from 'graphql-tag'
import { SemipolarSpinner } from 'epic-spinners'
export default { components: { SemipolarSpinner }, data() { return { loadingRenew: false, loadingRedir: false, info: { sslDomain: '', sslProvider: '', sslSubscriberEmail: '', sslExpirationDate: false, sslStatus: '', httpPort: 0, httpRedirection: false, httpsPort: 0 } } }, computed: { providerTitle () { switch (this.info.sslProvider) { case 'custom': return this.$t('admin:ssl.providerCustomCertificate') case 'letsencrypt': return this.$t('admin:ssl.providerLetsEncrypt') default: return this.$t('admin:ssl.providerDisabled') } } }, methods: { async toggleRedir () { this.loadingRedir = true try { this.info.httpRedirection = !this.info.httpRedirection await this.$apollo.mutate({ mutation: gql`
mutation ($enabled: Boolean!) { system { setHTTPSRedirection(enabled: $enabled) { responseResult { succeeded errorCode slug message } } } } `,
variables: { enabled: _.get(this.info, 'httpRedirection', false) }, watchLoading (isLoading) { this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-ssl-toggleRedirection') } }) this.$store.commit('showNotification', { style: 'success', message: this.$t('admin:ssl.httpPortRedirectSaveSuccess'), icon: 'check' }) } catch (err) { this.info.httpRedirection = !this.info.httpRedirection this.$store.commit('pushGraphError', err) } this.loadingRedir = false }, async renewCertificate () { this.loadingRenew = true try { const respRaw = await this.$apollo.mutate({ mutation: gql`
mutation { system { renewHTTPSCertificate { responseResult { succeeded errorCode slug message } } } } `,
watchLoading (isLoading) { this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-ssl-renew') } }) const resp = _.get(respRaw, 'data.system.renewHTTPSCertificate.responseResult', {}) if (resp.succeeded) { this.$store.commit('showNotification', { style: 'success', message: this.$t('admin:ssl.renewCertificateSuccess'), icon: 'check' }) } else { throw new Error(resp.message) } } catch (err) { this.$store.commit('pushGraphError', err) } this.loadingRenew = false } }, apollo: { info: { query: gql`
{ system { info { httpPort httpRedirection httpsPort sslDomain sslExpirationDate sslProvider sslStatus sslSubscriberEmail } } } `,
fetchPolicy: 'network-only', update: (data) => _.cloneDeep(data.system.info), watchLoading (isLoading) { this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-ssl-refresh') } } } } </script>
<style lang='scss'>
</style>
|