From 619db9d940840d7e21cb69ce1949fe6fa3649150 Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Mon, 10 Jun 2024 17:42:03 +0200 Subject: [PATCH 01/14] Added log delegate --- .../WPNHttpClient.swift | 30 +++-- .../WultraPowerauthNetworking/WPNLogger.swift | 121 ++++++++++++++---- 2 files changed, 116 insertions(+), 35 deletions(-) diff --git a/Sources/WultraPowerauthNetworking/WPNHttpClient.swift b/Sources/WultraPowerauthNetworking/WPNHttpClient.swift index ccad237..8663e5b 100644 --- a/Sources/WultraPowerauthNetworking/WPNHttpClient.swift +++ b/Sources/WultraPowerauthNetworking/WPNHttpClient.swift @@ -80,22 +80,32 @@ class WPNHttpClient: NSObject, URLSessionDelegate { private extension URLRequest { func printToConsole() { - D.print("WPNHttpClient Request") - D.print("- URL: POST - \(url?.absoluteString ?? "no URL")") - D.print("- Headers: \(allHTTPHeaderFields?.betterDescription ?? "no headers")") - D.print("- Body: \(httpBody?.utf8string ?? "empty body")") + if D.enableHttpTrafficLogs { + D.info("WPNHttpClient Request") + D.info("- URL: POST - \(url?.absoluteString ?? "no URL")") + D.info("- Headers: \(allHTTPHeaderFields?.betterDescription ?? "no headers")") + if D.verboseLevel != .debug { + D.info("- Body: ") + } else { + D.debug("- Body: \(httpBody?.utf8string ?? "empty body")") + } + } } } private extension HTTPURLResponse { func printToConsole(withData data: Data?, andError error: Error?) { - D.print("WPNHttpClient Response") - D.print("- URL: POST - \(url?.absoluteString ?? "no URL")") - D.print("- Status code: \(statusCode)") - D.print("- Headers: \(allHeaderFields.betterDescription)") - D.print("- Body: \(data?.utf8string ?? "empty body")") + D.info("WPNHttpClient Response") + D.info("- URL: POST - \(url?.absoluteString ?? "no URL")") + D.info("- Status code: \(statusCode)") + D.info("- Headers: \(allHeaderFields.betterDescription)") + if D.verboseLevel != .debug { + D.info("- Body: ") + } else { + D.debug("- Body: \(data?.utf8string ?? "empty body")") + } if let error = error { - D.print("- Error: \(error.localizedDescription)") + D.error("- Error: \(error.localizedDescription)") } } } diff --git a/Sources/WultraPowerauthNetworking/WPNLogger.swift b/Sources/WultraPowerauthNetworking/WPNLogger.swift index 337a355..1c58888 100644 --- a/Sources/WultraPowerauthNetworking/WPNLogger.swift +++ b/Sources/WultraPowerauthNetworking/WPNLogger.swift @@ -16,52 +16,123 @@ import Foundation -/// WPNLogger provides simple logging facility available for DEBUG build of the library. +/// Level of the log +public enum WPNLogLevel { + /// Debug logs. Might contain sensitive data like body of the request etc. + /// You should only use this level during development. + case debug + /// Regular library logic logs + case info + /// Non-critical warning + case warning + /// Error happened + case error + + fileprivate var minVerboseLevel: WPNLogger.VerboseLevel { + return switch self { + case .debug: .debug + case .info: .info + case .warning: .warnings + case .error: .errors + } + } + + fileprivate var logName: String { + return switch self { + case .debug: "DEBUG" + case .info: "INFO" + case .warning: "WARNING" + case .error: "ERROR" + } + } +} + +/// Delegate that can further process logs from the library +public protocol WPNLoggerDelegate: AnyObject { + + /** + * If the delegate should follow selected verbosity level. + * + * When set to true, then (for example) if `errors` is selected as a `verboseLevel`, only `error` logLevel will be called. + * When set to false, all methods might be called no matter the selected `verboseLevel`. + */ + var wpnFollowVerboseLevel: Bool { get } + + /// Log was recorded + /// - Parameters: + /// - message: Message of the log + /// - logLevel: Log level + func wpnLog(message: String, logLevel: WPNLogLevel) +} + +/// WPNLogger provides simple logging facility. public class WPNLogger { - /// Defines verbose level for this simple debugging facility. + /// Verbose level of the logger. public enum VerboseLevel: Int { /// Silences all messages. case off = 0 - /// Only errors will be printed to the debug console. + /// Only errors will be printed to the system console. case errors = 1 - /// Errors and warnings will be printed to the debug console. + /// Errors and warnings will be printed to the system console. case warnings = 2 - /// All messages will be printed to the debug console. - case all = 3 + /// Error ,warning and info messages will be printed to the system console. + case info = 3 + /// All messages will be printed to the system console - including debug messages + case debug = 4 } - /// Current verbose level. Note that value is ignored for non-DEBUG builds. + /// Logger delegate + static weak var delegate: WPNLoggerDelegate? + + /// Current verbose level. public static var verboseLevel: VerboseLevel = .warnings + /// If HTTP traffic should be reported by this logger. + /// + /// You can use this option to stop log from the HTTP traffic when you setup your own logging logic + /// via the `responseDelegate` and `requestDelegate` in the `WPNNetworkingService`. + public static var enableHttpTrafficLogs = true + /// Character limit for single log message. Default is 12 000. Unlimited when nil public static var characterLimit: Int? = 12_000 - /// Prints simple message to the debug console. - static func print(_ message: @autoclosure () -> String) { - #if DEBUG || WPN_ENABLE_LOGGING - if verboseLevel == .all { - Swift.print("[WPN] \(message().limit(characterLimit))") - } - #endif + /// Prints simple message to the system console. + static func debug(_ message: @autoclosure () -> String) { + log(message(), level: .debug) + } + + /// Prints simple message to the system console. + static func info(_ message: @autoclosure () -> String) { + log(message(), level: .info) } - /// Prints warning message to the debug console. + /// Prints warning message to the system console. static func warning(_ message: @autoclosure () -> String) { - #if DEBUG || WPN_ENABLE_LOGGING - if verboseLevel.rawValue >= VerboseLevel.warnings.rawValue { - Swift.print("[WPN] WARNING: \(message().limit(characterLimit))") - } - #endif + log(message(), level: .warning) } - /// Prints error message to the debug console. + /// Prints error message to the system console. static func error(_ message: @autoclosure () -> String) { - #if DEBUG || WPN_ENABLE_LOGGING - if verboseLevel != .off { - Swift.print("[WPN] ERROR: \(message().limit(characterLimit))") + log(message(), level: .error) + } + + private static func log(_ message: @autoclosure () -> String, level: WPNLogLevel) { + let levelAllowed = level.minVerboseLevel.rawValue >= verboseLevel.rawValue + let forceReport = delegate?.wpnFollowVerboseLevel == false + guard levelAllowed || forceReport else { + // not logging + return + } + + let msg = message().limit(characterLimit) + + if levelAllowed { + print("[WPN:\(level.logName)] \(msg)") + } + if levelAllowed || forceReport { + delegate?.wpnLog(message: msg, logLevel: level) } - #endif } #if DEBUG From aad024deb156a3d5ca20583b6c368134638e799e Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Mon, 10 Jun 2024 17:45:28 +0200 Subject: [PATCH 02/14] Public delegate --- Sources/WultraPowerauthNetworking/WPNLogger.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/WultraPowerauthNetworking/WPNLogger.swift b/Sources/WultraPowerauthNetworking/WPNLogger.swift index 1c58888..b7ea8a6 100644 --- a/Sources/WultraPowerauthNetworking/WPNLogger.swift +++ b/Sources/WultraPowerauthNetworking/WPNLogger.swift @@ -83,7 +83,7 @@ public class WPNLogger { } /// Logger delegate - static weak var delegate: WPNLoggerDelegate? + public static weak var delegate: WPNLoggerDelegate? /// Current verbose level. public static var verboseLevel: VerboseLevel = .warnings From 2969c033d1374b107dce5300bfed8afbab1b826f Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Mon, 10 Jun 2024 18:04:02 +0200 Subject: [PATCH 03/14] Improve logging in http client --- .../WultraPowerauthNetworking/WPNHttpClient.swift | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/Sources/WultraPowerauthNetworking/WPNHttpClient.swift b/Sources/WultraPowerauthNetworking/WPNHttpClient.swift index 8663e5b..4160db6 100644 --- a/Sources/WultraPowerauthNetworking/WPNHttpClient.swift +++ b/Sources/WultraPowerauthNetworking/WPNHttpClient.swift @@ -84,11 +84,7 @@ private extension URLRequest { D.info("WPNHttpClient Request") D.info("- URL: POST - \(url?.absoluteString ?? "no URL")") D.info("- Headers: \(allHTTPHeaderFields?.betterDescription ?? "no headers")") - if D.verboseLevel != .debug { - D.info("- Body: ") - } else { - D.debug("- Body: \(httpBody?.utf8string ?? "empty body")") - } + D.debug("- Body: \(httpBody?.utf8string ?? "empty body")") } } } @@ -99,11 +95,8 @@ private extension HTTPURLResponse { D.info("- URL: POST - \(url?.absoluteString ?? "no URL")") D.info("- Status code: \(statusCode)") D.info("- Headers: \(allHeaderFields.betterDescription)") - if D.verboseLevel != .debug { - D.info("- Body: ") - } else { - D.debug("- Body: \(data?.utf8string ?? "empty body")") - } + D.debug("- Body: \(data?.utf8string ?? "empty body")") + if let error = error { D.error("- Error: \(error.localizedDescription)") } From 2e8c0694265b5e249b09a67451721de8f92ab6e4 Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Mon, 10 Jun 2024 18:42:19 +0200 Subject: [PATCH 04/14] Add headers to skip --- .../WPNHttpClient.swift | 28 ++++---- .../WultraPowerauthNetworking/WPNLogger.swift | 70 ++++++++++++++++++- 2 files changed, 81 insertions(+), 17 deletions(-) diff --git a/Sources/WultraPowerauthNetworking/WPNHttpClient.swift b/Sources/WultraPowerauthNetworking/WPNHttpClient.swift index 4160db6..4be39ee 100644 --- a/Sources/WultraPowerauthNetworking/WPNHttpClient.swift +++ b/Sources/WultraPowerauthNetworking/WPNHttpClient.swift @@ -80,10 +80,10 @@ class WPNHttpClient: NSObject, URLSessionDelegate { private extension URLRequest { func printToConsole() { - if D.enableHttpTrafficLogs { + if D.logHttpTraffic { D.info("WPNHttpClient Request") D.info("- URL: POST - \(url?.absoluteString ?? "no URL")") - D.info("- Headers: \(allHTTPHeaderFields?.betterDescription ?? "no headers")") + D.info("- Headers: \(D.httpHeadersToSkip.filterHeaders(headers: allHTTPHeaderFields))") D.debug("- Body: \(httpBody?.utf8string ?? "empty body")") } } @@ -91,14 +91,16 @@ private extension URLRequest { private extension HTTPURLResponse { func printToConsole(withData data: Data?, andError error: Error?) { - D.info("WPNHttpClient Response") - D.info("- URL: POST - \(url?.absoluteString ?? "no URL")") - D.info("- Status code: \(statusCode)") - D.info("- Headers: \(allHeaderFields.betterDescription)") - D.debug("- Body: \(data?.utf8string ?? "empty body")") - - if let error = error { - D.error("- Error: \(error.localizedDescription)") + if D.logHttpTraffic { + D.info("WPNHttpClient Response") + D.info("- URL: POST - \(url?.absoluteString ?? "no URL")") + D.info("- Status code: \(statusCode)") + D.info("- Headers: \(D.httpHeadersToSkip.filterHeaders(headers: Dictionary(uniqueKeysWithValues: allHeaderFields.map { ($0.key.description, "\($0.value)") })))") + D.debug("- Body: \(data?.utf8string ?? "empty body")") + + if let error = error { + D.error("- Error: \(error.localizedDescription)") + } } } } @@ -108,9 +110,3 @@ private extension Data { return String(bytes: self, encoding: .utf8) } } - -private extension Dictionary where Key: CustomStringConvertible, Value: Any { - var betterDescription: String { - return map({($0.key.description, $0.value)}).description - } -} diff --git a/Sources/WultraPowerauthNetworking/WPNLogger.swift b/Sources/WultraPowerauthNetworking/WPNLogger.swift index b7ea8a6..70445e1 100644 --- a/Sources/WultraPowerauthNetworking/WPNLogger.swift +++ b/Sources/WultraPowerauthNetworking/WPNLogger.swift @@ -92,7 +92,9 @@ public class WPNLogger { /// /// You can use this option to stop log from the HTTP traffic when you setup your own logging logic /// via the `responseDelegate` and `requestDelegate` in the `WPNNetworkingService`. - public static var enableHttpTrafficLogs = true + public static var logHttpTraffic = true + + public static let httpHeadersToSkip = HeaderBlockList() /// Character limit for single log message. Default is 12 000. Unlimited when nil public static var characterLimit: Int? = 12_000 @@ -158,6 +160,72 @@ public class WPNLogger { #endif } +/** + * Headers to skip when logging. + * + * Note that all headers are transformed to lowercase variant when added. + * + * Default headers to skip are: + * ``` + * "accept-language", "content-type", "content-length", "accept-language", "transfer-encoding", "date", "server", "user-agent", + * "connection", "x-content-type-options", "x-xss-protection", "cache-control", "pragma", "expires", "x-frame-options", "vary" + * ``` + */ +public class HeaderBlockList { + + private var headersToSkp = [ + "accept-language", "content-type", "content-length", "accept-language", "transfer-encoding", "date", "server", "user-agent", + "connection", "x-content-type-options", "x-xss-protection", "cache-control", "pragma", "expires", "x-frame-options", "vary" + ] + + public func add(element: String) { + headersToSkp.append(element.lowercased()) + } + + public func add(elements: [String]) { + headersToSkp.append(contentsOf: elements.map { $0.lowercased() }) + } + + public func remove(element: String) { + headersToSkp.removeAll { $0 == element.lowercased() } + } + + public func removeAll(elements: [String]) { + elements.map { $0.lowercased() }.forEach { + if let idx = headersToSkp.firstIndex(of: $0) { + headersToSkp.remove(at: idx) + } + } + } + + public func removeAll() { + headersToSkp.removeAll() + } + + public func headersToSkip() -> [String] { + return Array(headersToSkp) + } + + func filterHeaders(headers: [String: String]?) -> String { + + guard let headers else { + return "no headers" + } + + var result = "" + var skipped = 0 + + for header in headers { + if headersToSkp.contains(where: { $0 == header.key.lowercased() }) { + skipped += 1 + } else { + result += "\n - \(header.key): \(header.value)" + } + } + return "\(skipped) filtered out" + result + } +} + private extension String { func limit(_ characterLimit: Int?) -> String { guard let cl = characterLimit else { From 0241775e81db74339a1f5c34367e8c9f6d928252 Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Mon, 10 Jun 2024 18:49:42 +0200 Subject: [PATCH 05/14] Fixed verbose level --- Sources/WultraPowerauthNetworking/WPNLogger.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/WultraPowerauthNetworking/WPNLogger.swift b/Sources/WultraPowerauthNetworking/WPNLogger.swift index 70445e1..0d57963 100644 --- a/Sources/WultraPowerauthNetworking/WPNLogger.swift +++ b/Sources/WultraPowerauthNetworking/WPNLogger.swift @@ -120,7 +120,7 @@ public class WPNLogger { } private static func log(_ message: @autoclosure () -> String, level: WPNLogLevel) { - let levelAllowed = level.minVerboseLevel.rawValue >= verboseLevel.rawValue + let levelAllowed = level.minVerboseLevel.rawValue <= verboseLevel.rawValue let forceReport = delegate?.wpnFollowVerboseLevel == false guard levelAllowed || forceReport else { // not logging From e4b8f69d1b7d4d2ca25dd9e6bc9675fa8465fac6 Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Fri, 28 Jun 2024 13:50:00 +0200 Subject: [PATCH 06/14] Improved documentation --- .../WultraPowerauthNetworking/WPNLogger.swift | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Sources/WultraPowerauthNetworking/WPNLogger.swift b/Sources/WultraPowerauthNetworking/WPNLogger.swift index 0d57963..5d685ba 100644 --- a/Sources/WultraPowerauthNetworking/WPNLogger.swift +++ b/Sources/WultraPowerauthNetworking/WPNLogger.swift @@ -85,18 +85,19 @@ public class WPNLogger { /// Logger delegate public static weak var delegate: WPNLoggerDelegate? - /// Current verbose level. + /// Current verbose level. `warnings` by default public static var verboseLevel: VerboseLevel = .warnings - /// If HTTP traffic should be reported by this logger. + /// If HTTP traffic should be reported by this logger. `true` by default /// /// You can use this option to stop log from the HTTP traffic when you setup your own logging logic /// via the `responseDelegate` and `requestDelegate` in the `WPNNetworkingService`. public static var logHttpTraffic = true + /// Headers that won't be logged. public static let httpHeadersToSkip = HeaderBlockList() - /// Character limit for single log message. Default is 12 000. Unlimited when nil + /// Character limit for single log message. Default is `12 000`. Unlimited when nil public static var characterLimit: Int? = 12_000 /// Prints simple message to the system console. @@ -177,19 +178,27 @@ public class HeaderBlockList { "accept-language", "content-type", "content-length", "accept-language", "transfer-encoding", "date", "server", "user-agent", "connection", "x-content-type-options", "x-xss-protection", "cache-control", "pragma", "expires", "x-frame-options", "vary" ] - + + /// Adds element to the block list. + /// - Parameter element: HTTP header key to block. public func add(element: String) { headersToSkp.append(element.lowercased()) } + /// Adds elements to the block list. + /// - Parameter element: HTTP header keys to block. public func add(elements: [String]) { headersToSkp.append(contentsOf: elements.map { $0.lowercased() }) } + /// Removes element from the block list. + /// - Parameter element: HTTP header key to remove. public func remove(element: String) { headersToSkp.removeAll { $0 == element.lowercased() } } + /// Removes elements from the block list. + /// - Parameter element: HTTP header keys to remove. public func removeAll(elements: [String]) { elements.map { $0.lowercased() }.forEach { if let idx = headersToSkp.firstIndex(of: $0) { @@ -198,10 +207,13 @@ public class HeaderBlockList { } } + /// Remove all public func removeAll() { headersToSkp.removeAll() } + /// Returns array of headers to skip + /// - Returns: Headers to skip public func headersToSkip() -> [String] { return Array(headersToSkp) } From ee1ae7b8d32d88f80ae71939e40fac6e941aaf29 Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Fri, 28 Jun 2024 13:56:53 +0200 Subject: [PATCH 07/14] More documentation --- .../WultraPowerauthNetworking/WPNLogger.swift | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/Sources/WultraPowerauthNetworking/WPNLogger.swift b/Sources/WultraPowerauthNetworking/WPNLogger.swift index 5d685ba..1641633 100644 --- a/Sources/WultraPowerauthNetworking/WPNLogger.swift +++ b/Sources/WultraPowerauthNetworking/WPNLogger.swift @@ -50,12 +50,11 @@ public enum WPNLogLevel { /// Delegate that can further process logs from the library public protocol WPNLoggerDelegate: AnyObject { - /** - * If the delegate should follow selected verbosity level. - * - * When set to true, then (for example) if `errors` is selected as a `verboseLevel`, only `error` logLevel will be called. - * When set to false, all methods might be called no matter the selected `verboseLevel`. - */ + + /// If the delegate should follow selected verbosity level. + /// + /// When set to true, then (for example) if `errors` is selected as a `verboseLevel`, only `error` logLevel will be called. + /// When set to false, all methods might be called no matter the selected `verboseLevel`. var wpnFollowVerboseLevel: Bool { get } /// Log was recorded @@ -95,6 +94,15 @@ public class WPNLogger { public static var logHttpTraffic = true /// Headers that won't be logged. + /// + /// Default headers to skip are: + /// ``` + /// "accept-language", "content-type", "content-length", + /// "accept-language", "transfer-encoding", "date", + /// "server", "user-agent", "connection", "x-content-type-options", + /// "x-xss-protection", "cache-control", "pragma", "expires", + /// "x-frame-options", "vary" + /// ``` public static let httpHeadersToSkip = HeaderBlockList() /// Character limit for single log message. Default is `12 000`. Unlimited when nil @@ -161,17 +169,16 @@ public class WPNLogger { #endif } -/** - * Headers to skip when logging. - * - * Note that all headers are transformed to lowercase variant when added. - * - * Default headers to skip are: - * ``` - * "accept-language", "content-type", "content-length", "accept-language", "transfer-encoding", "date", "server", "user-agent", - * "connection", "x-content-type-options", "x-xss-protection", "cache-control", "pragma", "expires", "x-frame-options", "vary" - * ``` - */ +/// Headers to skip when logging. +/// +/// Note that all headers are transformed to lowercase variant when added. +/// +/// Default headers to skip are: +/// ``` +/// "accept-language", "content-type", "content-length", "accept-language", "transfer-encoding", "date", "server", "user-agent", +/// "connection", "x-content-type-options", "x-xss-protection", "cache-control", "pragma", "expires", "x-frame-options", "vary" +/// ``` +/// public class HeaderBlockList { private var headersToSkp = [ From 8db104821ef129e7eaad546bc9bf9e35877a193d Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Fri, 28 Jun 2024 14:17:08 +0200 Subject: [PATCH 08/14] Improved md documentation --- README.md | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 2242863..b212f13 100644 --- a/README.md +++ b/README.md @@ -337,27 +337,37 @@ The default value is always `en`. With other languages, we use values compliant ## Logging -For logging purposes `WPNLogger` that prints to the console is used. - - -Note that logging to the console is available only when the library is compiled with the `DEBUG` or `WPN_ENABLE_LOGGING` Swift compile condition. - +You can set up logging for the library using the `WPNLogger` class. ### Verbosity Level -You can limit the amount of logged information via `verboseLevel` property. +You can limit the amount of logged information via the `verboseLevel` property. + +| Level | Description | +| ---------------------- | ------------------------------------------------- | +| `off` | Silences all messages. | +| `errors` | Only errors will be logged. | +| `warnings` _(default)_ | Errors and warnings will be logged. | +| `info` | Error, warning and info messages will be logged. | +| `all` | All messages will be logged. | + +### Traffic logs -| Level | Description | -| --- | --- | -| `off` | Silences all messages. | -| `errors` | Only errors will be printed to the debug console. | -| `warnings` _(default)_ | Errors and warnings will be printed to the debug console. | -| `all` | All messages will be printed to the debug console. | +To prevent huge logs from being printed out, there is a default limit of 12,000 characters per log in place. You can change this via `WPNLogger.characterLimit`. ### Character limit To prevent huge logs from being printed out, there is a default limit of 12,000 characters per log in place. You can change this via `WPNLogger.characterLimit`. +### HTTP traffic logs + +- You can turn on or off logging of the requests and responses with the `WPNLogger.logHttpTraffic` property. +- You can filter which headers will be logged with the `WPNLogger.httpHeadersToSkip` property. + +### Logger Delegate + +In case you want to process logs on your own (for example log into a file or some cloud service), you can set `WPNLogger.delegate`. + ## Web Documentation From 41823d12209ac24dc877b41399a18d2de449968e Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Fri, 28 Jun 2024 14:31:14 +0200 Subject: [PATCH 09/14] Swiftlint fix --- Sources/WultraPowerauthNetworking/WPNLogger.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/WultraPowerauthNetworking/WPNLogger.swift b/Sources/WultraPowerauthNetworking/WPNLogger.swift index 1641633..83729d3 100644 --- a/Sources/WultraPowerauthNetworking/WPNLogger.swift +++ b/Sources/WultraPowerauthNetworking/WPNLogger.swift @@ -50,7 +50,6 @@ public enum WPNLogLevel { /// Delegate that can further process logs from the library public protocol WPNLoggerDelegate: AnyObject { - /// If the delegate should follow selected verbosity level. /// /// When set to true, then (for example) if `errors` is selected as a `verboseLevel`, only `error` logLevel will be called. From 582f6ae017475802a86e69078309d6f9137bdc2f Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Fri, 28 Jun 2024 15:20:19 +0200 Subject: [PATCH 10/14] Fixed readme --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index b212f13..a6abbaa 100644 --- a/README.md +++ b/README.md @@ -351,10 +351,6 @@ You can limit the amount of logged information via the `verboseLevel` property. | `info` | Error, warning and info messages will be logged. | | `all` | All messages will be logged. | -### Traffic logs - -To prevent huge logs from being printed out, there is a default limit of 12,000 characters per log in place. You can change this via `WPNLogger.characterLimit`. - ### Character limit To prevent huge logs from being printed out, there is a default limit of 12,000 characters per log in place. You can change this via `WPNLogger.characterLimit`. From de923fdfa236159f2fb6bac716f7d9f426fa658c Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Tue, 2 Jul 2024 14:27:40 +0200 Subject: [PATCH 11/14] Logging decrypted message into te debug console --- Sources/WultraPowerauthNetworking/WPNNetworkingService.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift b/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift index c614214..9583274 100644 --- a/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift +++ b/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift @@ -215,6 +215,7 @@ public class WPNNetworkingService { self.responseDelegate?.responseReceived(from: request.url, statusCode: urlResponse?.statusCode, body: receivedData) resp = envelope case .encrypted(let envelope, let decryptedData): + D.debug("Decrypted response from \(url.absoluteString):\n\(String(data: decrypted, encoding: .utf8) ?? "empty")") self.responseDelegate?.encryptedResponseReceived(from: request.url, statusCode: urlResponse?.statusCode, body: receivedData, decrypted: decryptedData) resp = envelope case .failed: From f42d1d5c7f8af2f38ef959f28ccd6e14c397df5b Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Tue, 2 Jul 2024 14:28:15 +0200 Subject: [PATCH 12/14] Logging decypted message if logHttpTraffic is set --- Sources/WultraPowerauthNetworking/WPNNetworkingService.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift b/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift index 9583274..c82602f 100644 --- a/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift +++ b/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift @@ -215,7 +215,9 @@ public class WPNNetworkingService { self.responseDelegate?.responseReceived(from: request.url, statusCode: urlResponse?.statusCode, body: receivedData) resp = envelope case .encrypted(let envelope, let decryptedData): - D.debug("Decrypted response from \(url.absoluteString):\n\(String(data: decrypted, encoding: .utf8) ?? "empty")") + if D.logHttpTraffic { + D.debug("Decrypted response from \(url.absoluteString):\n\(String(data: decrypted, encoding: .utf8) ?? "empty")") + } self.responseDelegate?.encryptedResponseReceived(from: request.url, statusCode: urlResponse?.statusCode, body: receivedData, decrypted: decryptedData) resp = envelope case .failed: From 0f76f81b2e841b265fc745dd220ff676d545ad45 Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Tue, 2 Jul 2024 14:30:05 +0200 Subject: [PATCH 13/14] Fixed compile issue --- Sources/WultraPowerauthNetworking/WPNNetworkingService.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift b/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift index c82602f..d3ccce1 100644 --- a/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift +++ b/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift @@ -216,7 +216,7 @@ public class WPNNetworkingService { resp = envelope case .encrypted(let envelope, let decryptedData): if D.logHttpTraffic { - D.debug("Decrypted response from \(url.absoluteString):\n\(String(data: decrypted, encoding: .utf8) ?? "empty")") + D.debug("Decrypted response from \(request.url.absoluteString):\n\(String(data: decryptedData, encoding: .utf8) ?? "empty")") } self.responseDelegate?.encryptedResponseReceived(from: request.url, statusCode: urlResponse?.statusCode, body: receivedData, decrypted: decryptedData) resp = envelope From 0f44e1e90df3be1c3ee7edac9f2dbbc9f004bf52 Mon Sep 17 00:00:00 2001 From: Jan Kobersky Date: Tue, 2 Jul 2024 14:37:06 +0200 Subject: [PATCH 14/14] Fixed swiftlint --- Sources/WultraPowerauthNetworking/WPNNetworkingService.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift b/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift index d3ccce1..e3ec9e4 100644 --- a/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift +++ b/Sources/WultraPowerauthNetworking/WPNNetworkingService.swift @@ -216,7 +216,7 @@ public class WPNNetworkingService { resp = envelope case .encrypted(let envelope, let decryptedData): if D.logHttpTraffic { - D.debug("Decrypted response from \(request.url.absoluteString):\n\(String(data: decryptedData, encoding: .utf8) ?? "empty")") + D.debug("Decrypted response from \(request.url.absoluteString):\n\(String(decoding: decryptedData, as: UTF8.self) ?? "empty")") } self.responseDelegate?.encryptedResponseReceived(from: request.url, statusCode: urlResponse?.statusCode, body: receivedData, decrypted: decryptedData) resp = envelope