Skip to content

Commit b57be2a

Browse files
committed
Add privacy support to Logger in Dataconnect
1 parent d69a78f commit b57be2a

File tree

5 files changed

+46
-175
lines changed

5 files changed

+46
-175
lines changed

Sources/DataConnect.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import Foundation
1717
import FirebaseAppCheck
1818
import FirebaseAuth
1919
import FirebaseCore
20+
import OSLog
2021

2122
@available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *)
2223
public class DataConnect {
@@ -31,6 +32,8 @@ public class DataConnect {
3132

3233
private static var instanceStore = InstanceStore()
3334

35+
static let logger = Logger(subsystem: "com.google.firebase", category: "data_connect")
36+
3437
public enum EmulatorDefaults {
3538
public static let host = "127.0.0.1"
3639
public static let port = 9399

Sources/Internal/CodableTimestamp.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ extension CodableTimestamp {
5252
.firstMatch(in: timestampString, range: NSRange(location: 0,
5353
length: timestampString.count)) !=
5454
nil else {
55-
FirebaseLogger.dataConnect
55+
DataConnect.logger
5656
.error(
57-
"Timestamp string format doesn't support."
57+
"Timestamp string \(timestampString, privacy: .private) format doesn't support."
5858
)
5959
throw DataConnectError.invalidTimestampFormat
6060
}

Sources/Internal/FirebaseLogger/DataConnectLogger.swift

Lines changed: 0 additions & 18 deletions
This file was deleted.

Sources/Internal/FirebaseLogger/FirebaseLogger.swift

Lines changed: 0 additions & 54 deletions
This file was deleted.

Sources/Internal/GrpcClient.swift

Lines changed: 41 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,8 @@ actor GrpcClient: CustomStringConvertible {
6565

6666
private lazy var client: FirebaseDataConnectAsyncClient? = {
6767
do {
68-
if debugEnable == true {
69-
FirebaseLogger.dataConnect.debug("\(self.description) initialization starts.")
70-
} else {
71-
FirebaseLogger.dataConnect.debug("GrpcClient initialization starts.")
72-
}
68+
DataConnect.logger
69+
.debug("GrpcClient \(self.description, privacy: .private) initialization starts.")
7370
let group = PlatformSupport.makeEventLoopGroup(loopCount: threadPoolSize)
7471
let channel = try GRPCChannelPool.with(
7572
target: .host(serverSettings.host, port: serverSettings.port),
@@ -78,18 +75,11 @@ actor GrpcClient: CustomStringConvertible {
7875
.plaintext,
7976
eventLoopGroup: group
8077
)
81-
if debugEnable == true {
82-
FirebaseLogger.dataConnect.debug("\(self.description) has been created.")
83-
} else {
84-
FirebaseLogger.dataConnect.debug("GrpcClient has been created.")
85-
}
78+
DataConnect.logger.debug("GrpcClient\(self.description, privacy: .private) has been created.")
8679
return FirebaseDataConnectAsyncClient(channel: channel)
8780
} catch {
88-
if debugEnable == true {
89-
FirebaseLogger.dataConnect.error("Error:\(error) when creating \(self.description).")
90-
} else {
91-
FirebaseLogger.dataConnect.debug("Error:\(error) when creating GrpcClient.")
92-
}
81+
DataConnect.logger
82+
.debug("Error:\(error) when creating GrpcClient\(self.description, privacy: .private).")
9383
return nil
9484
}
9585
}()
@@ -130,8 +120,7 @@ actor GrpcClient: CustomStringConvertible {
130120
googRequestHeaderValue = "location=\(self.connectorConfig.location)&frontend=data"
131121

132122
description = """
133-
GrpcClient: \
134-
projectId=\(projectId) \
123+
: projectId=\(projectId) \
135124
connector=\(connectorConfig.connector) \
136125
host=\(serverSettings.host) \
137126
port=\(serverSettings.port) \
@@ -145,7 +134,7 @@ actor GrpcClient: CustomStringConvertible {
145134
.Type)
146135
async throws -> OperationResult<ResultType> {
147136
guard let client else {
148-
FirebaseLogger.dataConnect
137+
DataConnect.logger
149138
.error("When calling executeQuery(), grpc client has not been configured.")
150139
throw DataConnectError.grpcNotConfigured
151140
}
@@ -155,49 +144,29 @@ actor GrpcClient: CustomStringConvertible {
155144
connectorName: connectorName,
156145
request: request
157146
)
147+
let requestString = try " " + grpcRequest.jsonString()
158148

159149
do {
160-
if debugEnable == true {
161-
try FirebaseLogger.dataConnect
162-
.debug("executeQuery() sends grpc request: \(grpcRequest.jsonString()).")
163-
} else {
164-
try FirebaseLogger.dataConnect
165-
.debug("executeQuery() sends grpc request.")
166-
}
150+
DataConnect.logger
151+
.debug("executeQuery() sends grpc request \(requestString, privacy: .private).")
167152
let results = try await client.executeQuery(grpcRequest, callOptions: createCallOptions())
168-
if debugEnable == true {
169-
try FirebaseLogger.dataConnect
170-
.debug("executeQuery() receives response: \(results.jsonString()).")
171-
} else {
172-
try FirebaseLogger.dataConnect
173-
.debug("executeQuery() receives response.")
174-
}
153+
let resultsString = try " " + results.jsonString()
154+
DataConnect.logger
155+
.debug("executeQuery() receives response: \(resultsString, privacy: .private).")
175156
// Not doing error decoding here
176157
if let decodedResults = try codec.decode(result: results.data, asType: resultType) {
177158
return OperationResult(data: decodedResults)
178159
} else {
179160
// In future, set this as error in OperationResult
180-
if debugEnable == true {
181-
try FirebaseLogger.dataConnect
182-
.error("executeQuery() response: \(results.jsonString()) decode failed.")
183-
} else {
184-
try FirebaseLogger.dataConnect
185-
.error("executeQuery() response decode failed.")
186-
}
161+
DataConnect.logger
162+
.debug("executeQuery() response\(resultsString, privacy: .private) decode failed.")
187163
throw DataConnectError.decodeFailed
188164
}
189165
} catch {
190-
if debugEnable == true {
191-
try FirebaseLogger.dataConnect
192-
.error(
193-
"executeQuery() with request: \(grpcRequest.jsonString()) grpc call FAILED with \(error)."
194-
)
195-
} else {
196-
try FirebaseLogger.dataConnect
197-
.error(
198-
"executeQuery() grpc call FAILED with \(error)."
199-
)
200-
}
166+
DataConnect.logger
167+
.error(
168+
"executeQuery()\(requestString, privacy: .private) grpc call FAILED with \(error)."
169+
)
201170
throw error
202171
}
203172
}
@@ -208,7 +177,7 @@ actor GrpcClient: CustomStringConvertible {
208177
.Type)
209178
async throws -> OperationResult<ResultType> {
210179
guard let client else {
211-
FirebaseLogger.dataConnect
180+
DataConnect.logger
212181
.error("When calling executeMutation(), grpc client has not been configured.")
213182
throw DataConnectError.grpcNotConfigured
214183
}
@@ -219,46 +188,27 @@ actor GrpcClient: CustomStringConvertible {
219188
request: request
220189
)
221190

191+
let requestString = try " " + grpcRequest.jsonString()
192+
222193
do {
223-
if debugEnable == true {
224-
try FirebaseLogger.dataConnect
225-
.debug("executeMutation() sends grpc request: \(grpcRequest.jsonString()).")
226-
} else {
227-
try FirebaseLogger.dataConnect
228-
.debug("executeMutation() sends grpc request.")
229-
}
194+
DataConnect.logger
195+
.debug("executeMutation() sends grpc request \(requestString, privacy: .private).")
230196
let results = try await client.executeMutation(grpcRequest, callOptions: createCallOptions())
231-
if debugEnable == true {
232-
try FirebaseLogger.dataConnect
233-
.debug("executeMutation() receives response: \(results.jsonString()).")
234-
} else {
235-
try FirebaseLogger.dataConnect
236-
.debug("executeMutation() receives response.")
237-
}
197+
let resultsString = try " " + results.jsonString()
198+
DataConnect.logger
199+
.debug("executeMutation() receives response: \(resultsString, privacy: .private).")
238200
if let decodedResults = try codec.decode(result: results.data, asType: resultType) {
239201
return OperationResult(data: decodedResults)
240202
} else {
241-
if debugEnable == true {
242-
try FirebaseLogger.dataConnect
243-
.error("executeMutation() response: \(results.jsonString()) decode failed.")
244-
} else {
245-
try FirebaseLogger.dataConnect
246-
.error("executeMutation() response decode failed.")
247-
}
203+
DataConnect.logger
204+
.debug("executeMutation() response\(resultsString, privacy: .private) decode failed.")
248205
throw DataConnectError.decodeFailed
249206
}
250207
} catch {
251-
if debugEnable == true {
252-
try FirebaseLogger.dataConnect
253-
.error(
254-
"executeMutation() with request: \(grpcRequest.jsonString()) grpc call FAILED with \(error)."
255-
)
256-
} else {
257-
try FirebaseLogger.dataConnect
258-
.error(
259-
"executeMutation() grpc call FAILED with \(error)."
260-
)
261-
}
208+
DataConnect.logger
209+
.error(
210+
"executeMutation()\(requestString, privacy: .private) grpc call FAILED with \(error)."
211+
)
262212
throw error
263213
}
264214
}
@@ -274,38 +224,28 @@ actor GrpcClient: CustomStringConvertible {
274224
do {
275225
if let token = try await auth.currentUser?.getIDToken() {
276226
headers.add(name: RequestHeaders.authorizationHeader, value: "\(token)")
277-
if debugEnable == true {
278-
FirebaseLogger.dataConnect
279-
.debug("Auth token added: \(token)")
280-
} else {
281-
FirebaseLogger.dataConnect
282-
.debug("Auth token added.")
283-
}
227+
DataConnect.logger
228+
.debug("Auth token added \(token, privacy: .private)")
284229
} else {
285-
FirebaseLogger.dataConnect.debug("No auth token available. Not adding auth header.")
230+
DataConnect.logger.debug("No auth token available. Not adding auth header.")
286231
}
287232
} catch {
288-
FirebaseLogger.dataConnect
233+
DataConnect.logger
289234
.debug("Cannot get auth token successfully due to: \(error). Not adding auth header.")
290235
}
291236

292237
// Add AppCheck token if available
293238
do {
294239
if let token = try await appCheck?.token(forcingRefresh: false) {
295240
headers.add(name: RequestHeaders.appCheckHeader, value: token.token)
296-
if debugEnable == true {
297-
FirebaseLogger.dataConnect
298-
.debug("App Check token added: \(token.token)")
299-
} else {
300-
FirebaseLogger.dataConnect
301-
.debug("App Check token added.")
302-
}
241+
DataConnect.logger
242+
.debug("App Check token added \(token.token)")
303243
} else {
304-
FirebaseLogger.dataConnect
244+
DataConnect.logger
305245
.debug("App Check token unavailable. Not adding App Check header.")
306246
}
307247
} catch {
308-
FirebaseLogger.dataConnect
248+
DataConnect.logger
309249
.debug(
310250
"Cannot get App Check token successfully due to: \(error). Not adding App Check header."
311251
)

0 commit comments

Comments
 (0)