Skip to content

Commit 78fbb13

Browse files
authored
Merge pull request #15 from Vizir/fix/filter-axios-error
filter sensitive values in axios error
2 parents 7313fca + ba10049 commit 78fbb13

File tree

3 files changed

+49
-6
lines changed

3 files changed

+49
-6
lines changed

src/logger-filter.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,28 @@ export class LoggerFilter {
4747
return result;
4848
}
4949

50+
private isLossLessNumber(value: any): boolean {
51+
if (value instanceof LosslessNumber) {
52+
return true;
53+
}
54+
55+
if (value?.constructor === Object && value.type === "LosslessNumber") {
56+
return true;
57+
}
58+
59+
return false;
60+
}
61+
5062
private filterItem(key: string, item: any): any {
5163
if (this.isOnBlacklist(key) && !this.isOnWhitelist(key)) {
5264
return this.placeholder;
5365
}
5466

5567
if (item instanceof Error) {
56-
return this.filterError(item);
68+
return this.filterObject(this.filterError(item));
5769
}
5870

59-
if (item instanceof LosslessNumber) {
71+
if (this.isLossLessNumber(item)) {
6072
return item.value;
6173
}
6274

test/fixtures/axios-error.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
"Accept": "application/json, text/plain, */*",
88
"Content-Type": "application/json;charset=utf-8",
99
"countryId": 1,
10-
"User-Agent": "axios/0.19.2"
10+
"User-Agent": "axios/0.19.2",
11+
"x-api-key": "b6732a5f-a233-49b1-8b23-ef92d8e638ab"
1112
},
1213
"baseURL": "https://domain.com",
1314
"transformRequest": [],

test/logger-filter.spec.ts

+33-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { DEFAULT_BLACK_LIST } from "../src/default-black-list";
22
import { LoggerFilter } from "../src/logger-filter";
33
import faker from "faker";
4+
import { parse } from "lossless-json";
45

56
const DEFAULT_PLACE_HOLDER = "*sensitive*";
67

@@ -155,6 +156,25 @@ describe("LoggerFilter", () => {
155156
expect(parsed).toStrictEqual(expectedResult);
156157
});
157158

159+
it("Should return the original data when losslessNumber is converted to pure object", () => {
160+
// Given
161+
const key = faker.random.word();
162+
const value = faker.datatype.number().toString();
163+
const losslessNumberInstance = parse(value);
164+
const losslessNumberPureObject = JSON.parse(
165+
JSON.stringify(losslessNumberInstance)
166+
);
167+
const item = { [key]: losslessNumberPureObject };
168+
const expectedResult = { [key]: value };
169+
const filter = new LoggerFilter();
170+
171+
// When
172+
const parsed = filter.process(item);
173+
174+
// Then
175+
expect(parsed).toStrictEqual(expectedResult);
176+
});
177+
158178
it("Should replace into a nested object inside an array", () => {
159179
// Given
160180
const key = faker.random.word();
@@ -238,19 +258,29 @@ describe("LoggerFilter", () => {
238258
expect(parsed.error.name).toBe(expectedResult.error.name);
239259
});
240260

241-
it("Should serialize an axios error removing not need attributes", () => {
261+
it("Should serialize an axios error removing useless attributes and replacing sensitive content", () => {
242262
// Given
243263
// eslint-disable-next-line @typescript-eslint/no-var-requires
244264
const error = require("./fixtures/axios-error.json");
245265
error.__proto__ = Error.prototype;
246266
const item = { error };
247267
const expectedError = {
248268
error: {
249-
config: error.config,
269+
config: {
270+
...error.config,
271+
data: {},
272+
maxContentLength: error.config.maxContentLength.toString(),
273+
timeout: error.config.timeout.toString(),
274+
headers: {
275+
...error.config.headers,
276+
"x-api-key": DEFAULT_PLACE_HOLDER,
277+
countryId: error.config.headers.countryId.toString(),
278+
},
279+
},
250280
message: error.message,
251281
name: error.name,
252282
response: {
253-
status: error.response.status,
283+
status: error.response.status.toString(),
254284
statusText: error.response.statusText,
255285
headers: error.response.headers,
256286
data: error.response.data,

0 commit comments

Comments
 (0)