pepr 0.6.0 → 0.7.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/dist/cli.js +138 -85
- package/dist/controller.js +1 -1
- package/dist/lib/capability.d.ts.map +1 -1
- package/dist/lib/controller.d.ts.map +1 -1
- package/dist/lib/filter.d.ts.map +1 -1
- package/dist/lib/k8s/kinds.d.ts.map +1 -1
- package/dist/lib/k8s/types.d.ts +2 -0
- package/dist/lib/k8s/types.d.ts.map +1 -1
- package/dist/lib/k8s/webhook.d.ts +5 -4
- package/dist/lib/k8s/webhook.d.ts.map +1 -1
- package/dist/lib/module.d.ts.map +1 -1
- package/dist/lib/processor.d.ts +1 -1
- package/dist/lib/processor.d.ts.map +1 -1
- package/dist/lib/request.d.ts +0 -6
- package/dist/lib/request.d.ts.map +1 -1
- package/dist/lib/types.d.ts +3 -2
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/utils.d.ts +23 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib.d.ts +2 -1
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +77 -32
- package/dist/lib.js.map +4 -4
- package/package.json +2 -2
- package/src/lib/capability.ts +1 -0
- package/src/lib/controller.ts +21 -16
- package/src/lib/filter.ts +2 -2
- package/src/lib/k8s/kinds.ts +2 -0
- package/src/lib/k8s/types.ts +2 -0
- package/src/lib/k8s/webhook.ts +120 -26
- package/src/lib/module.ts +7 -1
- package/src/lib/processor.ts +40 -14
- package/src/lib/request.ts +0 -20
- package/src/lib/types.ts +2 -1
- package/src/lib/utils.ts +55 -0
- package/src/lib.ts +2 -0
package/dist/lib/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAOvC,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,qHAAqH;IACrH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEpC,6GAA6G;IAC7G,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;CACrC,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAOvC,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,qHAAqH;IACrH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEpC,6GAA6G;IAC7G,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;CACrC,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAc;IAEjC;;;;;;OAMG;gBACS,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,YAAY,GAAE,UAAU,EAAO,EAAE,IAAI,GAAE,iBAAsB;IAoB7G;;;;;OAKG;IACH,KAAK,CAAC,IAAI,SAAO;CAGlB"}
|
package/dist/lib/processor.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Capability } from "./capability";
|
|
2
2
|
import { Request, Response } from "./k8s/types";
|
|
3
3
|
import { ModuleConfig } from "./types";
|
|
4
|
-
export declare function processor(config: ModuleConfig, capabilities: Capability[], req: Request): Promise<Response>;
|
|
4
|
+
export declare function processor(config: ModuleConfig, capabilities: Capability[], req: Request, parentPrefix: string): Promise<Response>;
|
|
5
5
|
//# sourceMappingURL=processor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/lib/processor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIhD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/lib/processor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIhD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,wBAAsB,SAAS,CAC7B,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,QAAQ,CAAC,CAiHnB"}
|
package/dist/lib/request.d.ts
CHANGED
|
@@ -75,10 +75,4 @@ export declare class PeprRequest<T extends KubernetesObject> {
|
|
|
75
75
|
*/
|
|
76
76
|
HasAnnotation(key: string): boolean;
|
|
77
77
|
}
|
|
78
|
-
export declare function convertToBase64Map(obj: {
|
|
79
|
-
data?: Record<string, string>;
|
|
80
|
-
}): void;
|
|
81
|
-
export declare function convertFromBase64Map(obj: {
|
|
82
|
-
data?: Record<string, string>;
|
|
83
|
-
}): void;
|
|
84
78
|
//# sourceMappingURL=request.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/lib/request.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/lib/request.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC;;;GAGG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,gBAAgB;IAmCrC,OAAO,CAAC,MAAM;IAlCnB,GAAG,EAAE,CAAC,CAAC;IAEd,IAAI,iBAAiB,YAEpB;IAED;;;OAGG;IACH,IAAI,QAAQ,wBAEX;IAED;;;OAGG;IACH,IAAI,WAAW,kBAEd;IAED;;;OAGG;IACH,IAAI,OAAO,eAEV;IAED;;;OAGG;gBACiB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAKtC;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAIzB;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAUnC;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAUxC;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM;IAOvB;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM;IAO5B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM;CAG1B"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -34,7 +34,8 @@ export declare enum Event {
|
|
|
34
34
|
Create = "CREATE",
|
|
35
35
|
Update = "UPDATE",
|
|
36
36
|
Delete = "DELETE",
|
|
37
|
-
CreateOrUpdate = "CREATEORUPDATE"
|
|
37
|
+
CreateOrUpdate = "CREATEORUPDATE",
|
|
38
|
+
Any = "*"
|
|
38
39
|
}
|
|
39
40
|
export interface CapabilityCfg {
|
|
40
41
|
/**
|
|
@@ -106,7 +107,7 @@ export type WhenSelector<T extends GenericClass> = {
|
|
|
106
107
|
IsDeleted: () => BindingAll<T>;
|
|
107
108
|
};
|
|
108
109
|
export type Binding = {
|
|
109
|
-
event
|
|
110
|
+
event: Event;
|
|
110
111
|
readonly kind: GroupVersionKind;
|
|
111
112
|
readonly filters: {
|
|
112
113
|
name: string;
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAED;;;;GAIG;AACH,oBAAY,SAAS;IACnB,MAAM,WAAW;IACjB,QAAQ,aAAa;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAChE,CAAC;AAEF;;GAEG;AAEH,oBAAY,KAAK;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,cAAc,mBAAmB;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Test if a string is ascii or not */
|
|
2
|
+
export declare const isAscii: RegExp;
|
|
3
|
+
/**
|
|
4
|
+
* Encode all ascii values in a map to base64
|
|
5
|
+
* @param obj The object to encode
|
|
6
|
+
* @param skip A list of keys to skip encoding
|
|
7
|
+
*/
|
|
8
|
+
export declare function convertToBase64Map(obj: {
|
|
9
|
+
data?: Record<string, string>;
|
|
10
|
+
}, skip: string[]): void;
|
|
11
|
+
/**
|
|
12
|
+
* Decode all ascii values in a map from base64 to utf-8
|
|
13
|
+
* @param obj The object to decode
|
|
14
|
+
* @returns A list of keys that were skipped
|
|
15
|
+
*/
|
|
16
|
+
export declare function convertFromBase64Map(obj: {
|
|
17
|
+
data?: Record<string, string>;
|
|
18
|
+
}): string[];
|
|
19
|
+
/** Decode a base64 string */
|
|
20
|
+
export declare function base64Decode(data: string): string;
|
|
21
|
+
/** Encode a string to base64 */
|
|
22
|
+
export declare function base64Encode(data: string): string;
|
|
23
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAKA,uCAAuC;AACvC,eAAO,MAAM,OAAO,QAAqB,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAOxF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,YAiB1E;AAED,6BAA6B;AAC7B,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,UAExC;AAED,gCAAgC;AAChC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,UAExC"}
|
package/dist/lib.d.ts
CHANGED
|
@@ -7,9 +7,10 @@ import { RegisterKind, a } from "./lib/k8s/index";
|
|
|
7
7
|
import Log from "./lib/logger";
|
|
8
8
|
import { PeprModule } from "./lib/module";
|
|
9
9
|
import { PeprRequest } from "./lib/request";
|
|
10
|
+
import * as PeprUtils from "./lib/utils";
|
|
10
11
|
import type * as KubernetesClientNode from "@kubernetes/client-node";
|
|
11
12
|
import type * as RamdaUtils from "ramda";
|
|
12
13
|
export { a,
|
|
13
14
|
/** PeprModule is used to setup a complete Pepr Module: `new PeprModule(cfg, {...capabilities})` */
|
|
14
|
-
PeprModule, PeprRequest, RegisterKind, Capability, Log, utils, fetch, fetchRaw, fetchStatus, k8s, RamdaUtils, KubernetesClientNode, };
|
|
15
|
+
PeprModule, PeprRequest, PeprUtils, RegisterKind, Capability, Log, utils, fetch, fetchRaw, fetchStatus, k8s, RamdaUtils, KubernetesClientNode, };
|
|
15
16
|
//# sourceMappingURL=lib.d.ts.map
|
package/dist/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,yBAAyB,CAAC;AAC1C,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,yBAAyB,CAAC;AAC1C,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,OAAO,KAAK,KAAK,oBAAoB,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,KAAK,UAAU,MAAM,OAAO,CAAC;AAEzC,OAAO,EACL,CAAC;AACD,mGAAmG;AACnG,UAAU,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,GAAG,EACH,KAAK,EACL,KAAK,EACL,QAAQ,EACR,WAAW,EACX,GAAG,EAGH,UAAU,EACV,oBAAoB,GACrB,CAAC"}
|
package/dist/lib.js
CHANGED
|
@@ -34,6 +34,7 @@ __export(lib_exports, {
|
|
|
34
34
|
Log: () => logger_default,
|
|
35
35
|
PeprModule: () => PeprModule,
|
|
36
36
|
PeprRequest: () => PeprRequest,
|
|
37
|
+
PeprUtils: () => utils_exports,
|
|
37
38
|
RegisterKind: () => RegisterKind,
|
|
38
39
|
a: () => upstream_exports,
|
|
39
40
|
fetch: () => fetch,
|
|
@@ -122,7 +123,8 @@ var gvkMap = {
|
|
|
122
123
|
V1Endpoint: {
|
|
123
124
|
kind: "Endpoints",
|
|
124
125
|
version: "v1",
|
|
125
|
-
group: ""
|
|
126
|
+
group: "",
|
|
127
|
+
plural: "endpoints"
|
|
126
128
|
},
|
|
127
129
|
/**
|
|
128
130
|
* Represents a K8s LimitRange resource.
|
|
@@ -452,7 +454,8 @@ var gvkMap = {
|
|
|
452
454
|
V1Ingress: {
|
|
453
455
|
kind: "Ingress",
|
|
454
456
|
version: "v1",
|
|
455
|
-
group: "networking.k8s.io"
|
|
457
|
+
group: "networking.k8s.io",
|
|
458
|
+
plural: "ingresses"
|
|
456
459
|
},
|
|
457
460
|
/**
|
|
458
461
|
* Represents a K8s NetworkPolicy resource.
|
|
@@ -669,6 +672,7 @@ var Capability = class {
|
|
|
669
672
|
const binding = {
|
|
670
673
|
// If the kind is not specified, use the matched kind from the model
|
|
671
674
|
kind: kind || matchedKind,
|
|
675
|
+
event: "*" /* Any */,
|
|
672
676
|
filters: {
|
|
673
677
|
name: "",
|
|
674
678
|
namespaces: [],
|
|
@@ -791,7 +795,7 @@ function shouldSkipRequest(binding, req) {
|
|
|
791
795
|
const { group, kind, version } = binding.kind || {};
|
|
792
796
|
const { namespaces, labels, annotations, name } = binding.filters || {};
|
|
793
797
|
const { metadata } = req.object || {};
|
|
794
|
-
if (binding.event && !binding.event.includes(
|
|
798
|
+
if (!binding.event.includes(req.operation) && !binding.event.includes("*" /* Any */)) {
|
|
795
799
|
return true;
|
|
796
800
|
}
|
|
797
801
|
if (name && name !== req.name) {
|
|
@@ -845,9 +849,6 @@ var PeprRequest = class {
|
|
|
845
849
|
constructor(_input) {
|
|
846
850
|
this._input = _input;
|
|
847
851
|
this.Raw = (0, import_ramda.clone)(_input.object);
|
|
848
|
-
if (_input.kind.version == "v1" && _input.kind.kind == "Secret") {
|
|
849
|
-
convertFromBase64Map(this.Raw);
|
|
850
|
-
}
|
|
851
852
|
}
|
|
852
853
|
Raw;
|
|
853
854
|
get PermitSideEffects() {
|
|
@@ -949,36 +950,69 @@ var PeprRequest = class {
|
|
|
949
950
|
return this.Raw?.metadata?.annotations?.[key] !== void 0;
|
|
950
951
|
}
|
|
951
952
|
};
|
|
952
|
-
|
|
953
|
+
|
|
954
|
+
// src/lib/utils.ts
|
|
955
|
+
var utils_exports = {};
|
|
956
|
+
__export(utils_exports, {
|
|
957
|
+
base64Decode: () => base64Decode,
|
|
958
|
+
base64Encode: () => base64Encode,
|
|
959
|
+
convertFromBase64Map: () => convertFromBase64Map,
|
|
960
|
+
convertToBase64Map: () => convertToBase64Map,
|
|
961
|
+
isAscii: () => isAscii
|
|
962
|
+
});
|
|
963
|
+
var isAscii = /^[\s\x20-\x7E]*$/;
|
|
964
|
+
function convertToBase64Map(obj, skip) {
|
|
953
965
|
obj.data = obj.data ?? {};
|
|
954
966
|
for (const key in obj.data) {
|
|
955
|
-
|
|
967
|
+
const value = obj.data[key];
|
|
968
|
+
obj.data[key] = skip.includes(key) ? value : base64Encode(value);
|
|
956
969
|
}
|
|
957
970
|
}
|
|
958
971
|
function convertFromBase64Map(obj) {
|
|
972
|
+
const skip = [];
|
|
959
973
|
obj.data = obj.data ?? {};
|
|
960
974
|
for (const key in obj.data) {
|
|
961
|
-
|
|
975
|
+
const decoded = base64Decode(obj.data[key]);
|
|
976
|
+
if (isAscii.test(decoded)) {
|
|
977
|
+
obj.data[key] = decoded;
|
|
978
|
+
} else {
|
|
979
|
+
skip.push(key);
|
|
980
|
+
}
|
|
962
981
|
}
|
|
982
|
+
logger_default.debug(`Non-ascii data detected in keys: ${skip}, skipping automatic base64 decoding`);
|
|
983
|
+
return skip;
|
|
984
|
+
}
|
|
985
|
+
function base64Decode(data) {
|
|
986
|
+
return Buffer.from(data, "base64").toString("utf-8");
|
|
987
|
+
}
|
|
988
|
+
function base64Encode(data) {
|
|
989
|
+
return Buffer.from(data).toString("base64");
|
|
963
990
|
}
|
|
964
991
|
|
|
965
992
|
// src/lib/processor.ts
|
|
966
|
-
async function processor(config, capabilities, req) {
|
|
993
|
+
async function processor(config, capabilities, req, parentPrefix) {
|
|
967
994
|
const wrapped = new PeprRequest(req);
|
|
968
995
|
const response = {
|
|
969
996
|
uid: req.uid,
|
|
970
997
|
warnings: [],
|
|
971
998
|
allowed: false
|
|
972
999
|
};
|
|
973
|
-
|
|
1000
|
+
let matchedCapabilityAction = false;
|
|
1001
|
+
let skipDecode = [];
|
|
1002
|
+
const isSecret = req.kind.version == "v1" && req.kind.kind == "Secret";
|
|
1003
|
+
if (isSecret) {
|
|
1004
|
+
skipDecode = convertFromBase64Map(wrapped.Raw);
|
|
1005
|
+
}
|
|
1006
|
+
logger_default.info(`Processing request`, parentPrefix);
|
|
974
1007
|
for (const { name, bindings } of capabilities) {
|
|
975
|
-
const prefix = `${
|
|
976
|
-
logger_default.info(`Processing capability ${name}`, prefix);
|
|
1008
|
+
const prefix = `${parentPrefix} ${name}:`;
|
|
977
1009
|
for (const action of bindings) {
|
|
978
1010
|
if (shouldSkipRequest(action, req)) {
|
|
979
1011
|
continue;
|
|
980
1012
|
}
|
|
981
|
-
|
|
1013
|
+
const label = action.callback.name;
|
|
1014
|
+
logger_default.info(`Processing matched action ${label}`, prefix);
|
|
1015
|
+
matchedCapabilityAction = true;
|
|
982
1016
|
const updateStatus = (status) => {
|
|
983
1017
|
if (req.operation == "DELETE") {
|
|
984
1018
|
return;
|
|
@@ -1008,9 +1042,13 @@ async function processor(config, capabilities, req) {
|
|
|
1008
1042
|
}
|
|
1009
1043
|
}
|
|
1010
1044
|
response.allowed = true;
|
|
1045
|
+
if (!matchedCapabilityAction) {
|
|
1046
|
+
logger_default.info(`No matching capability action found`, parentPrefix);
|
|
1047
|
+
return response;
|
|
1048
|
+
}
|
|
1011
1049
|
const transformed = wrapped.Raw;
|
|
1012
|
-
if (
|
|
1013
|
-
convertToBase64Map(transformed);
|
|
1050
|
+
if (isSecret) {
|
|
1051
|
+
convertToBase64Map(transformed, skipDecode);
|
|
1014
1052
|
}
|
|
1015
1053
|
const patches = import_fast_json_patch.default.compare(req.object, transformed);
|
|
1016
1054
|
if (patches.length > 0) {
|
|
@@ -1020,15 +1058,11 @@ async function processor(config, capabilities, req) {
|
|
|
1020
1058
|
if (response.warnings && response.warnings.length < 1) {
|
|
1021
1059
|
delete response.warnings;
|
|
1022
1060
|
}
|
|
1023
|
-
logger_default.debug(patches);
|
|
1061
|
+
logger_default.debug(patches, parentPrefix);
|
|
1024
1062
|
return response;
|
|
1025
1063
|
}
|
|
1026
1064
|
|
|
1027
1065
|
// src/lib/controller.ts
|
|
1028
|
-
var options = {
|
|
1029
|
-
key: import_fs.default.readFileSync(process.env.SSL_KEY_PATH || "/etc/certs/tls.key"),
|
|
1030
|
-
cert: import_fs.default.readFileSync(process.env.SSL_CERT_PATH || "/etc/certs/tls.crt")
|
|
1031
|
-
};
|
|
1032
1066
|
var Controller = class {
|
|
1033
1067
|
constructor(config, capabilities, beforeHook, afterHook) {
|
|
1034
1068
|
this.config = config;
|
|
@@ -1053,6 +1087,10 @@ var Controller = class {
|
|
|
1053
1087
|
if (this.running) {
|
|
1054
1088
|
throw new Error("Cannot start Pepr module: Pepr module was not instantiated with deferStart=true");
|
|
1055
1089
|
}
|
|
1090
|
+
const options = {
|
|
1091
|
+
key: import_fs.default.readFileSync(process.env.SSL_KEY_PATH || "/etc/certs/tls.key"),
|
|
1092
|
+
cert: import_fs.default.readFileSync(process.env.SSL_CERT_PATH || "/etc/certs/tls.crt")
|
|
1093
|
+
};
|
|
1056
1094
|
const server = import_https.default.createServer(options, this.app).listen(port);
|
|
1057
1095
|
server.on("listening", () => {
|
|
1058
1096
|
console.log(`Server listening on port ${port}`);
|
|
@@ -1060,7 +1098,9 @@ var Controller = class {
|
|
|
1060
1098
|
});
|
|
1061
1099
|
server.on("error", (e) => {
|
|
1062
1100
|
if (e.code === "EADDRINUSE") {
|
|
1063
|
-
console.log(
|
|
1101
|
+
console.log(
|
|
1102
|
+
`Address in use, retrying in 2 seconds. If this persists, ensure ${port} is not in use, e.g. "lsof -i :${port}"`
|
|
1103
|
+
);
|
|
1064
1104
|
setTimeout(() => {
|
|
1065
1105
|
server.close();
|
|
1066
1106
|
server.listen(port);
|
|
@@ -1080,7 +1120,7 @@ var Controller = class {
|
|
|
1080
1120
|
res.on("finish", () => {
|
|
1081
1121
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
1082
1122
|
const elapsedTime = Date.now() - startTime;
|
|
1083
|
-
const message = `[${now}] ${req.method} ${req.originalUrl}
|
|
1123
|
+
const message = `[${now}] ${req.method} ${req.originalUrl} [${res.statusCode}] ${elapsedTime} ms
|
|
1084
1124
|
`;
|
|
1085
1125
|
res.statusCode >= 400 ? console.error(message) : console.info(message);
|
|
1086
1126
|
});
|
|
@@ -1096,16 +1136,16 @@ var Controller = class {
|
|
|
1096
1136
|
};
|
|
1097
1137
|
mutate = async (req, res) => {
|
|
1098
1138
|
try {
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
const
|
|
1102
|
-
const
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
`);
|
|
1106
|
-
const response = await processor(this.config, this.capabilities,
|
|
1139
|
+
const request = req.body?.request || {};
|
|
1140
|
+
this.beforeHook && this.beforeHook(request || {});
|
|
1141
|
+
const name = request?.name ? `/${request.name}` : "";
|
|
1142
|
+
const namespace = request?.namespace || "";
|
|
1143
|
+
const gvk = request?.kind || { group: "", version: "", kind: "" };
|
|
1144
|
+
const prefix = `${request.uid} ${namespace}${name}`;
|
|
1145
|
+
logger_default.info(`Mutate request: ${gvk.group}/${gvk.version}/${gvk.kind}`, prefix);
|
|
1146
|
+
const response = await processor(this.config, this.capabilities, request, prefix);
|
|
1107
1147
|
this.afterHook && this.afterHook(response);
|
|
1108
|
-
|
|
1148
|
+
logger_default.debug(response, prefix);
|
|
1109
1149
|
res.send({
|
|
1110
1150
|
apiVersion: "admission.k8s.io/v1",
|
|
1111
1151
|
kind: "AdmissionReview",
|
|
@@ -1135,6 +1175,10 @@ var PeprModule = class {
|
|
|
1135
1175
|
constructor({ description, pepr }, capabilities = [], opts = {}) {
|
|
1136
1176
|
const config = (0, import_ramda2.mergeDeepWith)(import_ramda2.concat, pepr, alwaysIgnore);
|
|
1137
1177
|
config.description = description;
|
|
1178
|
+
if (process.env.PEPR_MODE === "build") {
|
|
1179
|
+
process.send?.({ capabilities });
|
|
1180
|
+
return;
|
|
1181
|
+
}
|
|
1138
1182
|
this._controller = new Controller(config, capabilities, opts.beforeHook, opts.afterHook);
|
|
1139
1183
|
if (opts.deferStart) {
|
|
1140
1184
|
return;
|
|
@@ -1157,6 +1201,7 @@ var PeprModule = class {
|
|
|
1157
1201
|
Log,
|
|
1158
1202
|
PeprModule,
|
|
1159
1203
|
PeprRequest,
|
|
1204
|
+
PeprUtils,
|
|
1160
1205
|
RegisterKind,
|
|
1161
1206
|
a,
|
|
1162
1207
|
fetch,
|