diff --git a/netfox/Core/NFX.swift b/netfox/Core/NFX.swift index b2985723..10d97d95 100755 --- a/netfox/Core/NFX.swift +++ b/netfox/Core/NFX.swift @@ -49,6 +49,7 @@ open class NFX: NSObject { fileprivate var enabled: Bool = false fileprivate var selectedGesture: ENFXGesture = .shake fileprivate var ignoredURLs = [String]() + fileprivate var ignoredURLsRegex = [NSRegularExpression]() fileprivate var filters = [Bool]() fileprivate var lastVisitDate: Date = Date() @@ -173,6 +174,18 @@ open class NFX: NSObject { ignoredURLs.append(url) } + @objc open func ignoreURLs(_ urls: [String]) { + ignoredURLs.append(contentsOf: urls) + } + + @objc open func ignoreURLsWithRegex(_ regex: String) { + ignoredURLsRegex.append(NSRegularExpression(regex)) + } + + @objc open func ignoreURLsWithRegexes(_ regexes: [String]) { + ignoredURLsRegex.append(contentsOf: regexes.map { NSRegularExpression($0) }) + } + internal func getLastVisitDate() -> Date { return lastVisitDate } @@ -222,6 +235,10 @@ open class NFX: NSObject { return ignoredURLs } + func getIgnoredURLsRegexes() -> [NSRegularExpression] { + return ignoredURLsRegex + } + func getSelectedGesture() -> ENFXGesture { return selectedGesture } diff --git a/netfox/Core/NFXProtocol.swift b/netfox/Core/NFXProtocol.swift index 7ce89fa8..0b96793a 100755 --- a/netfox/Core/NFXProtocol.swift +++ b/netfox/Core/NFXProtocol.swift @@ -44,6 +44,14 @@ open class NFXProtocol: URLProtocol { return false } + let regexMatches = NFX.sharedInstance().getIgnoredURLsRegexes() + .map({return $0.matches(url.absoluteString)}) + .reduce(false) {$0 || $1} + + guard regexMatches == false else { + return false + } + return true } @@ -66,6 +74,21 @@ open class NFXProtocol: URLProtocol { } } +extension NSRegularExpression { + convenience init(_ pattern: String) { + do { + try self.init(pattern: pattern) + } catch { + preconditionFailure("Illegal regular expression: \(pattern).") + } + } + + func matches(_ string: String) -> Bool { + let range = NSRange(location: 0, length: string.count) + return firstMatch(in: string, options: [], range: range) != nil + } +} + extension NFXProtocol: URLSessionDataDelegate { public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { responseData?.append(data) diff --git a/netfox_ios_demo/AppDelegate.swift b/netfox_ios_demo/AppDelegate.swift index cd494638..d6eb8231 100644 --- a/netfox_ios_demo/AppDelegate.swift +++ b/netfox_ios_demo/AppDelegate.swift @@ -15,8 +15,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. - + NFX.sharedInstance().start() return true