@mbsks/rspfx-manifest-server 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +15 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +118 -8
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Allowlist validation for the single custom hostname that may be added to
|
|
3
|
+
* the self-signed SAN besides the built-ins (localhost, 127.0.0.1, ::1).
|
|
4
|
+
*
|
|
5
|
+
* - IPs are validated via `isIP` (covers `:` handling for IPv6).
|
|
6
|
+
* - DNS names must match `^[a-z0-9.-]+$` (case-insensitive), 1..253 chars,
|
|
7
|
+
* no `..`, no leading/trailing `.`/`-`, labels 1..63 chars, and must NOT
|
|
8
|
+
* look like a SharePoint tenant suffix (`.sharepoint*`) — custom hostnames
|
|
9
|
+
* should be local dev names, not tenant domains.
|
|
10
|
+
* - Rejects injection characters: `; & " ' space : / \ %` and control chars
|
|
11
|
+
* are already excluded by the DNS regex, but `..` and sharepoint suffix are
|
|
12
|
+
* checked explicitly. `:` is only allowed via IP path.
|
|
13
|
+
*/
|
|
14
|
+
export declare function validateCustomHostname(hostname: string): void;
|
|
15
|
+
export declare function ensureCertificates(certsDir: string, hostname?: string): Promise<{
|
|
2
16
|
key: string;
|
|
3
17
|
cert: string;
|
|
4
18
|
}>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA8DA;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CA2C7D;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAqFpH"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { readFile, mkdir, writeFile } from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { createRequire } from 'node:module';
|
|
4
|
+
import { isIP } from 'node:net';
|
|
5
|
+
import * as crypto from 'node:crypto';
|
|
4
6
|
import { createLogger } from '@mbsks/rspfx-diagnostics';
|
|
7
|
+
// Node 20+ provides X509Certificate; guard for older runtimes so the module
|
|
8
|
+
// still loads and falls back to regeneration instead of throwing at import.
|
|
9
|
+
const X509CertificateCtor = crypto.X509Certificate;
|
|
5
10
|
const TRUST_NOTES = [
|
|
6
11
|
'RSPFX development certificate (self-signed, 825 days)',
|
|
7
12
|
'',
|
|
@@ -18,17 +23,122 @@ const TRUST_NOTES = [
|
|
|
18
23
|
const require = createRequire(import.meta.url);
|
|
19
24
|
const selfsigned = require('selfsigned');
|
|
20
25
|
const logger = createLogger('rspfx');
|
|
21
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Allowlist validation for the single custom hostname that may be added to
|
|
28
|
+
* the self-signed SAN besides the built-ins (localhost, 127.0.0.1, ::1).
|
|
29
|
+
*
|
|
30
|
+
* - IPs are validated via `isIP` (covers `:` handling for IPv6).
|
|
31
|
+
* - DNS names must match `^[a-z0-9.-]+$` (case-insensitive), 1..253 chars,
|
|
32
|
+
* no `..`, no leading/trailing `.`/`-`, labels 1..63 chars, and must NOT
|
|
33
|
+
* look like a SharePoint tenant suffix (`.sharepoint*`) — custom hostnames
|
|
34
|
+
* should be local dev names, not tenant domains.
|
|
35
|
+
* - Rejects injection characters: `; & " ' space : / \ %` and control chars
|
|
36
|
+
* are already excluded by the DNS regex, but `..` and sharepoint suffix are
|
|
37
|
+
* checked explicitly. `:` is only allowed via IP path.
|
|
38
|
+
*/
|
|
39
|
+
export function validateCustomHostname(hostname) {
|
|
40
|
+
if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1') {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (isIP(hostname) !== 0) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (hostname.length === 0 || hostname.length > 253) {
|
|
47
|
+
throw new Error(`Invalid hostname "${hostname}": length must be 1..253`);
|
|
48
|
+
}
|
|
49
|
+
if (hostname.includes('..')) {
|
|
50
|
+
throw new Error(`Invalid hostname "${hostname}": must not contain ".."`);
|
|
51
|
+
}
|
|
52
|
+
if (/[^a-z0-9.-]/i.test(hostname)) {
|
|
53
|
+
throw new Error(`Invalid hostname "${hostname}": must match /^[a-z0-9.-]+$/ (rejects ; & " ' space : / etc.)`);
|
|
54
|
+
}
|
|
55
|
+
if (hostname.startsWith('.') || hostname.startsWith('-') || hostname.endsWith('.') || hostname.endsWith('-')) {
|
|
56
|
+
throw new Error(`Invalid hostname "${hostname}": must not start/end with . or -`);
|
|
57
|
+
}
|
|
58
|
+
// SharePoint suffix reject for custom dev hostname — prevents accidental
|
|
59
|
+
// SAN for a tenant domain (which should use real certs, not self-signed).
|
|
60
|
+
const lower = hostname.toLowerCase();
|
|
61
|
+
if (lower.endsWith('.sharepoint.com') ||
|
|
62
|
+
lower.endsWith('.sharepoint-df.com') ||
|
|
63
|
+
lower.endsWith('.sharepoint.cn') ||
|
|
64
|
+
lower === 'sharepoint.com' ||
|
|
65
|
+
lower === 'sharepoint-df.com' ||
|
|
66
|
+
lower === 'sharepoint.cn') {
|
|
67
|
+
throw new Error(`Invalid hostname "${hostname}": custom hostname must not be a sharepoint domain`);
|
|
68
|
+
}
|
|
69
|
+
// Also reject any label that is empty or too long or starts/ends with -
|
|
70
|
+
for (const label of hostname.split('.')) {
|
|
71
|
+
if (label.length === 0 || label.length > 63) {
|
|
72
|
+
throw new Error(`Invalid hostname "${hostname}": label "${label}" length must be 1..63`);
|
|
73
|
+
}
|
|
74
|
+
if (label.startsWith('-') || label.endsWith('-')) {
|
|
75
|
+
throw new Error(`Invalid hostname "${hostname}": label "${label}" must not start/end with -`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export async function ensureCertificates(certsDir, hostname) {
|
|
80
|
+
if (hostname) {
|
|
81
|
+
validateCustomHostname(hostname);
|
|
82
|
+
}
|
|
22
83
|
const keyPath = path.join(certsDir, 'key.pem');
|
|
23
84
|
const certPath = path.join(certsDir, 'cert.pem');
|
|
24
85
|
try {
|
|
25
86
|
const [key, cert] = await Promise.all([readFile(keyPath, 'utf8'), readFile(certPath, 'utf8')]);
|
|
26
|
-
|
|
87
|
+
let shouldRegenerate = false;
|
|
88
|
+
try {
|
|
89
|
+
if (!X509CertificateCtor) {
|
|
90
|
+
// No X509Certificate available (pre-Node15) — cannot check expiry/
|
|
91
|
+
// SAN, so treat as valid cache hit to avoid churn. Generation will
|
|
92
|
+
// still happen on missing files above.
|
|
93
|
+
shouldRegenerate = false;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
const x509 = new X509CertificateCtor(cert);
|
|
97
|
+
const expiry = Date.parse(x509.validTo);
|
|
98
|
+
if (Number.isNaN(expiry) || expiry - Date.now() < 7 * 24 * 60 * 60 * 1000) {
|
|
99
|
+
shouldRegenerate = true;
|
|
100
|
+
}
|
|
101
|
+
else if (hostname) {
|
|
102
|
+
const alt = x509.subjectAltName ?? '';
|
|
103
|
+
const needsHost = hostname !== 'localhost' && hostname !== '127.0.0.1' && hostname !== '::1' && !alt.includes(hostname);
|
|
104
|
+
const needsIpv6 = !alt.includes('::1') && !alt.includes('0:0:0:0:0:0:0:1');
|
|
105
|
+
if (needsHost || needsIpv6) {
|
|
106
|
+
shouldRegenerate = true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
const alt = x509.subjectAltName ?? '';
|
|
111
|
+
if (!alt.includes('::1') && !alt.includes('0:0:0:0:0:0:0:1')) {
|
|
112
|
+
shouldRegenerate = true;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
shouldRegenerate = true;
|
|
119
|
+
}
|
|
120
|
+
if (!shouldRegenerate) {
|
|
121
|
+
return { key, cert };
|
|
122
|
+
}
|
|
27
123
|
}
|
|
28
124
|
catch {
|
|
29
125
|
// fall through to generation
|
|
30
126
|
}
|
|
31
127
|
await mkdir(certsDir, { recursive: true });
|
|
128
|
+
const altNames = [
|
|
129
|
+
{ type: 2, value: 'localhost' },
|
|
130
|
+
{ type: 7, ip: '127.0.0.1' },
|
|
131
|
+
{ type: 7, ip: '::1' }
|
|
132
|
+
];
|
|
133
|
+
if (hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && hostname !== '::1') {
|
|
134
|
+
const ipVersion = isIP(hostname);
|
|
135
|
+
if (ipVersion === 4 || ipVersion === 6) {
|
|
136
|
+
altNames.push({ type: 7, ip: hostname });
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
altNames.push({ type: 2, value: hostname });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
32
142
|
const pems = selfsigned.generate([{ name: 'commonName', value: 'localhost' }], {
|
|
33
143
|
keySize: 2048,
|
|
34
144
|
days: 825,
|
|
@@ -37,17 +147,17 @@ export async function ensureCertificates(certsDir) {
|
|
|
37
147
|
{ name: 'extKeyUsage', serverAuth: true },
|
|
38
148
|
{
|
|
39
149
|
name: 'subjectAltName',
|
|
40
|
-
altNames
|
|
41
|
-
{ type: 2, value: 'localhost' },
|
|
42
|
-
{ type: 7, ip: '127.0.0.1' }
|
|
43
|
-
]
|
|
150
|
+
altNames
|
|
44
151
|
}
|
|
45
152
|
]
|
|
46
153
|
});
|
|
47
154
|
await Promise.all([
|
|
48
155
|
writeFile(keyPath, pems.private, { mode: 0o600 }),
|
|
49
|
-
writeFile(certPath, pems.cert),
|
|
50
|
-
|
|
156
|
+
writeFile(certPath, pems.cert, { mode: 0o644 }),
|
|
157
|
+
// cert.pem.trust.txt is static help text — intentionally does NOT echo the
|
|
158
|
+
// custom hostname to avoid leaking/injecting unescaped hostnames into a
|
|
159
|
+
// file that users may `cat` or copy-paste into shell commands.
|
|
160
|
+
writeFile(path.join(certsDir, 'cert.pem.trust.txt'), TRUST_NOTES, { mode: 0o644 })
|
|
51
161
|
]);
|
|
52
162
|
logger.info(`Generated self-signed dev certificate in ${certsDir}. See cert.pem.trust.txt for trust instructions.`);
|
|
53
163
|
return { key: pems.private, cert: pems.cert };
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,WAAW,GAAG;IAClB,uDAAuD;IACvD,EAAE;IACF,wFAAwF;IACxF,EAAE;IACF,kFAAkF;IAClF,qEAAqE;IACrE,EAAE;IACF,2GAA2G;IAC3G,oDAAoD;IACpD,oEAAoE;IACpE,EAAE;CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AA6Bb,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAEtC,CAAC;AAEF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mbsks/rspfx-manifest-server",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"license": "MIT",
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"selfsigned": "^2.4.1",
|
|
20
|
-
"@mbsks/rspfx-
|
|
21
|
-
"@mbsks/rspfx-
|
|
20
|
+
"@mbsks/rspfx-core": "0.0.7",
|
|
21
|
+
"@mbsks/rspfx-diagnostics": "0.0.7"
|
|
22
22
|
},
|
|
23
23
|
"description": "RSPFX HTTPS manifest server for the SharePoint workbench (:4321)",
|
|
24
24
|
"repository": {
|