2022-12-19 08:01:04 +01:00
|
|
|
import { IUnleashConfig } from '../types';
|
2022-12-21 12:23:44 +01:00
|
|
|
import MaintenanceService from '../services/maintenance-service';
|
|
|
|
import { IAuthRequest } from '../routes/unleash-types';
|
2022-12-19 08:01:04 +01:00
|
|
|
|
2022-12-21 12:23:44 +01:00
|
|
|
const maintenanceMiddleware = (
|
|
|
|
{ getLogger }: Pick<IUnleashConfig, 'getLogger' | 'flagResolver'>,
|
|
|
|
maintenanceService: MaintenanceService,
|
|
|
|
): any => {
|
2022-12-19 08:01:04 +01:00
|
|
|
const logger = getLogger('/middleware/maintenance-middleware.ts');
|
|
|
|
logger.debug('Enabling Maintenance middleware');
|
|
|
|
|
2022-12-21 12:23:44 +01:00
|
|
|
return async (req: IAuthRequest, res, next) => {
|
|
|
|
const isProtectedPath = !req.path.includes('/maintenance');
|
2022-12-19 08:01:04 +01:00
|
|
|
const writeMethod = ['POST', 'PUT', 'DELETE'].includes(req.method);
|
2022-12-21 12:23:44 +01:00
|
|
|
if (
|
|
|
|
isProtectedPath &&
|
|
|
|
writeMethod &&
|
|
|
|
(await maintenanceService.isMaintenanceMode())
|
|
|
|
) {
|
2022-12-19 08:01:04 +01:00
|
|
|
res.status(503).send({});
|
|
|
|
} else {
|
|
|
|
next();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
export default maintenanceMiddleware;
|