config.ts 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import type { Types } from 'mongoose';
  2. import { Schema } from 'mongoose';
  3. import uniqueValidator from 'mongoose-unique-validator';
  4. import { RehypeSanitizeType } from '~/interfaces/services/rehype-sanitize';
  5. import { getOrCreateModel } from '../util/mongoose-utils';
  6. export interface IConfig {
  7. _id: Types.ObjectId;
  8. ns: string;
  9. key: string;
  10. value: string;
  11. createdAt: Date;
  12. }
  13. /*
  14. * define methods type
  15. */
  16. interface ModelMethods { any }
  17. const schema = new Schema<IConfig>({
  18. ns: { type: String, required: true },
  19. key: { type: String, required: true },
  20. value: { type: String, required: true },
  21. }, {
  22. timestamps: true,
  23. });
  24. // define unique compound index
  25. schema.index({ ns: 1, key: 1 }, { unique: true });
  26. schema.plugin(uniqueValidator);
  27. /**
  28. * default values when GROWI is cleanly installed
  29. */
  30. export const generateConfigsForInstalling = (): { [key: string]: any } => {
  31. // eslint-disable-next-line no-use-before-define
  32. const config = defaultCrowiConfigs;
  33. // overwrite
  34. config['app:installed'] = true;
  35. config['app:fileUpload'] = true;
  36. config['app:isV5Compatible'] = true;
  37. return config;
  38. };
  39. /**
  40. * default values when migrated from Official Crowi
  41. */
  42. export const defaultCrowiConfigs: { [key: string]: any } = {
  43. /* eslint-disable key-spacing */
  44. 'app:installed' : false,
  45. 'app:confidential' : undefined,
  46. 'app:fileUpload' : false,
  47. 'app:globalLang' : 'en_US',
  48. 'security:restrictGuestMode' : 'Deny',
  49. 'security:registrationMode' : 'Open',
  50. 'security:registrationWhitelist' : [],
  51. 'security:list-policy:hideRestrictedByOwner' : false,
  52. 'security:list-policy:hideRestrictedByGroup' : false,
  53. // DEPRECATED: 'security:pageCompleteDeletionAuthority' : undefined,
  54. 'security:pageDeletionAuthority' : undefined,
  55. 'security:pageCompleteDeletionAuthority' : undefined,
  56. 'security:pageRecursiveDeletionAuthority' : undefined,
  57. 'security:pageRecursiveCompleteDeletionAuthority' : undefined,
  58. 'security:isAllGroupMembershipRequiredForPageCompleteDeletion' : true,
  59. 'security:disableLinkSharing' : false,
  60. 'security:user-homepage-deletion:isEnabled': false,
  61. 'security:user-homepage-deletion:isForceDeleteUserHomepageOnUserDeletion': false,
  62. 'security:isRomUserAllowedToComment': false,
  63. 'security:passport-local:isEnabled' : true,
  64. 'security:passport-ldap:isEnabled' : false,
  65. 'security:passport-ldap:serverUrl' : undefined,
  66. 'security:passport-ldap:isUserBind' : undefined,
  67. 'security:passport-ldap:bindDN' : undefined,
  68. 'security:passport-ldap:bindDNPassword' : undefined,
  69. 'security:passport-ldap:searchFilter' : undefined,
  70. 'security:passport-ldap:attrMapUsername' : undefined,
  71. 'security:passport-ldap:attrMapName' : undefined,
  72. 'security:passport-ldap:attrMapMail' : undefined,
  73. 'security:passport-ldap:groupSearchBase' : undefined,
  74. 'security:passport-ldap:groupSearchFilter' : undefined,
  75. 'security:passport-ldap:groupDnProperty' : undefined,
  76. 'security:passport-ldap:isSameUsernameTreatedAsIdenticalUser': false,
  77. 'security:passport-saml:isEnabled' : false,
  78. 'security:passport-saml:isSameEmailTreatedAsIdenticalUser': false,
  79. 'security:passport-google:isEnabled' : false,
  80. 'security:passport-google:clientId': undefined,
  81. 'security:passport-google:clientSecret': undefined,
  82. 'security:passport-google:isSameUsernameTreatedAsIdenticalUser': false,
  83. 'security:passport-github:isEnabled' : false,
  84. 'security:passport-github:clientId': undefined,
  85. 'security:passport-github:clientSecret': undefined,
  86. 'security:passport-github:isSameUsernameTreatedAsIdenticalUser': false,
  87. 'security:passport-oidc:isEnabled' : false,
  88. 'aws:s3Bucket' : 'growi',
  89. 'aws:s3Region' : 'ap-northeast-1',
  90. 'aws:s3AccessKeyId' : undefined,
  91. 'aws:s3SecretAccessKey' : undefined,
  92. 'aws:s3CustomEndpoint' : undefined,
  93. 'mail:from' : undefined,
  94. 'mail:smtpHost' : undefined,
  95. 'mail:smtpPort' : undefined,
  96. 'mail:smtpUser' : undefined,
  97. 'mail:smtpPassword' : undefined,
  98. 'customize:css' : undefined,
  99. 'customize:script' : undefined,
  100. 'customize:noscript' : undefined,
  101. 'customize:title' : undefined,
  102. 'customize:highlightJsStyle' : 'github',
  103. 'customize:highlightJsStyleBorder' : false,
  104. 'customize:theme' : 'default', // PresetThemes.DEFAULT
  105. 'customize:theme:forcedColorScheme' : null,
  106. 'customize:isContainerFluid' : false,
  107. 'customize:isEnabledTimeline' : true,
  108. 'customize:isEnabledAttachTitleHeader' : false,
  109. 'customize:showPageLimitationS' : 20,
  110. 'customize:showPageLimitationM' : 10,
  111. 'customize:showPageLimitationL' : 50,
  112. 'customize:showPageLimitationXL' : 20,
  113. 'customize:isEnabledStaleNotification': false,
  114. 'customize:isAllReplyShown': false,
  115. 'customize:isSearchScopeChildrenAsDefault': false,
  116. 'customize:isEnabledMarp': false,
  117. 'customize:isSidebarCollapsedMode': false,
  118. 'customize:isSidebarClosedAtDockMode': false,
  119. 'notification:owner-page:isEnabled': false,
  120. 'notification:group-page:isEnabled': false,
  121. 'importer:esa:team_name': undefined,
  122. 'importer:esa:access_token': undefined,
  123. 'importer:qiita:team_name': undefined,
  124. 'importer:qiita:access_token': undefined,
  125. 'external-user-group:ldap:groupMembershipAttributeType': 'DN',
  126. 'external-user-group:ldap:autoGenerateUserOnGroupSync': false,
  127. 'external-user-group:ldap:preserveDeletedGroups': false,
  128. 'external-user-group:keycloak:autoGenerateUserOnGroupSync': false,
  129. 'external-user-group:keycloak:preserveDeletedGroups': false,
  130. /* eslint-enable key-spacing */
  131. };
  132. export const defaultMarkdownConfigs: { [key: string]: any } = {
  133. // don't use it, but won't turn it off
  134. 'markdown:xss:tagWhitelist': [],
  135. 'markdown:xss:attrWhitelist': [],
  136. 'markdown:rehypeSanitize:isEnabledPrevention': true,
  137. 'markdown:rehypeSanitize:option': RehypeSanitizeType.RECOMMENDED,
  138. 'markdown:rehypeSanitize:tagNames': [],
  139. 'markdown:rehypeSanitize:attributes': '{}',
  140. 'markdown:isEnabledLinebreaks': false,
  141. 'markdown:isEnabledLinebreaksInComments': true,
  142. 'markdown:adminPreferredIndentSize': 4,
  143. 'markdown:isIndentSizeForced': false,
  144. };
  145. export const defaultNotificationConfigs: { [key: string]: any } = {
  146. 'slack:isIncomingWebhookPrioritized': false,
  147. 'slack:incomingWebhookUrl': undefined,
  148. 'slack:token': undefined,
  149. };
  150. export const Config = getOrCreateModel<IConfig, ModelMethods>('Config', schema);