site.js 6.33 KB
Newer Older
1
const graphHelper = require('../../helpers/graph')
2
const _ = require('lodash')
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

/* global WIKI */

module.exports = {
  Query: {
    async site() { return {} }
  },
  Mutation: {
    async site() { return {} }
  },
  SiteQuery: {
    async config(obj, args, context, info) {
      return {
        host: WIKI.config.host,
        title: WIKI.config.title,
        company: WIKI.config.company,
19
        contentLicense: WIKI.config.contentLicense,
20
        footerOverride: WIKI.config.footerOverride,
21
        logoUrl: WIKI.config.logoUrl,
22
        pageExtensions: WIKI.config.pageExtensions.join(', '),
23
        ...WIKI.config.seo,
NGPixel's avatar
NGPixel committed
24
        ...WIKI.config.editShortcuts,
25
        ...WIKI.config.features,
26
        ...WIKI.config.security,
27
        authAutoLogin: WIKI.config.auth.autoLogin,
28
        authEnforce2FA: WIKI.config.auth.enforce2FA,
29
        authHideLocal: WIKI.config.auth.hideLocal,
30 31 32 33
        authLoginBgUrl: WIKI.config.auth.loginBgUrl,
        authJwtAudience: WIKI.config.auth.audience,
        authJwtExpiration: WIKI.config.auth.tokenExpiration,
        authJwtRenewablePeriod: WIKI.config.auth.tokenRenewal,
34
        uploadMaxFileSize: WIKI.config.uploads.maxFileSize,
NGPixel's avatar
NGPixel committed
35
        uploadMaxFiles: WIKI.config.uploads.maxFiles,
36 37
        uploadScanSVG: WIKI.config.uploads.scanSVG,
        uploadForceDownload: WIKI.config.uploads.forceDownload
38 39 40 41 42 43
      }
    }
  },
  SiteMutation: {
    async updateConfig(obj, args, context) {
      try {
44
        if (args.hasOwnProperty('host')) {
45 46
          let siteHost = _.trim(args.host)
          if (siteHost.endsWith('/')) {
NGPixel's avatar
NGPixel committed
47
            siteHost = siteHost.slice(0, -1)
48 49 50 51
          }
          WIKI.config.host = siteHost
        }

52
        if (args.hasOwnProperty('title')) {
53 54 55
          WIKI.config.title = _.trim(args.title)
        }

56
        if (args.hasOwnProperty('company')) {
57 58 59
          WIKI.config.company = _.trim(args.company)
        }

60
        if (args.hasOwnProperty('contentLicense')) {
61 62 63
          WIKI.config.contentLicense = args.contentLicense
        }

64 65 66 67
        if (args.hasOwnProperty('footerOverride')) {
          WIKI.config.footerOverride = args.footerOverride
        }

68
        if (args.hasOwnProperty('logoUrl')) {
69 70 71
          WIKI.config.logoUrl = _.trim(args.logoUrl)
        }

72 73 74 75
        if (args.hasOwnProperty('pageExtensions')) {
          WIKI.config.pageExtensions = _.trim(args.pageExtensions).split(',').map(p => p.trim().toLowerCase()).filter(p => p !== '')
        }

76
        WIKI.config.seo = {
77 78 79 80
          description: _.get(args, 'description', WIKI.config.seo.description),
          robots: _.get(args, 'robots', WIKI.config.seo.robots),
          analyticsService: _.get(args, 'analyticsService', WIKI.config.seo.analyticsService),
          analyticsId: _.get(args, 'analyticsId', WIKI.config.seo.analyticsId)
81
        }
82

83 84
        WIKI.config.auth = {
          autoLogin: _.get(args, 'authAutoLogin', WIKI.config.auth.autoLogin),
85
          enforce2FA: _.get(args, 'authEnforce2FA', WIKI.config.auth.enforce2FA),
86
          hideLocal: _.get(args, 'authHideLocal', WIKI.config.auth.hideLocal),
87 88 89 90 91 92
          loginBgUrl: _.get(args, 'authLoginBgUrl', WIKI.config.auth.loginBgUrl),
          audience: _.get(args, 'authJwtAudience', WIKI.config.auth.audience),
          tokenExpiration: _.get(args, 'authJwtExpiration', WIKI.config.auth.tokenExpiration),
          tokenRenewal: _.get(args, 'authJwtRenewablePeriod', WIKI.config.auth.tokenRenewal)
        }

NGPixel's avatar
NGPixel committed
93 94 95 96 97 98 99 100 101 102
        WIKI.config.editShortcuts = {
          editFab: _.get(args, 'editFab', WIKI.config.editShortcuts.editFab),
          editMenuBar: _.get(args, 'editMenuBar', WIKI.config.editShortcuts.editMenuBar),
          editMenuBtn: _.get(args, 'editMenuBtn', WIKI.config.editShortcuts.editMenuBtn),
          editMenuExternalBtn: _.get(args, 'editMenuExternalBtn', WIKI.config.editShortcuts.editMenuExternalBtn),
          editMenuExternalName: _.get(args, 'editMenuExternalName', WIKI.config.editShortcuts.editMenuExternalName),
          editMenuExternalIcon: _.get(args, 'editMenuExternalIcon', WIKI.config.editShortcuts.editMenuExternalIcon),
          editMenuExternalUrl: _.get(args, 'editMenuExternalUrl', WIKI.config.editShortcuts.editMenuExternalUrl)
        }

103
        WIKI.config.features = {
104 105 106
          featurePageRatings: _.get(args, 'featurePageRatings', WIKI.config.features.featurePageRatings),
          featurePageComments: _.get(args, 'featurePageComments', WIKI.config.features.featurePageComments),
          featurePersonalWikis: _.get(args, 'featurePersonalWikis', WIKI.config.features.featurePersonalWikis)
107
        }
108

109
        WIKI.config.security = {
110
          securityOpenRedirect: _.get(args, 'securityOpenRedirect', WIKI.config.security.securityOpenRedirect),
111 112 113 114 115 116 117 118 119 120 121 122
          securityIframe: _.get(args, 'securityIframe', WIKI.config.security.securityIframe),
          securityReferrerPolicy: _.get(args, 'securityReferrerPolicy', WIKI.config.security.securityReferrerPolicy),
          securityTrustProxy: _.get(args, 'securityTrustProxy', WIKI.config.security.securityTrustProxy),
          securitySRI: _.get(args, 'securitySRI', WIKI.config.security.securitySRI),
          securityHSTS: _.get(args, 'securityHSTS', WIKI.config.security.securityHSTS),
          securityHSTSDuration: _.get(args, 'securityHSTSDuration', WIKI.config.security.securityHSTSDuration),
          securityCSP: _.get(args, 'securityCSP', WIKI.config.security.securityCSP),
          securityCSPDirectives: _.get(args, 'securityCSPDirectives', WIKI.config.security.securityCSPDirectives)
        }

        WIKI.config.uploads = {
          maxFileSize: _.get(args, 'uploadMaxFileSize', WIKI.config.uploads.maxFileSize),
NGPixel's avatar
NGPixel committed
123
          maxFiles: _.get(args, 'uploadMaxFiles', WIKI.config.uploads.maxFiles),
124 125
          scanSVG: _.get(args, 'uploadScanSVG', WIKI.config.uploads.scanSVG),
          forceDownload: _.get(args, 'uploadForceDownload', WIKI.config.uploads.forceDownload)
126
        }
127

128
        await WIKI.configSvc.saveToDb(['host', 'title', 'company', 'contentLicense', 'footerOverride', 'seo', 'logoUrl', 'pageExtensions', 'auth', 'editShortcuts', 'features', 'security', 'uploads'])
129

130 131 132 133 134 135
        if (WIKI.config.security.securityTrustProxy) {
          WIKI.app.enable('trust proxy')
        } else {
          WIKI.app.disable('trust proxy')
        }

136 137 138 139 140 141 142 143 144
        return {
          responseResult: graphHelper.generateSuccess('Site configuration updated successfully')
        }
      } catch (err) {
        return graphHelper.generateError(err)
      }
    }
  }
}