timonel 2.5.1 → 2.6.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.
- package/CHANGELOG.md +6 -0
- package/dist/lib/helm.d.ts +78 -0
- package/dist/lib/helm.d.ts.map +1 -1
- package/dist/lib/helm.js +103 -0
- package/dist/lib/helm.js.map +1 -1
- package/dist/lib/security.d.ts +63 -0
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +223 -0
- package/dist/lib/security.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
# [2.6.0](https://github.com/KenkoGeek/timonel/compare/v2.5.1...v2.6.0) (2025-09-13)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
- **core:** add security helpers - sanitizeEnvVar, validateImageTag, generateSecretName ([#43](https://github.com/KenkoGeek/timonel/issues/43)) ([323c9ae](https://github.com/KenkoGeek/timonel/commit/323c9ae3243dead04dacc6daf4e98e8af1a8d98b))
|
|
6
|
+
|
|
1
7
|
## [2.5.1](https://github.com/KenkoGeek/timonel/compare/v2.5.0...v2.5.1) (2025-09-12)
|
|
2
8
|
|
|
3
9
|
### Bug Fixes
|
package/dist/lib/helm.d.ts
CHANGED
|
@@ -217,4 +217,82 @@ export declare function stringRef(path: string): string;
|
|
|
217
217
|
* @since 0.1.0
|
|
218
218
|
*/
|
|
219
219
|
export declare function floatRef(path: string): string;
|
|
220
|
+
/**
|
|
221
|
+
* Creates a conditional reference to a value in .Values
|
|
222
|
+
*
|
|
223
|
+
* Generates a Helm template expression that conditionally renders
|
|
224
|
+
* the value only if the condition is truthy.
|
|
225
|
+
*
|
|
226
|
+
* @param {string} path - Path to the value using dot notation
|
|
227
|
+
* @param {string} condition - Path to the condition value
|
|
228
|
+
* @returns {string} Helm template expression with conditional logic
|
|
229
|
+
* @throws {Error} If the path or condition is not valid for Helm templates
|
|
230
|
+
*
|
|
231
|
+
* @example
|
|
232
|
+
* ```typescript
|
|
233
|
+
* const secretName = conditionalRef('database.secretName', 'database.enabled');
|
|
234
|
+
* // Returns: '{{ if .Values.database.enabled }}{{ .Values.database.secretName }}{{ end }}'
|
|
235
|
+
* ```
|
|
236
|
+
*
|
|
237
|
+
* @since 2.6.0
|
|
238
|
+
*/
|
|
239
|
+
export declare function conditionalRef(path: string, condition: string): string;
|
|
240
|
+
/**
|
|
241
|
+
* Creates a reference to a value in .Values with a default fallback
|
|
242
|
+
*
|
|
243
|
+
* Generates a Helm template expression that uses the default filter
|
|
244
|
+
* to provide a fallback value when the path is not set.
|
|
245
|
+
*
|
|
246
|
+
* @param {string} path - Path to the value using dot notation
|
|
247
|
+
* @param {string} defaultValue - Default value to use if path is not set
|
|
248
|
+
* @returns {string} Helm template expression with default fallback
|
|
249
|
+
* @throws {Error} If the path is not valid for Helm templates
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* ```typescript
|
|
253
|
+
* const image = defaultRef('image.tag', 'latest');
|
|
254
|
+
* // Returns: '{{ .Values.image.tag | default "latest" }}'
|
|
255
|
+
* ```
|
|
256
|
+
*
|
|
257
|
+
* @since 2.6.0
|
|
258
|
+
*/
|
|
259
|
+
export declare function defaultRef(path: string, defaultValue: string): string;
|
|
260
|
+
/**
|
|
261
|
+
* Creates a base64-encoded reference to a value in .Values
|
|
262
|
+
*
|
|
263
|
+
* Generates a Helm template expression that encodes the value
|
|
264
|
+
* using base64 encoding, useful for secrets and certificates.
|
|
265
|
+
*
|
|
266
|
+
* @param {string} path - Path to the value using dot notation
|
|
267
|
+
* @returns {string} Helm template expression with base64 encoding
|
|
268
|
+
* @throws {Error} If the path is not valid for Helm templates
|
|
269
|
+
*
|
|
270
|
+
* @example
|
|
271
|
+
* ```typescript
|
|
272
|
+
* const encodedSecret = base64Ref('secrets.apiKey');
|
|
273
|
+
* // Returns: '{{ .Values.secrets.apiKey | b64enc }}'
|
|
274
|
+
* ```
|
|
275
|
+
*
|
|
276
|
+
* @since 2.6.0
|
|
277
|
+
*/
|
|
278
|
+
export declare function base64Ref(path: string): string;
|
|
279
|
+
/**
|
|
280
|
+
* Creates a JSON-serialized reference to a value in .Values
|
|
281
|
+
*
|
|
282
|
+
* Generates a Helm template expression that serializes the value
|
|
283
|
+
* to JSON format, useful for complex configuration objects.
|
|
284
|
+
*
|
|
285
|
+
* @param {string} path - Path to the value using dot notation
|
|
286
|
+
* @returns {string} Helm template expression with JSON serialization
|
|
287
|
+
* @throws {Error} If the path is not valid for Helm templates
|
|
288
|
+
*
|
|
289
|
+
* @example
|
|
290
|
+
* ```typescript
|
|
291
|
+
* const configJson = jsonRef('app.config');
|
|
292
|
+
* // Returns: '{{ .Values.app.config | toJson }}'
|
|
293
|
+
* ```
|
|
294
|
+
*
|
|
295
|
+
* @since 2.6.0
|
|
296
|
+
*/
|
|
297
|
+
export declare function jsonRef(path: string): string;
|
|
220
298
|
//# sourceMappingURL=helm.d.ts.map
|
package/dist/lib/helm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helm.d.ts","sourceRoot":"","sources":["../../src/lib/helm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAQxE;AAeD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,IAAI;IACf,wCAAwC;;IAExC,oCAAoC;;IAEpC,0CAA0C;;IAE1C,kDAAkD;;CAEnD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM1C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAM,GAAG,MAAM,CAE5D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7C"}
|
|
1
|
+
{"version":3,"file":"helm.d.ts","sourceRoot":"","sources":["../../src/lib/helm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAQxE;AAeD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,IAAI;IACf,wCAAwC;;IAExC,oCAAoC;;IAEpC,0CAA0C;;IAE1C,kDAAkD;;CAEnD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM1C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAM,GAAG,MAAM,CAE5D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQtE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAOrE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK5C"}
|
package/dist/lib/helm.js
CHANGED
|
@@ -279,4 +279,107 @@ export function floatRef(path) {
|
|
|
279
279
|
}
|
|
280
280
|
return `{{ .Values.${path} | float64 }}`;
|
|
281
281
|
}
|
|
282
|
+
/**
|
|
283
|
+
* Creates a conditional reference to a value in .Values
|
|
284
|
+
*
|
|
285
|
+
* Generates a Helm template expression that conditionally renders
|
|
286
|
+
* the value only if the condition is truthy.
|
|
287
|
+
*
|
|
288
|
+
* @param {string} path - Path to the value using dot notation
|
|
289
|
+
* @param {string} condition - Path to the condition value
|
|
290
|
+
* @returns {string} Helm template expression with conditional logic
|
|
291
|
+
* @throws {Error} If the path or condition is not valid for Helm templates
|
|
292
|
+
*
|
|
293
|
+
* @example
|
|
294
|
+
* ```typescript
|
|
295
|
+
* const secretName = conditionalRef('database.secretName', 'database.enabled');
|
|
296
|
+
* // Returns: '{{ if .Values.database.enabled }}{{ .Values.database.secretName }}{{ end }}'
|
|
297
|
+
* ```
|
|
298
|
+
*
|
|
299
|
+
* @since 2.6.0
|
|
300
|
+
*/
|
|
301
|
+
export function conditionalRef(path, condition) {
|
|
302
|
+
if (!isValidHelmPath(path)) {
|
|
303
|
+
throw new Error(`Invalid Helm template path: ${path}`);
|
|
304
|
+
}
|
|
305
|
+
if (!isValidHelmPath(condition)) {
|
|
306
|
+
throw new Error(`Invalid Helm template condition path: ${condition}`);
|
|
307
|
+
}
|
|
308
|
+
return `{{ if .Values.${condition} }}{{ .Values.${path} }}{{ end }}`;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Creates a reference to a value in .Values with a default fallback
|
|
312
|
+
*
|
|
313
|
+
* Generates a Helm template expression that uses the default filter
|
|
314
|
+
* to provide a fallback value when the path is not set.
|
|
315
|
+
*
|
|
316
|
+
* @param {string} path - Path to the value using dot notation
|
|
317
|
+
* @param {string} defaultValue - Default value to use if path is not set
|
|
318
|
+
* @returns {string} Helm template expression with default fallback
|
|
319
|
+
* @throws {Error} If the path is not valid for Helm templates
|
|
320
|
+
*
|
|
321
|
+
* @example
|
|
322
|
+
* ```typescript
|
|
323
|
+
* const image = defaultRef('image.tag', 'latest');
|
|
324
|
+
* // Returns: '{{ .Values.image.tag | default "latest" }}'
|
|
325
|
+
* ```
|
|
326
|
+
*
|
|
327
|
+
* @since 2.6.0
|
|
328
|
+
*/
|
|
329
|
+
export function defaultRef(path, defaultValue) {
|
|
330
|
+
if (!isValidHelmPath(path)) {
|
|
331
|
+
throw new Error(`Invalid Helm template path: ${path}`);
|
|
332
|
+
}
|
|
333
|
+
// Escape quotes and backslashes in defaultValue to prevent template injection
|
|
334
|
+
const escapedValue = defaultValue.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
335
|
+
return `{{ .Values.${path} | default "${escapedValue}" }}`;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Creates a base64-encoded reference to a value in .Values
|
|
339
|
+
*
|
|
340
|
+
* Generates a Helm template expression that encodes the value
|
|
341
|
+
* using base64 encoding, useful for secrets and certificates.
|
|
342
|
+
*
|
|
343
|
+
* @param {string} path - Path to the value using dot notation
|
|
344
|
+
* @returns {string} Helm template expression with base64 encoding
|
|
345
|
+
* @throws {Error} If the path is not valid for Helm templates
|
|
346
|
+
*
|
|
347
|
+
* @example
|
|
348
|
+
* ```typescript
|
|
349
|
+
* const encodedSecret = base64Ref('secrets.apiKey');
|
|
350
|
+
* // Returns: '{{ .Values.secrets.apiKey | b64enc }}'
|
|
351
|
+
* ```
|
|
352
|
+
*
|
|
353
|
+
* @since 2.6.0
|
|
354
|
+
*/
|
|
355
|
+
export function base64Ref(path) {
|
|
356
|
+
if (!isValidHelmPath(path)) {
|
|
357
|
+
throw new Error(`Invalid Helm template path: ${path}`);
|
|
358
|
+
}
|
|
359
|
+
return `{{ .Values.${path} | b64enc }}`;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Creates a JSON-serialized reference to a value in .Values
|
|
363
|
+
*
|
|
364
|
+
* Generates a Helm template expression that serializes the value
|
|
365
|
+
* to JSON format, useful for complex configuration objects.
|
|
366
|
+
*
|
|
367
|
+
* @param {string} path - Path to the value using dot notation
|
|
368
|
+
* @returns {string} Helm template expression with JSON serialization
|
|
369
|
+
* @throws {Error} If the path is not valid for Helm templates
|
|
370
|
+
*
|
|
371
|
+
* @example
|
|
372
|
+
* ```typescript
|
|
373
|
+
* const configJson = jsonRef('app.config');
|
|
374
|
+
* // Returns: '{{ .Values.app.config | toJson }}'
|
|
375
|
+
* ```
|
|
376
|
+
*
|
|
377
|
+
* @since 2.6.0
|
|
378
|
+
*/
|
|
379
|
+
export function jsonRef(path) {
|
|
380
|
+
if (!isValidHelmPath(path)) {
|
|
381
|
+
throw new Error(`Invalid Helm template path: ${path}`);
|
|
382
|
+
}
|
|
383
|
+
return `{{ .Values.${path} | toJson }}`;
|
|
384
|
+
}
|
|
282
385
|
//# sourceMappingURL=helm.js.map
|
package/dist/lib/helm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helm.js","sourceRoot":"","sources":["../../src/lib/helm.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helm.js","sourceRoot":"","sources":["../../src/lib/helm.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/security.d.ts
CHANGED
|
@@ -69,5 +69,68 @@ export declare class SecurityUtils {
|
|
|
69
69
|
* @since 2.2.0
|
|
70
70
|
*/
|
|
71
71
|
static isValidSubchartName(subchartName: string): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Sanitizes environment variable names and values for Kubernetes security
|
|
74
|
+
* Prevents injection attacks and ensures compliance with Kubernetes naming rules
|
|
75
|
+
* @param name - Environment variable name to sanitize
|
|
76
|
+
* @param value - Environment variable value to sanitize
|
|
77
|
+
* @returns Object with sanitized name and value
|
|
78
|
+
* @throws Error if name or value contains dangerous patterns
|
|
79
|
+
*
|
|
80
|
+
* @since 2.6.0
|
|
81
|
+
*/
|
|
82
|
+
static sanitizeEnvVar(name: string, value: string): {
|
|
83
|
+
name: string;
|
|
84
|
+
value: string;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Validates container image tags for security best practices
|
|
88
|
+
* Prevents use of dangerous tags and ensures proper versioning
|
|
89
|
+
* @param tag - Image tag to validate
|
|
90
|
+
* @returns True if tag is valid and secure
|
|
91
|
+
* @throws Error if tag violates security policies
|
|
92
|
+
*
|
|
93
|
+
* @since 2.6.0
|
|
94
|
+
*/
|
|
95
|
+
static validateImageTag(tag: string): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Generates secure names for Kubernetes secrets
|
|
98
|
+
* Ensures names follow RFC 1123 and are safe for Kubernetes
|
|
99
|
+
* @param baseName - Base name for the secret
|
|
100
|
+
* @param suffix - Optional suffix to append
|
|
101
|
+
* @returns Secure secret name
|
|
102
|
+
* @throws Error if generated name is invalid
|
|
103
|
+
*
|
|
104
|
+
* @since 2.6.0
|
|
105
|
+
*/
|
|
106
|
+
static generateSecretName(baseName: string, suffix?: string): string;
|
|
107
|
+
/**
|
|
108
|
+
* Sanitizes the base name for secret generation using safe string methods
|
|
109
|
+
* @param baseName - Base name to sanitize
|
|
110
|
+
* @returns Sanitized base name
|
|
111
|
+
* @throws Error if no valid characters remain
|
|
112
|
+
*
|
|
113
|
+
* @since 2.6.0
|
|
114
|
+
*/
|
|
115
|
+
private static sanitizeBaseName;
|
|
116
|
+
/**
|
|
117
|
+
* Appends suffix to sanitized base name using safe string methods
|
|
118
|
+
* @param baseName - Sanitized base name
|
|
119
|
+
* @param suffix - Suffix to append
|
|
120
|
+
* @returns Base name with suffix
|
|
121
|
+
* @throws Error if suffix is invalid
|
|
122
|
+
*
|
|
123
|
+
* @since 2.6.0
|
|
124
|
+
*/
|
|
125
|
+
private static appendSuffix;
|
|
126
|
+
/**
|
|
127
|
+
* Truncates name if it exceeds length limits
|
|
128
|
+
* @param name - Name to potentially truncate
|
|
129
|
+
* @param suffix - Original suffix for preservation
|
|
130
|
+
* @returns Truncated name if needed
|
|
131
|
+
*
|
|
132
|
+
* @since 2.6.0
|
|
133
|
+
*/
|
|
134
|
+
private static truncateIfNeeded;
|
|
72
135
|
}
|
|
73
136
|
//# sourceMappingURL=security.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;GAKG;AACH,qBAAa,aAAa;IACxB;;;;;;;;OAQG;IACH,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM;IA2BvE;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAgBlD;;;;;;;OAOG;IACH,MAAM,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAmBnD;;;;;;OAMG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAMvD;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAU7D;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAWnD;;;;;;OAMG;IACH,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;GAKG;AACH,qBAAa,aAAa;IACxB;;;;;;;;OAQG;IACH,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM;IA2BvE;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAgBlD;;;;;;;OAOG;IACH,MAAM,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAmBnD;;;;;;OAMG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAMvD;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAU7D;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAWnD;;;;;;OAMG;IACH,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAIzD;;;;;;;;;OASG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IA6DnF;;;;;;;;OAQG;IACH,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IA+C7C;;;;;;;;;OASG;IACH,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IA0BpE;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAsB/B;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IA0B3B;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;CA4BhC"}
|
package/dist/lib/security.js
CHANGED
|
@@ -134,5 +134,228 @@ export class SecurityUtils {
|
|
|
134
134
|
static isValidSubchartName(subchartName) {
|
|
135
135
|
return this.isValidChartName(subchartName);
|
|
136
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Sanitizes environment variable names and values for Kubernetes security
|
|
139
|
+
* Prevents injection attacks and ensures compliance with Kubernetes naming rules
|
|
140
|
+
* @param name - Environment variable name to sanitize
|
|
141
|
+
* @param value - Environment variable value to sanitize
|
|
142
|
+
* @returns Object with sanitized name and value
|
|
143
|
+
* @throws Error if name or value contains dangerous patterns
|
|
144
|
+
*
|
|
145
|
+
* @since 2.6.0
|
|
146
|
+
*/
|
|
147
|
+
static sanitizeEnvVar(name, value) {
|
|
148
|
+
if (!name || typeof name !== 'string') {
|
|
149
|
+
throw new Error('Environment variable name must be a non-empty string');
|
|
150
|
+
}
|
|
151
|
+
if (typeof value !== 'string') {
|
|
152
|
+
throw new Error('Environment variable value must be a string');
|
|
153
|
+
}
|
|
154
|
+
// Kubernetes env var name validation (RFC 1123 compatible)
|
|
155
|
+
let sanitizedName = name.toUpperCase().replace(/[^A-Z0-9_]/g, '_');
|
|
156
|
+
// Ensure name starts with letter or underscore
|
|
157
|
+
if (/^[0-9]/.test(sanitizedName)) {
|
|
158
|
+
sanitizedName = `_${sanitizedName}`;
|
|
159
|
+
}
|
|
160
|
+
const nameRegex = /^[A-Z_][A-Z0-9_]*$/;
|
|
161
|
+
if (!nameRegex.test(sanitizedName)) {
|
|
162
|
+
throw new Error(`Invalid environment variable name: ${this.sanitizeLogMessage(name)}`);
|
|
163
|
+
}
|
|
164
|
+
// Check for dangerous patterns in value using safer string methods
|
|
165
|
+
const hasDangerousPattern = (val) => {
|
|
166
|
+
if (val.includes('$(') && val.includes(')'))
|
|
167
|
+
return 'command substitution';
|
|
168
|
+
if (val.includes('`'))
|
|
169
|
+
return 'backtick execution';
|
|
170
|
+
if (val.includes('${') && val.includes('}'))
|
|
171
|
+
return 'variable expansion';
|
|
172
|
+
// Check for control characters
|
|
173
|
+
for (let i = 0; i < val.length; i++) {
|
|
174
|
+
const code = val.charCodeAt(i);
|
|
175
|
+
if ((code >= 0x00 && code <= 0x08) ||
|
|
176
|
+
code === 0x0b ||
|
|
177
|
+
code === 0x0c ||
|
|
178
|
+
(code >= 0x0e && code <= 0x1f) ||
|
|
179
|
+
code === 0x7f) {
|
|
180
|
+
return 'control characters';
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return null;
|
|
184
|
+
};
|
|
185
|
+
const dangerousPattern = hasDangerousPattern(value);
|
|
186
|
+
if (dangerousPattern) {
|
|
187
|
+
throw new Error(`Environment variable value contains dangerous pattern (${dangerousPattern}): ${this.sanitizeLogMessage(value)}`);
|
|
188
|
+
}
|
|
189
|
+
// Limit value length to prevent DoS
|
|
190
|
+
if (value.length > 32768) {
|
|
191
|
+
throw new Error('Environment variable value exceeds maximum length (32KB)');
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
name: sanitizedName,
|
|
195
|
+
value: value.trim(),
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Validates container image tags for security best practices
|
|
200
|
+
* Prevents use of dangerous tags and ensures proper versioning
|
|
201
|
+
* @param tag - Image tag to validate
|
|
202
|
+
* @returns True if tag is valid and secure
|
|
203
|
+
* @throws Error if tag violates security policies
|
|
204
|
+
*
|
|
205
|
+
* @since 2.6.0
|
|
206
|
+
*/
|
|
207
|
+
static validateImageTag(tag) {
|
|
208
|
+
if (!tag || typeof tag !== 'string') {
|
|
209
|
+
throw new Error('Image tag must be a non-empty string');
|
|
210
|
+
}
|
|
211
|
+
const trimmedTag = tag.trim();
|
|
212
|
+
// Reject dangerous or non-specific tags
|
|
213
|
+
const dangerousTags = ['latest', 'master', 'main', 'dev', 'development', 'test', 'staging'];
|
|
214
|
+
if (dangerousTags.includes(trimmedTag.toLowerCase())) {
|
|
215
|
+
throw new Error(`Insecure image tag detected: '${trimmedTag}'. Use specific version tags for security.`);
|
|
216
|
+
}
|
|
217
|
+
// Validate tag format (Docker tag rules)
|
|
218
|
+
const tagRegex = /^[a-zA-Z0-9._-]+$/;
|
|
219
|
+
if (!tagRegex.test(trimmedTag)) {
|
|
220
|
+
throw new Error(`Invalid image tag format: ${this.sanitizeLogMessage(trimmedTag)}`);
|
|
221
|
+
}
|
|
222
|
+
// Check length limits
|
|
223
|
+
if (trimmedTag.length > 128) {
|
|
224
|
+
throw new Error('Image tag exceeds maximum length (128 characters)');
|
|
225
|
+
}
|
|
226
|
+
// Prefer semantic versioning patterns
|
|
227
|
+
// eslint-disable-next-line security/detect-unsafe-regex -- Simple regex patterns are safe for validation
|
|
228
|
+
const semverPattern = /^v?\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?$/;
|
|
229
|
+
const hashPattern = /^[a-f0-9]{7,64}$/;
|
|
230
|
+
// eslint-disable-next-line security/detect-unsafe-regex -- Simple date pattern is safe for validation
|
|
231
|
+
const datePattern = /^\d{4}-\d{2}-\d{2}(-[a-zA-Z0-9.-]+)?$/;
|
|
232
|
+
if (!semverPattern.test(trimmedTag) &&
|
|
233
|
+
!hashPattern.test(trimmedTag) &&
|
|
234
|
+
!datePattern.test(trimmedTag)) {
|
|
235
|
+
// Warning for non-standard tags but don't fail
|
|
236
|
+
console.warn(`Warning: Image tag '${trimmedTag}' doesn't follow recommended patterns (semver, hash, or date)`);
|
|
237
|
+
}
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Generates secure names for Kubernetes secrets
|
|
242
|
+
* Ensures names follow RFC 1123 and are safe for Kubernetes
|
|
243
|
+
* @param baseName - Base name for the secret
|
|
244
|
+
* @param suffix - Optional suffix to append
|
|
245
|
+
* @returns Secure secret name
|
|
246
|
+
* @throws Error if generated name is invalid
|
|
247
|
+
*
|
|
248
|
+
* @since 2.6.0
|
|
249
|
+
*/
|
|
250
|
+
static generateSecretName(baseName, suffix) {
|
|
251
|
+
if (!baseName || typeof baseName !== 'string') {
|
|
252
|
+
throw new Error('Base name must be a non-empty string');
|
|
253
|
+
}
|
|
254
|
+
let sanitizedBase = this.sanitizeBaseName(baseName);
|
|
255
|
+
if (suffix) {
|
|
256
|
+
sanitizedBase = this.appendSuffix(sanitizedBase, suffix);
|
|
257
|
+
}
|
|
258
|
+
// Ensure name starts with letter (not number)
|
|
259
|
+
if (/^[0-9]/.test(sanitizedBase)) {
|
|
260
|
+
sanitizedBase = `s${sanitizedBase}`;
|
|
261
|
+
}
|
|
262
|
+
sanitizedBase = this.truncateIfNeeded(sanitizedBase, suffix);
|
|
263
|
+
// Final validation
|
|
264
|
+
if (!this.isValidChartName(sanitizedBase)) {
|
|
265
|
+
throw new Error(`Generated secret name is invalid: ${sanitizedBase}`);
|
|
266
|
+
}
|
|
267
|
+
return sanitizedBase;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Sanitizes the base name for secret generation using safe string methods
|
|
271
|
+
* @param baseName - Base name to sanitize
|
|
272
|
+
* @returns Sanitized base name
|
|
273
|
+
* @throws Error if no valid characters remain
|
|
274
|
+
*
|
|
275
|
+
* @since 2.6.0
|
|
276
|
+
*/
|
|
277
|
+
static sanitizeBaseName(baseName) {
|
|
278
|
+
// Use character-by-character processing instead of regex
|
|
279
|
+
let sanitized = '';
|
|
280
|
+
for (const char of baseName.toLowerCase()) {
|
|
281
|
+
if ((char >= 'a' && char <= 'z') || (char >= '0' && char <= '9') || char === '-') {
|
|
282
|
+
sanitized += char;
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
sanitized += '-';
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// Collapse multiple hyphens using split/filter/join
|
|
289
|
+
const parts = sanitized.split('-').filter((part) => part.length > 0);
|
|
290
|
+
sanitized = parts.join('-');
|
|
291
|
+
if (!sanitized) {
|
|
292
|
+
throw new Error('Base name contains no valid characters');
|
|
293
|
+
}
|
|
294
|
+
return sanitized;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Appends suffix to sanitized base name using safe string methods
|
|
298
|
+
* @param baseName - Sanitized base name
|
|
299
|
+
* @param suffix - Suffix to append
|
|
300
|
+
* @returns Base name with suffix
|
|
301
|
+
* @throws Error if suffix is invalid
|
|
302
|
+
*
|
|
303
|
+
* @since 2.6.0
|
|
304
|
+
*/
|
|
305
|
+
static appendSuffix(baseName, suffix) {
|
|
306
|
+
if (typeof suffix !== 'string') {
|
|
307
|
+
throw new Error('Suffix must be a string');
|
|
308
|
+
}
|
|
309
|
+
// Use character-by-character processing instead of regex
|
|
310
|
+
let sanitizedSuffix = '';
|
|
311
|
+
for (const char of suffix.toLowerCase()) {
|
|
312
|
+
if ((char >= 'a' && char <= 'z') || (char >= '0' && char <= '9') || char === '-') {
|
|
313
|
+
sanitizedSuffix += char;
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
sanitizedSuffix += '-';
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// Collapse multiple hyphens using split/filter/join
|
|
320
|
+
const parts = sanitizedSuffix.split('-').filter((part) => part.length > 0);
|
|
321
|
+
sanitizedSuffix = parts.join('-');
|
|
322
|
+
if (sanitizedSuffix) {
|
|
323
|
+
return `${baseName}-${sanitizedSuffix}`;
|
|
324
|
+
}
|
|
325
|
+
return baseName;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Truncates name if it exceeds length limits
|
|
329
|
+
* @param name - Name to potentially truncate
|
|
330
|
+
* @param suffix - Original suffix for preservation
|
|
331
|
+
* @returns Truncated name if needed
|
|
332
|
+
*
|
|
333
|
+
* @since 2.6.0
|
|
334
|
+
*/
|
|
335
|
+
static truncateIfNeeded(name, suffix) {
|
|
336
|
+
const maxLength = 63;
|
|
337
|
+
if (name.length <= maxLength) {
|
|
338
|
+
return name;
|
|
339
|
+
}
|
|
340
|
+
// Truncate but preserve suffix if possible
|
|
341
|
+
if (suffix) {
|
|
342
|
+
// Use safe character processing instead of regex
|
|
343
|
+
let safeSuffix = '';
|
|
344
|
+
for (const char of suffix.toLowerCase()) {
|
|
345
|
+
if ((char >= 'a' && char <= 'z') || (char >= '0' && char <= '9') || char === '-') {
|
|
346
|
+
safeSuffix += char;
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
safeSuffix += '-';
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
const suffixPart = `-${safeSuffix}`;
|
|
353
|
+
const maxBaseLength = maxLength - suffixPart.length;
|
|
354
|
+
if (maxBaseLength > 0) {
|
|
355
|
+
return name.substring(0, maxBaseLength) + suffixPart;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return name.substring(0, maxLength);
|
|
359
|
+
}
|
|
137
360
|
}
|
|
138
361
|
//# sourceMappingURL=security.js.map
|
package/dist/lib/security.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"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"}
|