Skip to content
Permalink
Browse files Browse the repository at this point in the history
fix: remove sensitive info SQCORE-1246 (#241)
  • Loading branch information
sb88k committed Feb 3, 2022
1 parent 6893369 commit 02e90aa
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 9 deletions.
32 changes: 23 additions & 9 deletions Source/Public/ZMTransportRequest.swift
Expand Up @@ -35,17 +35,31 @@ extension String {

var removingSensitiveInfo: String {
let result = NSMutableString(string: self)
let range = NSMakeRange(0, self.count)
let range = NSMakeRange(0, utf16.count)

String.matchers
.flatMap {
$0.matches(in: self, options: [], range: range)
}
.reversed()
.forEach {
let matchedString = result.substring(with: $0.range)
result.replaceCharacters(in: $0.range, with: matchedString.readableHash)
}
.flatMap { $0.matches(in: self, options: [], range: range) }
.sorted { $0.range.lowerBound < $1.range.lowerBound }
.map { $0.range }
.reduce(into: [NSRange]()) { result, range in
guard let last = result.popLast() else {
result.append(range)
return
}

if NSIntersectionRange(last, range).length > 0 {
let mergedRange = NSUnionRange(last, range)
result.append(mergedRange)
} else {
result.append(last)
result.append(range)
}
}
.reversed()
.forEach {
let substring = result.substring(with: $0)
result.replaceCharacters(in: $0, with: substring.readableHash)
}

return result as String
}
Expand Down
74 changes: 74 additions & 0 deletions Tests/Source/Requests/ZMTransportRequestTests.m
Expand Up @@ -1030,4 +1030,78 @@ - (void)testPrivateDescriptionWithUUID
XCTAssertTrue([privateDescription rangeOfString:clientID].location == NSNotFound);
}

- (void)testPrivateDescriptionWithEmoji
{
// given
NSString *clientID = @"608b4f25ba2b193";
NSString *uuid = @"9e86b08a-8de7-11e9-810f-22000a62954d";
NSString *path = [NSString stringWithFormat:@"with/%@/🤨/%@/emoji", clientID, uuid];
ZMTransportRequest *request = [ZMTransportRequest requestWithPath:path method:ZMMethodHEAD payload:nil];

// when
NSString *privateDescription = [request safeForLoggingDescription];

// then
XCTAssertTrue([privateDescription rangeOfString:@"with/"].location != NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:@"/emoji"].location != NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:@"/🤨/"].location != NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:uuid].location == NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:clientID].location == NSNotFound);
}

- (void)testPrivateDescriptionWithOverlappedIDs
{
// given
NSString *clientID = @"608b4f25ba2b193";
NSString *uuid = @"9e86b08a-8de7-11e9-810f-22000a62954d";
NSString *path = [NSString stringWithFormat:@"ids/%@%@/overlapped", clientID, uuid];
ZMTransportRequest *request = [ZMTransportRequest requestWithPath:path method:ZMMethodHEAD payload:nil];

// when
NSString *privateDescription = [request safeForLoggingDescription];

// then
XCTAssertTrue([privateDescription rangeOfString:@"ids/"].location != NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:@"/overlapped"].location != NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:uuid].location == NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:clientID].location == NSNotFound);

// given
path = [NSString stringWithFormat:@"ids/%@%@/overlapped", uuid, clientID];
request = [ZMTransportRequest requestWithPath:path method:ZMMethodHEAD payload:nil];

// when
privateDescription = [request safeForLoggingDescription];

// then
XCTAssertTrue([privateDescription rangeOfString:@"ids/"].location != NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:@"/overlapped"].location != NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:uuid].location == NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:clientID].location == NSNotFound);

// given
path = [NSString stringWithFormat:@"ids/%@%@/overlapped", uuid, uuid];
request = [ZMTransportRequest requestWithPath:path method:ZMMethodHEAD payload:nil];

// when
privateDescription = [request safeForLoggingDescription];

// then
XCTAssertTrue([privateDescription rangeOfString:@"ids/"].location != NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:@"/overlapped"].location != NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:uuid].location == NSNotFound);

// given
path = [NSString stringWithFormat:@"ids/%@%@/overlapped", clientID, clientID];
request = [ZMTransportRequest requestWithPath:path method:ZMMethodHEAD payload:nil];

// when
privateDescription = [request safeForLoggingDescription];

// then
XCTAssertTrue([privateDescription rangeOfString:@"ids/"].location != NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:@"/overlapped"].location != NSNotFound);
XCTAssertTrue([privateDescription rangeOfString:clientID].location == NSNotFound);
}

@end

0 comments on commit 02e90aa

Please sign in to comment.