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