index.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. import growiPlugin from '~/features/growi-plugin/server/routes/apiv3/admin';
  2. import { factory as openaiRouteFactory } from '~/features/openai/server/routes';
  3. import { allreadyInstalledMiddleware } from '~/server/middlewares/application-not-installed';
  4. import loggerFactory from '~/utils/logger';
  5. import { generateAddActivityMiddleware } from '../../middlewares/add-activity';
  6. import injectUserRegistrationOrderByTokenMiddleware from '../../middlewares/inject-user-registration-order-by-token-middleware';
  7. import * as loginFormValidator from '../../middlewares/login-form-validator';
  8. import * as registerFormValidator from '../../middlewares/register-form-validator';
  9. import g2gTransfer from './g2g-transfer';
  10. import importRoute from './import';
  11. import pageListing from './page-listing';
  12. import securitySettings from './security-settings';
  13. import { factory as userRouteFactory } from './user';
  14. import * as userActivation from './user-activation';
  15. const logger = loggerFactory('growi:routes:apiv3'); // eslint-disable-line no-unused-vars
  16. const express = require('express');
  17. const router = express.Router();
  18. const routerForAdmin = express.Router();
  19. const routerForAuth = express.Router();
  20. /** @param {import('~/server/crowi').default} crowi Crowi instance */
  21. module.exports = (crowi, app) => {
  22. const isInstalled = crowi.configManager.getConfig('app:installed');
  23. const minPasswordLength = crowi.configManager.getConfig(
  24. 'app:minPasswordLength',
  25. );
  26. // add custom functions to express response
  27. require('./response')(express, crowi);
  28. routerForAdmin.use('/healthcheck', require('./healthcheck')(crowi));
  29. // admin
  30. routerForAdmin.use('/admin-home', require('./admin-home')(crowi));
  31. routerForAdmin.use('/markdown-setting', require('./markdown-setting')(crowi));
  32. routerForAdmin.use('/app-settings', require('./app-settings')(crowi));
  33. routerForAdmin.use(
  34. '/customize-setting',
  35. require('./customize-setting')(crowi),
  36. );
  37. routerForAdmin.use(
  38. '/notification-setting',
  39. require('./notification-setting')(crowi),
  40. );
  41. routerForAdmin.use('/users', require('./users')(crowi));
  42. routerForAdmin.use('/user-groups', require('./user-group')(crowi));
  43. routerForAdmin.use(
  44. '/external-user-groups',
  45. require('~/features/external-user-group/server/routes/apiv3/external-user-group')(
  46. crowi,
  47. ),
  48. );
  49. routerForAdmin.use('/export', require('./export')(crowi));
  50. routerForAdmin.use('/import', importRoute(crowi));
  51. routerForAdmin.use('/search', require('./search')(crowi));
  52. routerForAdmin.use('/security-setting', securitySettings(crowi));
  53. routerForAdmin.use('/mongo', require('./mongo')(crowi));
  54. routerForAdmin.use(
  55. '/slack-integration-settings',
  56. require('./slack-integration-settings')(crowi),
  57. );
  58. routerForAdmin.use(
  59. '/slack-integration-legacy-settings',
  60. require('./slack-integration-legacy-settings')(crowi),
  61. );
  62. routerForAdmin.use('/activity', require('./activity')(crowi));
  63. routerForAdmin.use('/g2g-transfer', g2gTransfer(crowi));
  64. routerForAdmin.use('/plugins', growiPlugin(crowi));
  65. // auth
  66. const applicationInstalled =
  67. require('../../middlewares/application-installed')(crowi);
  68. const addActivity = generateAddActivityMiddleware(crowi);
  69. const login = require('../login')(crowi, app);
  70. const loginPassport = require('../login-passport')(crowi, app);
  71. routerForAuth.post(
  72. '/login',
  73. applicationInstalled,
  74. loginFormValidator.loginRules(),
  75. loginFormValidator.loginValidation,
  76. addActivity,
  77. loginPassport.injectRedirectTo,
  78. loginPassport.isEnableLoginWithLocalOrLdap,
  79. loginPassport.loginWithLocal,
  80. loginPassport.loginWithLdap,
  81. loginPassport.cannotLoginErrorHadnler,
  82. loginPassport.loginFailure,
  83. );
  84. routerForAuth.use('/invited', require('./invited')(crowi));
  85. routerForAuth.use('/logout', require('./logout')(crowi));
  86. routerForAuth.post(
  87. '/register',
  88. applicationInstalled,
  89. registerFormValidator.registerRules(minPasswordLength),
  90. registerFormValidator.registerValidation,
  91. addActivity,
  92. login.register,
  93. );
  94. routerForAuth.post(
  95. '/user-activation/register',
  96. applicationInstalled,
  97. userActivation.registerRules(minPasswordLength),
  98. userActivation.validateRegisterForm,
  99. userActivation.registerAction(crowi),
  100. );
  101. // installer
  102. routerForAdmin.use(
  103. '/installer',
  104. isInstalled ? allreadyInstalledMiddleware : require('./installer')(crowi),
  105. );
  106. if (!isInstalled) {
  107. return [router, routerForAdmin, routerForAuth];
  108. }
  109. router.use('/in-app-notification', require('./in-app-notification')(crowi));
  110. router.use('/personal-setting', require('./personal-setting')(crowi));
  111. router.use('/user-activities', require('./user-activities')(crowi));
  112. router.use('/user-group-relations', require('./user-group-relation')(crowi));
  113. router.use(
  114. '/external-user-group-relations',
  115. require('~/features/external-user-group/server/routes/apiv3/external-user-group-relation')(
  116. crowi,
  117. ),
  118. );
  119. router.use('/statistics', require('./statistics')(crowi));
  120. router.use('/search', require('./search')(crowi));
  121. router.use('/page', require('./page')(crowi));
  122. router.use('/pages', require('./pages')(crowi));
  123. router.use('/revisions', require('./revisions')(crowi));
  124. router.use('/page-listing', pageListing(crowi));
  125. router.use('/share-links', require('./share-links')(crowi));
  126. router.use('/bookmarks', require('./bookmarks')(crowi));
  127. router.use('/attachment', require('./attachment')(crowi));
  128. router.use('/slack-integration', require('./slack-integration')(crowi));
  129. router.use('/staffs', require('./staffs')(crowi));
  130. router.use('/forgot-password', require('./forgot-password')(crowi));
  131. const user = require('../user')(crowi, null);
  132. router.get('/check-username', user.api.checkUsername);
  133. router.post(
  134. '/complete-registration',
  135. addActivity,
  136. injectUserRegistrationOrderByTokenMiddleware,
  137. userActivation.completeRegistrationRules(),
  138. userActivation.validateCompleteRegistration,
  139. userActivation.completeRegistrationAction(crowi),
  140. );
  141. router.use('/user-ui-settings', require('./user-ui-settings')(crowi));
  142. router.use('/bookmark-folder', require('./bookmark-folder')(crowi));
  143. router.use(
  144. '/templates',
  145. require('~/features/templates/server/routes/apiv3')(crowi),
  146. );
  147. router.use(
  148. '/page-bulk-export',
  149. require('~/features/page-bulk-export/server/routes/apiv3/page-bulk-export')(
  150. crowi,
  151. ),
  152. );
  153. router.use('/openai', openaiRouteFactory(crowi));
  154. router.use('/user', userRouteFactory(crowi));
  155. return [router, routerForAdmin, routerForAuth];
  156. };