-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathindex.js
More file actions
44 lines (37 loc) · 1.09 KB
/
index.js
File metadata and controls
44 lines (37 loc) · 1.09 KB
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 process from 'node:process';
// eslint-disable-next-line import/no-anonymous-default-export
export default function (options) {
options ||= {};
const maxAge = options.maxAge || 86_400;
const includeSubDomains =
options.includeSubDomains === undefined ? true : options.includeSubdomains;
return (request, response, next) => {
let ignoreRequest = process.env.NODE_ENV !== 'production';
const secure =
request.connection.encrypted ||
request.get('X-Forwarded-Proto') === 'https';
if (options.ignoreFilter) {
ignoreRequest ||= options.ignoreFilter(request);
}
if (ignoreRequest) {
next();
return;
}
if (secure) {
let header = `max-age=${maxAge}`;
if (includeSubDomains) {
header += '; includeSubDomains';
}
if (options.preload) {
header += '; preload';
}
response.setHeader('Strict-Transport-Security', header);
next();
} else {
response.writeHead(301, {
Location: `https://${request.get('host')}${request.url}`,
});
response.end();
}
};
}