@mbsks/rspfx-manifest-server 0.0.6 → 0.0.9

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 CHANGED
@@ -1,4 +1,18 @@
1
- export declare function ensureCertificates(certsDir: string): Promise<{
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
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsDA,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAqCjG"}
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
- export async function ensureCertificates(certsDir) {
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
- return { key, cert };
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
- writeFile(path.join(certsDir, 'cert.pem.trust.txt'), TRUST_NOTES)
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;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/F,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IACD,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAC9B,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAC5C;QACE,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,GAAG;QACT,SAAS,EAAE,QAAQ;QACnB,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE;YACzC;gBACE,IAAI,EAAE,gBAAgB;gBACtB,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE;oBAC/B,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE;iBAC7B;aACF;SACF;KACF,CACF,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACjD,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;QAC9B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,WAAW,CAAC;KAClE,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CACT,4CAA4C,QAAQ,kDAAkD,CACvG,CAAC;IACF,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAChD,CAAC"}
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.6",
3
+ "version": "0.0.9",
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-core": "0.0.6",
21
- "@mbsks/rspfx-diagnostics": "0.0.6"
20
+ "@mbsks/rspfx-core": "0.0.9",
21
+ "@mbsks/rspfx-diagnostics": "0.0.9"
22
22
  },
23
23
  "description": "RSPFX HTTPS manifest server for the SharePoint workbench (:4321)",
24
24
  "repository": {