pepr 0.46.1-nightly.0 → 0.46.1-nightly.2

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.
@@ -0,0 +1,31 @@
1
+ import { convertFromBase64Map, convertToBase64Map } from "../utils";
2
+ import { kind, KubernetesObject } from "kubernetes-fluent-client";
3
+ import { PeprMutateRequest } from "../mutate-request";
4
+ import { clone } from "ramda";
5
+
6
+ export function decodeData(wrapped: PeprMutateRequest<KubernetesObject>): {
7
+ skipped: string[];
8
+ wrapped: PeprMutateRequest<KubernetesObject>;
9
+ } {
10
+ let skipped: string[] = [];
11
+
12
+ const isSecret = wrapped.Request.kind.version === "v1" && wrapped.Request.kind.kind === "Secret";
13
+ if (isSecret) {
14
+ // convertFromBase64Map modifies it's arg rather than returing a mod'ed copy (ye olde side-effect special, blerg)
15
+ skipped = convertFromBase64Map(wrapped.Raw as unknown as kind.Secret);
16
+ }
17
+
18
+ return { skipped, wrapped };
19
+ }
20
+
21
+ export function reencodeData(wrapped: PeprMutateRequest<KubernetesObject>, skipped: string[]): KubernetesObject {
22
+ const transformed = clone(wrapped.Raw);
23
+
24
+ const isSecret = wrapped.Request.kind.version === "v1" && wrapped.Request.kind.kind === "Secret";
25
+ if (isSecret) {
26
+ // convertToBase64Map modifies it's arg rather than returing a mod'ed copy (ye olde side-effect special, blerg)
27
+ convertToBase64Map(transformed as unknown as kind.Secret, skipped);
28
+ }
29
+
30
+ return transformed;
31
+ }
@@ -2,8 +2,7 @@
2
2
  // SPDX-FileCopyrightText: 2023-Present The Pepr Authors
3
3
 
4
4
  import jsonPatch from "fast-json-patch";
5
- import { kind, KubernetesObject } from "kubernetes-fluent-client";
6
- import { clone } from "ramda";
5
+ import { KubernetesObject } from "kubernetes-fluent-client";
7
6
  import { MeasureWebhookTimeout } from "../telemetry/webhookTimeouts";
8
7
  import { Capability } from "../core/capability";
9
8
  import { shouldSkipRequest } from "../filter/filter";
@@ -12,11 +11,13 @@ import { AdmissionRequest, Binding } from "../types";
12
11
  import Log from "../telemetry/logger";
13
12
  import { ModuleConfig } from "../types";
14
13
  import { PeprMutateRequest } from "../mutate-request";
15
- import { base64Encode, convertFromBase64Map, convertToBase64Map } from "../utils";
14
+ import { base64Encode } from "../utils";
16
15
  import { OnError } from "../../cli/init/enums";
17
16
  import { resolveIgnoreNamespaces } from "../assets/webhooks";
18
17
  import { Operation } from "fast-json-patch";
19
18
  import { WebhookType } from "../enums";
19
+ import { decodeData, reencodeData } from "./decode-utils";
20
+
20
21
  export interface Bindable {
21
22
  req: AdmissionRequest;
22
23
  config: ModuleConfig;
@@ -60,33 +61,6 @@ export function logMutateErrorMessage(e: Error): string {
60
61
  }
61
62
  }
62
63
 
63
- export function decodeData(wrapped: PeprMutateRequest<KubernetesObject>): {
64
- skipped: string[];
65
- wrapped: PeprMutateRequest<KubernetesObject>;
66
- } {
67
- let skipped: string[] = [];
68
-
69
- const isSecret = wrapped.Request.kind.version === "v1" && wrapped.Request.kind.kind === "Secret";
70
- if (isSecret) {
71
- // convertFromBase64Map modifies it's arg rather than returing a mod'ed copy (ye olde side-effect special, blerg)
72
- skipped = convertFromBase64Map(wrapped.Raw as unknown as kind.Secret);
73
- }
74
-
75
- return { skipped, wrapped };
76
- }
77
-
78
- export function reencodeData(wrapped: PeprMutateRequest<KubernetesObject>, skipped: string[]): KubernetesObject {
79
- const transformed = clone(wrapped.Raw);
80
-
81
- const isSecret = wrapped.Request.kind.version === "v1" && wrapped.Request.kind.kind === "Secret";
82
- if (isSecret) {
83
- // convertToBase64Map modifies it's arg rather than returing a mod'ed copy (ye olde side-effect special, blerg)
84
- convertToBase64Map(transformed as unknown as kind.Secret, skipped);
85
- }
86
-
87
- return transformed;
88
- }
89
-
90
64
  export async function processRequest(
91
65
  bindable: Bindable,
92
66
  wrapped: PeprMutateRequest<KubernetesObject>,
@@ -186,6 +160,7 @@ export async function mutateProcessor(
186
160
  for (const bindable of bindables) {
187
161
  ({ wrapped, response } = await processRequest(bindable, wrapped, response));
188
162
  if (config.onError === OnError.REJECT && response?.warnings!.length > 0) {
163
+ webhookTimer.stop();
189
164
  return response;
190
165
  }
191
166
  }
@@ -196,11 +171,13 @@ export async function mutateProcessor(
196
171
  // If no capability matched the request, exit early
197
172
  if (bindables.length === 0) {
198
173
  Log.info(reqMetadata, `No matching actions found`);
174
+ webhookTimer.stop();
199
175
  return response;
200
176
  }
201
177
 
202
178
  // delete operations can't be mutate, just return before the transformation
203
179
  if (req.operation === "DELETE") {
180
+ webhookTimer.stop();
204
181
  return response;
205
182
  }
206
183