| 12345678910111213141516171819202122232425262728293031323334 |
- import { ErrorV3 } from '@growi/core/dist/models';
- import type { NextFunction, Response } from 'express';
- import type { AccessTokenParserReq } from '~/server/middlewares/access-token-parser/interfaces';
- import { configManager } from '~/server/service/config-manager';
- import isSimpleRequest from '~/server/util/is-simple-request';
- import loggerFactory from '~/utils/logger';
- const logger = loggerFactory('growi:middleware:certify-origin');
- type Apiv3ErrFunction = (error: ErrorV3) => void;
- const certifyOrigin = (req: AccessTokenParserReq, res: Response & { apiv3Err: Apiv3ErrFunction }, next: NextFunction): void => {
- const appSiteUrl = configManager.getConfig('app:siteUrl');
- const isSameOriginReq = req.headers.origin == null || req.headers.origin === appSiteUrl;
- const accessToken = req.query.access_token ?? req.body.access_token;
- if (!isSameOriginReq && req.headers.origin != null && isSimpleRequest(req)) {
- const message = 'Invalid request (origin check failed but simple request)';
- logger.error(message);
- return res.apiv3Err(new ErrorV3(message));
- }
- if (!isSameOriginReq && accessToken == null && !isSimpleRequest(req)) {
- const message = 'Invalid request (origin check failed and no access token)';
- logger.error(message);
- return res.apiv3Err(new ErrorV3(message));
- }
- next();
- };
- export default certifyOrigin;
|