fix: site title check + UI fixes + 2FA setup on account verify
This commit is contained in:
		@@ -177,6 +177,8 @@ import editorStore from '../../store/editor'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* global WIKI */
 | 
					/* global WIKI */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const titleRegex = /[<>"]/i
 | 
				
			||||||
 | 
					
 | 
				
			||||||
WIKI.$store.registerModule('editor', editorStore)
 | 
					WIKI.$store.registerModule('editor', editorStore)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
@@ -186,12 +188,6 @@ export default {
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
  data() {
 | 
					  data() {
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
      analyticsServices: [
 | 
					 | 
				
			||||||
        { text: 'None', value: '' },
 | 
					 | 
				
			||||||
        { text: 'Elasticsearch APM RUM', value: 'elk' },
 | 
					 | 
				
			||||||
        { text: 'Google Analytics', value: 'ga' },
 | 
					 | 
				
			||||||
        { text: 'Google Tag Manager', value: 'gtm' }
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      config: {
 | 
					      config: {
 | 
				
			||||||
        host: '',
 | 
					        host: '',
 | 
				
			||||||
        title: '',
 | 
					        title: '',
 | 
				
			||||||
@@ -238,6 +234,15 @@ export default {
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
  methods: {
 | 
					  methods: {
 | 
				
			||||||
    async save () {
 | 
					    async save () {
 | 
				
			||||||
 | 
					      const title = _.get(this.config, 'title', '')
 | 
				
			||||||
 | 
					      if (titleRegex.test(title)) {
 | 
				
			||||||
 | 
					        this.$store.commit('showNotification', {
 | 
				
			||||||
 | 
					          style: 'error',
 | 
				
			||||||
 | 
					          message: this.$t('admin:general.siteTitleInvalidChars'),
 | 
				
			||||||
 | 
					          icon: 'alert'
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        await this.$apollo.mutate({
 | 
					        await this.$apollo.mutate({
 | 
				
			||||||
          mutation: gql`
 | 
					          mutation: gql`
 | 
				
			||||||
@@ -300,7 +305,7 @@ export default {
 | 
				
			|||||||
        })
 | 
					        })
 | 
				
			||||||
        this.$store.commit('showNotification', {
 | 
					        this.$store.commit('showNotification', {
 | 
				
			||||||
          style: 'success',
 | 
					          style: 'success',
 | 
				
			||||||
          message: 'Configuration saved successfully.',
 | 
					          message: this.$t('admin:general.saveSuccess'),
 | 
				
			||||||
          icon: 'check'
 | 
					          icon: 'check'
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        this.siteTitle = this.config.title
 | 
					        this.siteTitle = this.config.title
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@
 | 
				
			|||||||
          :size='60'
 | 
					          :size='60'
 | 
				
			||||||
          color='#FFF'
 | 
					          color='#FFF'
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        img(v-else-if='mode === `icon`', :src='`/svg/icon-` + icon + `.svg`', :alt='icon')
 | 
					        img(v-else-if='mode === `icon`', :src='`/_assets/svg/icon-` + icon + `.svg`', :alt='icon')
 | 
				
			||||||
        .subtitle-1.white--text {{ title }}
 | 
					        .subtitle-1.white--text {{ title }}
 | 
				
			||||||
        .caption {{ subtitle }}
 | 
					        .caption {{ subtitle }}
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -93,7 +93,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    loader(v-model='isLoading', :mode='loaderMode', :icon='loaderIcon', :color='loaderColor', :title='loaderTitle', :subtitle='loaderSubtitle')
 | 
					    loader(v-model='isLoading', :mode='loaderMode', :icon='loaderIcon', :color='loaderColor', :title='loaderTitle', :subtitle='loaderSubtitle')
 | 
				
			||||||
    nav-footer(color='grey darken-5', dark-color='grey darken-5')
 | 
					    nav-footer(color='grey darken-5', dark-color='grey darken-5')
 | 
				
			||||||
    notify
 | 
					    notify(style='padding-top: 64px;')
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -135,10 +135,14 @@ router.get('/verify/:token', bruteforce.prevent, async (req, res, next) => {
 | 
				
			|||||||
  try {
 | 
					  try {
 | 
				
			||||||
    const usr = await WIKI.models.userKeys.validateToken({ kind: 'verify', token: req.params.token })
 | 
					    const usr = await WIKI.models.userKeys.validateToken({ kind: 'verify', token: req.params.token })
 | 
				
			||||||
    await WIKI.models.users.query().patch({ isVerified: true }).where('id', usr.id)
 | 
					    await WIKI.models.users.query().patch({ isVerified: true }).where('id', usr.id)
 | 
				
			||||||
    const result = await WIKI.models.users.refreshToken(usr)
 | 
					 | 
				
			||||||
    req.brute.reset()
 | 
					    req.brute.reset()
 | 
				
			||||||
    res.cookie('jwt', result.token, { expires: moment().add(1, 'years').toDate() })
 | 
					    if (WIKI.config.auth.enforce2FA) {
 | 
				
			||||||
    res.redirect('/')
 | 
					      res.redirect('/login')
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      const result = await WIKI.models.users.refreshToken(usr)
 | 
				
			||||||
 | 
					      res.cookie('jwt', result.token, { expires: moment().add(1, 'years').toDate() })
 | 
				
			||||||
 | 
					      res.redirect('/')
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  } catch (err) {
 | 
					  } catch (err) {
 | 
				
			||||||
    next(err)
 | 
					    next(err)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user