|
|
@@ -10,23 +10,14 @@ import {
|
|
|
generateUnavailableWhenMaintenanceModeMiddleware, generateUnavailableWhenMaintenanceModeMiddlewareForApi,
|
|
|
} from '../middlewares/unavailable-when-maintenance-mode';
|
|
|
|
|
|
-
|
|
|
import * as allInAppNotifications from './all-in-app-notifications';
|
|
|
import * as forgotPassword from './forgot-password';
|
|
|
import * as privateLegacyPages from './private-legacy-pages';
|
|
|
import * as userActivation from './user-activation';
|
|
|
|
|
|
-const rateLimit = require('express-rate-limit');
|
|
|
const multer = require('multer');
|
|
|
const autoReap = require('multer-autoreap');
|
|
|
|
|
|
-const apiLimiter = rateLimit({
|
|
|
- windowMs: 1 * 60 * 1000, // 1 minutes
|
|
|
- max: 60, // limit each IP to 60 requests per windowMs
|
|
|
- message:
|
|
|
- 'Too many requests sent from this IP, please try again after 1 minute',
|
|
|
-});
|
|
|
-
|
|
|
autoReap.options.reapOnError = true; // continue reaping the file even if an error occurs
|
|
|
|
|
|
module.exports = function(crowi, app) {
|
|
|
@@ -40,6 +31,7 @@ module.exports = function(crowi, app) {
|
|
|
const certifySharedFile = require('../middlewares/certify-shared-file')(crowi);
|
|
|
const csrf = require('../middlewares/csrf')(crowi);
|
|
|
const injectUserUISettings = require('../middlewares/inject-user-ui-settings-to-localvars')();
|
|
|
+ const rateLimiter = require('../middlewares/rate-limiter')();
|
|
|
const addActivity = generateAddActivityMiddleware(crowi);
|
|
|
|
|
|
const uploads = multer({ dest: `${crowi.tmpDir}uploads` });
|
|
|
@@ -67,6 +59,9 @@ module.exports = function(crowi, app) {
|
|
|
|
|
|
app.use('/api-docs', require('./apiv3/docs')(crowi));
|
|
|
|
|
|
+ // Rate limiter
|
|
|
+ app.use(rateLimiter);
|
|
|
+
|
|
|
// API v3 for admin
|
|
|
app.use('/_api/v3', apiV3AdminRouter);
|
|
|
|
|
|
@@ -78,10 +73,10 @@ module.exports = function(crowi, app) {
|
|
|
app.get('/login/error/:reason' , applicationInstalled, login.error);
|
|
|
app.get('/login' , applicationInstalled, login.preLogin, login.login);
|
|
|
app.get('/login/invited' , applicationInstalled, login.invited);
|
|
|
- app.post('/login/activateInvited' , apiLimiter , applicationInstalled, loginFormValidator.inviteRules(), loginFormValidator.inviteValidation, csrf, login.invited);
|
|
|
- app.post('/login' , apiLimiter , applicationInstalled, loginFormValidator.loginRules(), loginFormValidator.loginValidation, csrf, addActivity, loginPassport.loginWithLocal, loginPassport.loginWithLdap, loginPassport.loginFailure);
|
|
|
+ app.post('/login/activateInvited' , applicationInstalled, loginFormValidator.inviteRules(), loginFormValidator.inviteValidation, csrf, login.invited);
|
|
|
+ app.post('/login' , applicationInstalled, loginFormValidator.loginRules(), loginFormValidator.loginValidation, csrf, addActivity, loginPassport.loginWithLocal, loginPassport.loginWithLdap, loginPassport.loginFailure);
|
|
|
|
|
|
- app.post('/register' , apiLimiter , applicationInstalled, registerFormValidator.registerRules(), registerFormValidator.registerValidation, csrf, addActivity, login.register);
|
|
|
+ app.post('/register' , applicationInstalled, registerFormValidator.registerRules(), registerFormValidator.registerValidation, csrf, addActivity, login.register);
|
|
|
app.get('/register' , applicationInstalled, login.preLogin, login.register);
|
|
|
|
|
|
app.get('/admin' , applicationInstalled, loginRequiredStrictly , adminRequired , admin.index);
|
|
|
@@ -91,7 +86,7 @@ module.exports = function(crowi, app) {
|
|
|
if (!isInstalled) {
|
|
|
const installer = require('./installer')(crowi);
|
|
|
app.get('/installer' , applicationNotInstalled , installer.index);
|
|
|
- app.post('/installer' , apiLimiter , applicationNotInstalled , registerFormValidator.registerRules(), registerFormValidator.registerValidation, csrf, addActivity, installer.install);
|
|
|
+ app.post('/installer' , applicationNotInstalled , registerFormValidator.registerRules(), registerFormValidator.registerValidation, csrf, addActivity, installer.install);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -108,7 +103,7 @@ module.exports = function(crowi, app) {
|
|
|
app.get('/passport/oidc/callback' , loginPassport.loginPassportOidcCallback , loginPassport.loginFailure);
|
|
|
app.post('/passport/saml/callback' , addActivity, loginPassport.loginPassportSamlCallback, loginPassport.loginFailure);
|
|
|
|
|
|
- app.post('/_api/login/testLdap' , apiLimiter , loginRequiredStrictly , loginFormValidator.loginRules() , loginFormValidator.loginValidation , loginPassport.testLdapCredentials);
|
|
|
+ app.post('/_api/login/testLdap' , loginRequiredStrictly , loginFormValidator.loginRules() , loginFormValidator.loginValidation , loginPassport.testLdapCredentials);
|
|
|
|
|
|
// security admin
|
|
|
app.get('/admin/security' , loginRequiredStrictly , adminRequired , admin.security.index);
|
|
|
@@ -230,15 +225,15 @@ module.exports = function(crowi, app) {
|
|
|
app.use('/forgot-password', express.Router()
|
|
|
.use(forgotPassword.checkForgotPasswordEnabledMiddlewareFactory(crowi))
|
|
|
.get('/', forgotPassword.forgotPassword)
|
|
|
- .get('/:token', apiLimiter, injectResetOrderByTokenMiddleware, forgotPassword.resetPassword)
|
|
|
+ .get('/:token', injectResetOrderByTokenMiddleware, forgotPassword.resetPassword)
|
|
|
.use(forgotPassword.handleErrosMiddleware));
|
|
|
|
|
|
app.use('/_private-legacy-pages', express.Router()
|
|
|
.get('/', injectUserUISettings, privateLegacyPages.renderPrivateLegacyPages));
|
|
|
app.use('/user-activation', express.Router()
|
|
|
- .get('/:token', apiLimiter, applicationInstalled, injectUserRegistrationOrderByTokenMiddleware, userActivation.form)
|
|
|
+ .get('/:token', applicationInstalled, injectUserRegistrationOrderByTokenMiddleware, userActivation.form)
|
|
|
.use(userActivation.tokenErrorHandlerMiddeware));
|
|
|
- app.post('/user-activation/register', apiLimiter, applicationInstalled, csrf, userActivation.registerRules(), userActivation.validateRegisterForm, userActivation.registerAction(crowi));
|
|
|
+ app.post('/user-activation/register', applicationInstalled, csrf, userActivation.registerRules(), userActivation.validateRegisterForm, userActivation.registerAction(crowi));
|
|
|
|
|
|
app.get('/share/:linkId', page.showSharedPage);
|
|
|
|