samlesa 2.12.113 → 2.14.0
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.
Potentially problematic release.
This version of samlesa might be problematic. Click here for more details.
- package/build/index.js +18 -54
- package/build/index.js.map +1 -1
- package/build/src/api.js +18 -24
- package/build/src/api.js.map +1 -1
- package/build/src/binding-post.js +337 -365
- package/build/src/binding-post.js.map +1 -1
- package/build/src/binding-redirect.js +312 -340
- package/build/src/binding-redirect.js.map +1 -1
- package/build/src/binding-simplesign.js +201 -229
- package/build/src/binding-simplesign.js.map +1 -1
- package/build/src/entity-idp.js +119 -127
- package/build/src/entity-idp.js.map +1 -1
- package/build/src/entity-sp.js +88 -96
- package/build/src/entity-sp.js.map +1 -1
- package/build/src/entity.js +193 -225
- package/build/src/entity.js.map +1 -1
- package/build/src/extractor.js +361 -369
- package/build/src/extractor.js.map +1 -1
- package/build/src/flow.js +313 -320
- package/build/src/flow.js.map +1 -1
- package/build/src/libsaml.js +693 -721
- package/build/src/libsaml.js.map +1 -1
- package/build/src/metadata-idp.js +119 -127
- package/build/src/metadata-idp.js.map +1 -1
- package/build/src/metadata-sp.js +223 -231
- package/build/src/metadata-sp.js.map +1 -1
- package/build/src/metadata.js +138 -166
- package/build/src/metadata.js.map +1 -1
- package/build/src/types.js +4 -11
- package/build/src/types.js.map +1 -1
- package/build/src/urn.js +204 -212
- package/build/src/urn.js.map +1 -1
- package/build/src/utility.js +277 -292
- package/build/src/utility.js.map +1 -1
- package/build/src/validator.js +24 -27
- package/build/src/validator.js.map +1 -1
- package/package.json +13 -7
- package/types/api.d.ts +15 -0
- package/types/api.d.ts.map +1 -0
- package/types/binding-post.d.ts +48 -0
- package/types/binding-post.d.ts.map +1 -0
- package/types/binding-redirect.d.ts +54 -0
- package/types/binding-redirect.d.ts.map +1 -0
- package/types/binding-simplesign.d.ts +41 -0
- package/types/binding-simplesign.d.ts.map +1 -0
- package/types/entity-idp.d.ts +38 -0
- package/types/entity-idp.d.ts.map +1 -0
- package/types/entity-sp.d.ts +38 -0
- package/types/entity-sp.d.ts.map +1 -0
- package/types/entity.d.ts +100 -0
- package/types/entity.d.ts.map +1 -0
- package/types/extractor.d.ts +26 -0
- package/types/extractor.d.ts.map +1 -0
- package/types/flow.d.ts +7 -0
- package/types/flow.d.ts.map +1 -0
- package/types/index.d.ts +11 -10
- package/types/index.d.ts.map +1 -0
- package/types/libsaml.d.ts +208 -0
- package/types/libsaml.d.ts.map +1 -0
- package/types/metadata-idp.d.ts +25 -0
- package/types/metadata-idp.d.ts.map +1 -0
- package/types/metadata-sp.d.ts +37 -0
- package/types/metadata-sp.d.ts.map +1 -0
- package/types/metadata.d.ts +58 -0
- package/types/metadata.d.ts.map +1 -0
- package/types/src/api.d.ts +15 -13
- package/types/src/api.d.ts.map +1 -0
- package/types/src/binding-post.d.ts +48 -47
- package/types/src/binding-post.d.ts.map +1 -0
- package/types/src/binding-redirect.d.ts +54 -53
- package/types/src/binding-redirect.d.ts.map +1 -0
- package/types/src/binding-simplesign.d.ts +41 -40
- package/types/src/binding-simplesign.d.ts.map +1 -0
- package/types/src/entity-idp.d.ts +38 -37
- package/types/src/entity-idp.d.ts.map +1 -0
- package/types/src/entity-sp.d.ts +38 -36
- package/types/src/entity-sp.d.ts.map +1 -0
- package/types/src/entity.d.ts +100 -101
- package/types/src/entity.d.ts.map +1 -0
- package/types/src/extractor.d.ts +26 -25
- package/types/src/extractor.d.ts.map +1 -0
- package/types/src/flow.d.ts +7 -6
- package/types/src/flow.d.ts.map +1 -0
- package/types/src/libsaml.d.ts +208 -209
- package/types/src/libsaml.d.ts.map +1 -0
- package/types/src/metadata-idp.d.ts +25 -24
- package/types/src/metadata-idp.d.ts.map +1 -0
- package/types/src/metadata-sp.d.ts +37 -36
- package/types/src/metadata-sp.d.ts.map +1 -0
- package/types/src/metadata.d.ts +58 -59
- package/types/src/metadata.d.ts.map +1 -0
- package/types/src/types.d.ts +128 -129
- package/types/src/types.d.ts.map +1 -0
- package/types/src/urn.d.ts +195 -194
- package/types/src/urn.d.ts.map +1 -0
- package/types/src/utility.d.ts +133 -134
- package/types/src/utility.d.ts.map +1 -0
- package/types/src/validator.d.ts +4 -3
- package/types/src/validator.d.ts.map +1 -0
- package/types/types.d.ts +128 -0
- package/types/types.d.ts.map +1 -0
- package/types/urn.d.ts +195 -0
- package/types/urn.d.ts.map +1 -0
- package/types/utility.d.ts +133 -0
- package/types/utility.d.ts.map +1 -0
- package/types/validator.d.ts +4 -0
- package/types/validator.d.ts.map +1 -0
- package/.editorconfig +0 -19
- package/.github/FUNDING.yml +0 -1
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/samlify.iml +0 -12
- package/.idea/vcs.xml +0 -6
- package/.pre-commit.sh +0 -15
- package/.snyk +0 -8
- package/.travis.yml +0 -29
- package/Makefile +0 -25
- package/index.d.ts +0 -10
- package/index.js +0 -19
- package/index.js.map +0 -1
- package/index.ts +0 -28
- package/qodana.yaml +0 -29
- package/src/.idea/modules.xml +0 -8
- package/src/.idea/src.iml +0 -12
- package/src/.idea/vcs.xml +0 -6
- package/src/api.ts +0 -36
- package/src/binding-post.ts +0 -348
- package/src/binding-redirect.ts +0 -356
- package/src/binding-simplesign.ts +0 -238
- package/src/entity-idp.ts +0 -153
- package/src/entity-sp.ts +0 -114
- package/src/entity.ts +0 -243
- package/src/extractor.ts +0 -392
- package/src/flow.ts +0 -467
- package/src/libsaml.ts +0 -895
- package/src/metadata-idp.ts +0 -146
- package/src/metadata-sp.ts +0 -268
- package/src/metadata.ts +0 -166
- package/src/types.ts +0 -153
- package/src/urn.ts +0 -211
- package/src/utility.ts +0 -319
- package/src/validator.ts +0 -39
- package/tsconfig.json +0 -38
- package/tslint.json +0 -35
- package/types.d.ts +0 -2
package/build/src/utility.js
CHANGED
|
@@ -1,293 +1,278 @@
|
|
|
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
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
* @
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
* @
|
|
79
|
-
* @
|
|
80
|
-
*/
|
|
81
|
-
function
|
|
82
|
-
return
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
* @
|
|
87
|
-
* @param {
|
|
88
|
-
* @return {string}
|
|
89
|
-
*/
|
|
90
|
-
function
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
* @
|
|
96
|
-
* @param {
|
|
97
|
-
* @return {
|
|
98
|
-
*/
|
|
99
|
-
function
|
|
100
|
-
const
|
|
101
|
-
return
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
* @
|
|
106
|
-
* @
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
const input = Array.prototype.map.call(
|
|
111
|
-
return Array.from((
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
* @
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
* @
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
* @
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
* @
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
function getPublicKeyPemFromCertificate(
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
//
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
//
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
format: 'pem'
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
base64Encode,
|
|
279
|
-
base64Decode,
|
|
280
|
-
deflateString,
|
|
281
|
-
inflateString,
|
|
282
|
-
normalizeCerString,
|
|
283
|
-
normalizePemString,
|
|
284
|
-
getFullURL,
|
|
285
|
-
parseString,
|
|
286
|
-
applyDefault,
|
|
287
|
-
getPublicKeyPemFromCertificate,
|
|
288
|
-
readPrivateKey,
|
|
289
|
-
convertToString,
|
|
290
|
-
isNonEmptyArray,
|
|
291
|
-
};
|
|
292
|
-
exports.default = utility;
|
|
1
|
+
/**
|
|
2
|
+
* @file utility.ts
|
|
3
|
+
* @author tngan
|
|
4
|
+
* @desc Library for some common functions (e.g. de/inflation, en/decoding)
|
|
5
|
+
*/
|
|
6
|
+
import { X509Certificate, createPrivateKey } from 'node:crypto';
|
|
7
|
+
import { inflate, deflate } from 'pako';
|
|
8
|
+
const BASE64_STR = 'base64';
|
|
9
|
+
/**
|
|
10
|
+
* @desc Mimic lodash.zipObject
|
|
11
|
+
* @param arr1 {string[]}
|
|
12
|
+
* @param arr2 {[]}
|
|
13
|
+
*/
|
|
14
|
+
export function zipObject(arr1, arr2, skipDuplicated = true) {
|
|
15
|
+
return arr1.reduce((res, l, i) => {
|
|
16
|
+
if (skipDuplicated) {
|
|
17
|
+
res[l] = arr2[i];
|
|
18
|
+
return res;
|
|
19
|
+
}
|
|
20
|
+
// if key exists, aggregate with array in order to get rid of duplicate key
|
|
21
|
+
if (res[l] !== undefined) {
|
|
22
|
+
res[l] = Array.isArray(res[l])
|
|
23
|
+
? res[l].concat(arr2[i])
|
|
24
|
+
: [res[l]].concat(arr2[i]);
|
|
25
|
+
return res;
|
|
26
|
+
}
|
|
27
|
+
res[l] = arr2[i];
|
|
28
|
+
return res;
|
|
29
|
+
}, {});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @desc Alternative to lodash.flattenDeep
|
|
33
|
+
* @reference https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_flattendeep
|
|
34
|
+
* @param input {[]}
|
|
35
|
+
*/
|
|
36
|
+
export function flattenDeep(input) {
|
|
37
|
+
return Array.isArray(input)
|
|
38
|
+
? input.reduce((a, b) => a.concat(flattenDeep(b)), [])
|
|
39
|
+
: [input];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @desc Alternative to lodash.last
|
|
43
|
+
* @reference https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_last
|
|
44
|
+
* @param input {[]}
|
|
45
|
+
*/
|
|
46
|
+
export function last(input) {
|
|
47
|
+
return input.slice(-1)[0];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* @desc Alternative to lodash.uniq
|
|
51
|
+
* @reference https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_uniq
|
|
52
|
+
* @param input {string[]}
|
|
53
|
+
*/
|
|
54
|
+
export function uniq(input) {
|
|
55
|
+
const set = new Set(input);
|
|
56
|
+
return [...set];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* @desc Alternative to lodash.get
|
|
60
|
+
* @reference https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_get
|
|
61
|
+
* @param obj
|
|
62
|
+
* @param path
|
|
63
|
+
* @param defaultValue
|
|
64
|
+
*/
|
|
65
|
+
export function get(obj, path, defaultValue) {
|
|
66
|
+
return path.split('.')
|
|
67
|
+
.reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @desc Check if the input is string
|
|
71
|
+
* @param {any} input
|
|
72
|
+
*/
|
|
73
|
+
export function isString(input) {
|
|
74
|
+
return typeof input === 'string';
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* @desc Encode string with base64 format
|
|
78
|
+
* @param {string} message plain-text message
|
|
79
|
+
* @return {string} base64 encoded string
|
|
80
|
+
*/
|
|
81
|
+
function base64Encode(message) {
|
|
82
|
+
return Buffer.from(message).toString(BASE64_STR);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @desc Decode string from base64 format
|
|
86
|
+
* @param {string} base64Message encoded string
|
|
87
|
+
* @param {boolean} isBytes determine the return value type (True: bytes False: string)
|
|
88
|
+
* @return {bytes/string} decoded bytes/string depends on isBytes, default is {string}
|
|
89
|
+
*/
|
|
90
|
+
export function base64Decode(base64Message, isBytes) {
|
|
91
|
+
const bytes = Buffer.from(base64Message, BASE64_STR);
|
|
92
|
+
return Boolean(isBytes) ? bytes : bytes.toString();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @desc Compress the string
|
|
96
|
+
* @param {string} message
|
|
97
|
+
* @return {string} compressed string
|
|
98
|
+
*/
|
|
99
|
+
function deflateString(message) {
|
|
100
|
+
const input = Array.prototype.map.call(message, char => char.charCodeAt(0));
|
|
101
|
+
return Array.from(deflate(input, { raw: true }));
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* @desc Decompress the compressed string
|
|
105
|
+
* @param {string} compressedString
|
|
106
|
+
* @return {string} decompressed string
|
|
107
|
+
*/
|
|
108
|
+
export function inflateString(compressedString) {
|
|
109
|
+
const inputBuffer = Buffer.from(compressedString, BASE64_STR);
|
|
110
|
+
const input = Array.prototype.map.call(inputBuffer.toString('binary'), char => char.charCodeAt(0));
|
|
111
|
+
return Array.from(inflate(input, { raw: true }))
|
|
112
|
+
.map((byte) => String.fromCharCode(byte))
|
|
113
|
+
.join('');
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* @desc Abstract the normalizeCerString and normalizePemString
|
|
117
|
+
* @param {buffer} File stream or string
|
|
118
|
+
* @param {string} String for header and tail
|
|
119
|
+
* @return {string} A formatted certificate string
|
|
120
|
+
*/
|
|
121
|
+
function _normalizeCerString(bin, format) {
|
|
122
|
+
return bin.toString().replace(/\n/g, '').replace(/\r/g, '').replace(`-----BEGIN ${format}-----`, '').replace(`-----END ${format}-----`, '').replace(/ /g, '').replace(/\t/g, '');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* @desc Parse the .cer to string format without line break, header and footer
|
|
126
|
+
* @param {string} certString declares the certificate contents
|
|
127
|
+
* @return {string} certificiate in string format
|
|
128
|
+
*/
|
|
129
|
+
function normalizeCerString(certString) {
|
|
130
|
+
return _normalizeCerString(certString, 'CERTIFICATE');
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* @desc Normalize the string in .pem format without line break, header and footer
|
|
134
|
+
* @param {string} pemString
|
|
135
|
+
* @return {string} private key in string format
|
|
136
|
+
*/
|
|
137
|
+
function normalizePemString(pemString) {
|
|
138
|
+
return _normalizeCerString(pemString.toString(), 'RSA PRIVATE KEY');
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* @desc Return the complete URL
|
|
142
|
+
* @param {object} req HTTP request
|
|
143
|
+
* @return {string} URL
|
|
144
|
+
*/
|
|
145
|
+
function getFullURL(req) {
|
|
146
|
+
return `${req.protocol}://${req.get('host')}${req.originalUrl}`;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* @desc Parse input string, return default value if it is undefined
|
|
150
|
+
* @param {string/boolean}
|
|
151
|
+
* @return {boolean}
|
|
152
|
+
*/
|
|
153
|
+
function parseString(str, defaultValue = '') {
|
|
154
|
+
return str || defaultValue;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* @desc Override the object by another object (rtl)
|
|
158
|
+
* @param {object} default object
|
|
159
|
+
* @param {object} object applied to the default object
|
|
160
|
+
* @return {object} result object
|
|
161
|
+
*/
|
|
162
|
+
function applyDefault(obj1, obj2) {
|
|
163
|
+
return Object.assign({}, obj1, obj2);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* @desc Get public key in pem format from the certificate included in the metadata
|
|
167
|
+
* @param {string} x509 certificate
|
|
168
|
+
* @return {string} public key fetched from the certificate
|
|
169
|
+
*/
|
|
170
|
+
function getPublicKeyPemFromCertificate(x509CertificateString) {
|
|
171
|
+
const derBuffer = Buffer.from(x509CertificateString, 'base64');
|
|
172
|
+
// 解析 X.509 证书
|
|
173
|
+
const cert2 = new X509Certificate(derBuffer);
|
|
174
|
+
const publicKeyObject = cert2.publicKey;
|
|
175
|
+
// 3. 导出为 PEM 格式
|
|
176
|
+
return publicKeyObject.export({
|
|
177
|
+
type: 'spki', // 使用 Subject Public Key Info 结构
|
|
178
|
+
format: 'pem' // 输出 PEM 格式
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/*function getPublicKeyPemFromCertificate(x509Certificate: string): string {
|
|
182
|
+
// 将 Base64 字符串转为 Buffer(DER 编码)
|
|
183
|
+
const derBuffer = Buffer.from(x509Certificate, 'base64');
|
|
184
|
+
|
|
185
|
+
// 解析 X.509 证书
|
|
186
|
+
const cert = new X509Certificate(derBuffer);
|
|
187
|
+
|
|
188
|
+
// 直接获取公钥的 PEM 格式
|
|
189
|
+
console.log(cert.publicKey?.toString())
|
|
190
|
+
console.log("这就是我的打印")
|
|
191
|
+
return cert.publicKey?.toString();
|
|
192
|
+
}*/
|
|
193
|
+
/**
|
|
194
|
+
* @desc Read private key from pem-formatted string
|
|
195
|
+
* @param {string | Buffer} keyString pem-formatted string
|
|
196
|
+
* @param {string} protected passphrase of the key
|
|
197
|
+
* @return {string} string in pem format
|
|
198
|
+
* If passphrase is used to protect the .pem content (recommend)
|
|
199
|
+
*/
|
|
200
|
+
/**
|
|
201
|
+
* PEM 头尾格式校验与修复
|
|
202
|
+
*/
|
|
203
|
+
function validatePEMHeaders(pem, keyType) {
|
|
204
|
+
const expectedHeader = `-----BEGIN ${keyType}-----`;
|
|
205
|
+
const expectedFooter = `-----END ${keyType}-----`;
|
|
206
|
+
// 自动修复不规范的 PEM 头尾
|
|
207
|
+
return pem
|
|
208
|
+
.replace(/-{5}.*PRIVATE KEY-{5}/g, '') // 清除已有头尾
|
|
209
|
+
.replace(/(\r\n|\n|\r)/gm, '\n') // 统一换行符
|
|
210
|
+
.trim() + // 清理空白
|
|
211
|
+
`\n${expectedHeader}\n${pem}\n${expectedFooter}\n`;
|
|
212
|
+
}
|
|
213
|
+
export function readPrivateKey(keyString, passphrase, isOutputString = true) {
|
|
214
|
+
try {
|
|
215
|
+
// 统一转换为字符串格式处理
|
|
216
|
+
const pemKey = Buffer.isBuffer(keyString)
|
|
217
|
+
? keyString.toString('utf8')
|
|
218
|
+
: keyString;
|
|
219
|
+
// 创建私钥对象 (自动处理加密)
|
|
220
|
+
const keyObject = createPrivateKey({
|
|
221
|
+
key: pemKey,
|
|
222
|
+
format: 'pem',
|
|
223
|
+
passphrase: isString(passphrase) ? passphrase : undefined,
|
|
224
|
+
encoding: 'utf8'
|
|
225
|
+
});
|
|
226
|
+
// 验证密钥类型为 RSA
|
|
227
|
+
if (keyObject.asymmetricKeyType !== 'rsa') {
|
|
228
|
+
throw new Error('仅支持 RSA 私钥类型');
|
|
229
|
+
}
|
|
230
|
+
// 强制转换为 PKCS#1 格式
|
|
231
|
+
const exported = keyObject.export({
|
|
232
|
+
type: 'pkcs1', // 明确指定 RSA 传统格式
|
|
233
|
+
format: 'pem' // 输出为 PEM 格式
|
|
234
|
+
});
|
|
235
|
+
return isOutputString ? String(exported) : Buffer.from(exported, 'utf8');
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
throw new Error(`私钥读取失败: ${error.message}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* @desc Inline syntax sugar
|
|
243
|
+
*/
|
|
244
|
+
function convertToString(input, isOutputString) {
|
|
245
|
+
return Boolean(isOutputString) ? String(input) : input;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* @desc Check if the input is an array with non-zero size
|
|
249
|
+
*/
|
|
250
|
+
export function isNonEmptyArray(a) {
|
|
251
|
+
return Array.isArray(a) && a.length > 0;
|
|
252
|
+
}
|
|
253
|
+
export function castArrayOpt(a) {
|
|
254
|
+
if (a === undefined)
|
|
255
|
+
return [];
|
|
256
|
+
return Array.isArray(a) ? a : [a];
|
|
257
|
+
}
|
|
258
|
+
export function notEmpty(value) {
|
|
259
|
+
return value !== null && value !== undefined;
|
|
260
|
+
}
|
|
261
|
+
const utility = {
|
|
262
|
+
isString,
|
|
263
|
+
base64Encode,
|
|
264
|
+
base64Decode,
|
|
265
|
+
deflateString,
|
|
266
|
+
inflateString,
|
|
267
|
+
normalizeCerString,
|
|
268
|
+
normalizePemString,
|
|
269
|
+
getFullURL,
|
|
270
|
+
parseString,
|
|
271
|
+
applyDefault,
|
|
272
|
+
getPublicKeyPemFromCertificate,
|
|
273
|
+
readPrivateKey,
|
|
274
|
+
convertToString,
|
|
275
|
+
isNonEmptyArray,
|
|
276
|
+
};
|
|
277
|
+
export default utility;
|
|
293
278
|
//# sourceMappingURL=utility.js.map
|
package/build/src/utility.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utility.js","sourceRoot":"","sources":["../../src/utility.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utility.js","sourceRoot":"","sources":["../../src/utility.ts"],"names":[],"mappings":"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"}
|