| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 | <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>
 |