-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathExternal.ts
44 lines (39 loc) · 1.41 KB
/
External.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import type { NextFunction, Request, Response } from 'express';
import express from 'express';
import { format } from 'url';
import { getLogger } from '../handler/LoggerHandler';
import { requestAndForwardResponse } from '../handler/RequestHandler';
import type { GetExternalContentQueryParams } from './External.types';
import type { GenericErrorResponse } from '../types';
const router = express.Router();
const logger = getLogger('External');
function pipeRequest(
req: Request<never, any | GenericErrorResponse, any, GetExternalContentQueryParams>,
res: Response,
_next: NextFunction,
url: string,
queryString: any
) {
logger.debug('Piping get request to url:', url, 'with query string:', queryString);
let requestUrl;
if (url.startsWith('//')) {
requestUrl = `http:${url}`;
} else if (url.startsWith('/')) {
requestUrl = format({
protocol: req.protocol,
host: req.get('host'),
pathname: url
});
} else {
requestUrl = url;
}
requestAndForwardResponse(requestUrl, res, {
params: queryString,
blockHtmlContent: true
}).catch(err => res.status(500).send({ message: err.message }));
}
router.get<never, any, any, GetExternalContentQueryParams>('/content', (req, res, next) => {
const { url, ...queryString } = req.query;
pipeRequest(req, res, next, url, queryString);
});
export default router;