Skip to content

Commit af7a708

Browse files
committed
Fixed issue with Configuration Default Data not getting data exclusions applied.
1 parent 4b8f5c3 commit af7a708

File tree

5 files changed

+84
-10
lines changed

5 files changed

+84
-10
lines changed

example/express/app.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ await Exceptionless.startup((c) => {
2323
customValue: "Password",
2424
value: {
2525
Password: "123456",
26-
},
26+
}
2727
};
2828
});
2929

packages/core/src/Utils.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ export function isEmpty(input: Record<string, unknown> | null | undefined | unkn
175175
}
176176

177177
if (typeof input === "string") {
178-
return input.trim().length === 0 || input === "{}" || input === "[]";
178+
const trimmedInput = input.trim();
179+
return trimmedInput.length === 0 || trimmedInput === "{}" || trimmedInput === "[]";
179180
}
180181

181182
return false;

packages/core/src/plugins/default/ConfigurationDefaultsPlugin.ts

+12-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { isEmpty } from "../../Utils.js";
1+
import { isEmpty, stringify } from "../../Utils.js";
22
import { EventPluginContext } from "../EventPluginContext.js";
33
import { IEventPlugin } from "../IEventPlugin.js";
44

@@ -7,22 +7,26 @@ export class ConfigurationDefaultsPlugin implements IEventPlugin {
77
public name = "ConfigurationDefaultsPlugin";
88

99
public run(context: EventPluginContext): Promise<void> {
10-
const config = context.client.config;
10+
const { dataExclusions, defaultData, defaultTags } = context.client.config;
1111
const ev = context.event;
1212

13-
if (config.defaultTags) {
14-
ev.tags = [...ev.tags || [], ...config.defaultTags];
13+
if (defaultTags) {
14+
ev.tags = [...ev.tags || [], ...defaultTags];
1515
}
1616

17-
const defaultData: Record<string, unknown> = config.defaultData || {};
1817
if (defaultData) {
1918
if (!ev.data) {
2019
ev.data = {};
2120
}
2221

23-
for (const key in config.defaultData || {}) {
24-
if (ev.data[key] === undefined && !isEmpty(defaultData[key])) {
25-
ev.data[key] = defaultData[key];
22+
for (const key in defaultData) {
23+
if (ev.data[key] !== undefined || isEmpty(defaultData[key])) {
24+
continue;
25+
}
26+
27+
const data = stringify(defaultData[key], dataExclusions);
28+
if (!isEmpty(data)) {
29+
ev.data[key] = JSON.parse(data);
2630
}
2731
}
2832
}

packages/core/test/Utils.test.ts

+4
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,10 @@ describe("Utils", () => {
593593
JSON.stringify(expect(stringify(user, ["*password*"])).toBe(JSON.stringify({ "id": 1, "name": "Blake", "customValue": "Password", "value": {} })));
594594
});
595595

596+
test("*Password*", () => {
597+
JSON.stringify(expect(stringify(user, ["*Password*"])).toBe(JSON.stringify({ "id": 1, "name": "Blake", "customValue": "Password", "value": {} })));
598+
});
599+
596600
test("*Address", () => {
597601
const event = { type: "usage", source: "about" };
598602
expect(stringify(event, ["*Address"])).toBe(JSON.stringify(event));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import { describe, test } from "@jest/globals";
2+
import { expect } from "expect";
3+
4+
import { ExceptionlessClient } from "../../../src/ExceptionlessClient.js";
5+
import { Event } from "../../../src/models/Event.js";
6+
import { ConfigurationDefaultsPlugin } from "../../../src/plugins/default/ConfigurationDefaultsPlugin.js";
7+
import { EventPluginContext } from "../../../src/plugins/EventPluginContext.js";
8+
import { EventContext } from "../../../src/models/EventContext.js";
9+
10+
describe("ConfigurationDefaultsPlugin", () => {
11+
describe("should add default", () => {
12+
const userDataKey: string = "user";
13+
const user = {
14+
id: 1,
15+
name: "Blake",
16+
password: "123456",
17+
passwordResetToken: "a reset token",
18+
myPassword: "123456",
19+
myPasswordValue: "123456",
20+
customValue: "Password",
21+
value: {
22+
Password: "123456"
23+
}
24+
};
25+
26+
const defaultTags: string[] = ["tag1", "tag2"];
27+
28+
const run = async (dataExclusions?: string[] | undefined): Promise<Event> => {
29+
const client = new ExceptionlessClient();
30+
client.config.defaultTags.push(...defaultTags);
31+
client.config.defaultData[userDataKey] = user;
32+
33+
if (dataExclusions) {
34+
client.config.addDataExclusions(...dataExclusions);
35+
}
36+
37+
const ev: Event = <Event>{ type: "log", source: "test", data: {} };
38+
39+
const context = new EventPluginContext(client, ev, new EventContext());
40+
const plugin = new ConfigurationDefaultsPlugin();
41+
await plugin.run(context);
42+
43+
return context.event;
44+
}
45+
46+
test("tags", async () => {
47+
const ev = await run();
48+
expect(ev.tags).toStrictEqual(defaultTags)
49+
});
50+
51+
test("user", async () => {
52+
const ev = await run();
53+
expect(ev.data).toBeDefined();
54+
expect(ev.data && ev.data[userDataKey]).toStrictEqual(user);
55+
});
56+
57+
test("pruned user", async () => {
58+
const ev = await run(["*password*"]);
59+
expect(ev.data).toBeDefined();
60+
61+
const expected = { "id": 1, "name": "Blake", "customValue": "Password", "value": {} };
62+
expect(ev.data && ev.data[userDataKey]).toStrictEqual(expected);
63+
});
64+
});
65+
});

0 commit comments

Comments
 (0)