site.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. const graphHelper = require('../../helpers/graph')
  2. const _ = require('lodash')
  3. /* global WIKI */
  4. module.exports = {
  5. Query: {
  6. async site() { return {} }
  7. },
  8. Mutation: {
  9. async site() { return {} }
  10. },
  11. SiteQuery: {
  12. async config(obj, args, context, info) {
  13. return {
  14. host: WIKI.config.host,
  15. title: WIKI.config.title,
  16. company: WIKI.config.company,
  17. contentLicense: WIKI.config.contentLicense,
  18. footerOverride: WIKI.config.footerOverride,
  19. logoUrl: WIKI.config.logoUrl,
  20. pageExtensions: WIKI.config.pageExtensions.join(', '),
  21. ...WIKI.config.seo,
  22. ...WIKI.config.editShortcuts,
  23. ...WIKI.config.features,
  24. ...WIKI.config.security,
  25. authAutoLogin: WIKI.config.auth.autoLogin,
  26. authEnforce2FA: WIKI.config.auth.enforce2FA,
  27. authHideLocal: WIKI.config.auth.hideLocal,
  28. authLoginBgUrl: WIKI.config.auth.loginBgUrl,
  29. authJwtAudience: WIKI.config.auth.audience,
  30. authJwtExpiration: WIKI.config.auth.tokenExpiration,
  31. authJwtRenewablePeriod: WIKI.config.auth.tokenRenewal,
  32. uploadMaxFileSize: WIKI.config.uploads.maxFileSize,
  33. uploadMaxFiles: WIKI.config.uploads.maxFiles,
  34. uploadScanSVG: WIKI.config.uploads.scanSVG,
  35. uploadForceDownload: WIKI.config.uploads.forceDownload
  36. }
  37. }
  38. },
  39. SiteMutation: {
  40. async updateConfig(obj, args, context) {
  41. try {
  42. if (args.hasOwnProperty('host')) {
  43. let siteHost = _.trim(args.host)
  44. if (siteHost.endsWith('/')) {
  45. siteHost = siteHost.slice(0, -1)
  46. }
  47. WIKI.config.host = siteHost
  48. }
  49. if (args.hasOwnProperty('title')) {
  50. WIKI.config.title = _.trim(args.title)
  51. }
  52. if (args.hasOwnProperty('company')) {
  53. WIKI.config.company = _.trim(args.company)
  54. }
  55. if (args.hasOwnProperty('contentLicense')) {
  56. WIKI.config.contentLicense = args.contentLicense
  57. }
  58. if (args.hasOwnProperty('footerOverride')) {
  59. WIKI.config.footerOverride = args.footerOverride
  60. }
  61. if (args.hasOwnProperty('logoUrl')) {
  62. WIKI.config.logoUrl = _.trim(args.logoUrl)
  63. }
  64. if (args.hasOwnProperty('pageExtensions')) {
  65. WIKI.config.pageExtensions = _.trim(args.pageExtensions).split(',').map(p => p.trim().toLowerCase()).filter(p => p !== '')
  66. }
  67. WIKI.config.seo = {
  68. description: _.get(args, 'description', WIKI.config.seo.description),
  69. robots: _.get(args, 'robots', WIKI.config.seo.robots),
  70. analyticsService: _.get(args, 'analyticsService', WIKI.config.seo.analyticsService),
  71. analyticsId: _.get(args, 'analyticsId', WIKI.config.seo.analyticsId)
  72. }
  73. WIKI.config.auth = {
  74. autoLogin: _.get(args, 'authAutoLogin', WIKI.config.auth.autoLogin),
  75. enforce2FA: _.get(args, 'authEnforce2FA', WIKI.config.auth.enforce2FA),
  76. hideLocal: _.get(args, 'authHideLocal', WIKI.config.auth.hideLocal),
  77. loginBgUrl: _.get(args, 'authLoginBgUrl', WIKI.config.auth.loginBgUrl),
  78. audience: _.get(args, 'authJwtAudience', WIKI.config.auth.audience),
  79. tokenExpiration: _.get(args, 'authJwtExpiration', WIKI.config.auth.tokenExpiration),
  80. tokenRenewal: _.get(args, 'authJwtRenewablePeriod', WIKI.config.auth.tokenRenewal)
  81. }
  82. WIKI.config.editShortcuts = {
  83. editFab: _.get(args, 'editFab', WIKI.config.editShortcuts.editFab),
  84. editMenuBar: _.get(args, 'editMenuBar', WIKI.config.editShortcuts.editMenuBar),
  85. editMenuBtn: _.get(args, 'editMenuBtn', WIKI.config.editShortcuts.editMenuBtn),
  86. editMenuExternalBtn: _.get(args, 'editMenuExternalBtn', WIKI.config.editShortcuts.editMenuExternalBtn),
  87. editMenuExternalName: _.get(args, 'editMenuExternalName', WIKI.config.editShortcuts.editMenuExternalName),
  88. editMenuExternalIcon: _.get(args, 'editMenuExternalIcon', WIKI.config.editShortcuts.editMenuExternalIcon),
  89. editMenuExternalUrl: _.get(args, 'editMenuExternalUrl', WIKI.config.editShortcuts.editMenuExternalUrl)
  90. }
  91. WIKI.config.features = {
  92. featurePageRatings: _.get(args, 'featurePageRatings', WIKI.config.features.featurePageRatings),
  93. featurePageComments: _.get(args, 'featurePageComments', WIKI.config.features.featurePageComments),
  94. featurePersonalWikis: _.get(args, 'featurePersonalWikis', WIKI.config.features.featurePersonalWikis)
  95. }
  96. WIKI.config.security = {
  97. securityOpenRedirect: _.get(args, 'securityOpenRedirect', WIKI.config.security.securityOpenRedirect),
  98. securityIframe: _.get(args, 'securityIframe', WIKI.config.security.securityIframe),
  99. securityReferrerPolicy: _.get(args, 'securityReferrerPolicy', WIKI.config.security.securityReferrerPolicy),
  100. securityTrustProxy: _.get(args, 'securityTrustProxy', WIKI.config.security.securityTrustProxy),
  101. securitySRI: _.get(args, 'securitySRI', WIKI.config.security.securitySRI),
  102. securityHSTS: _.get(args, 'securityHSTS', WIKI.config.security.securityHSTS),
  103. securityHSTSDuration: _.get(args, 'securityHSTSDuration', WIKI.config.security.securityHSTSDuration),
  104. securityCSP: _.get(args, 'securityCSP', WIKI.config.security.securityCSP),
  105. securityCSPDirectives: _.get(args, 'securityCSPDirectives', WIKI.config.security.securityCSPDirectives)
  106. }
  107. WIKI.config.uploads = {
  108. maxFileSize: _.get(args, 'uploadMaxFileSize', WIKI.config.uploads.maxFileSize),
  109. maxFiles: _.get(args, 'uploadMaxFiles', WIKI.config.uploads.maxFiles),
  110. scanSVG: _.get(args, 'uploadScanSVG', WIKI.config.uploads.scanSVG),
  111. forceDownload: _.get(args, 'uploadForceDownload', WIKI.config.uploads.forceDownload)
  112. }
  113. await WIKI.configSvc.saveToDb(['host', 'title', 'company', 'contentLicense', 'footerOverride', 'seo', 'logoUrl', 'pageExtensions', 'auth', 'editShortcuts', 'features', 'security', 'uploads'])
  114. if (WIKI.config.security.securityTrustProxy) {
  115. WIKI.app.enable('trust proxy')
  116. } else {
  117. WIKI.app.disable('trust proxy')
  118. }
  119. return {
  120. responseResult: graphHelper.generateSuccess('Site configuration updated successfully')
  121. }
  122. } catch (err) {
  123. return graphHelper.generateError(err)
  124. }
  125. }
  126. }
  127. }