Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rework Logging #43

Merged
merged 3 commits into from
Sep 9, 2016
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Now loggers are configured in the instance itself
Avoids the logger singleton
  • Loading branch information
hzalaz committed Sep 8, 2016
commit a043b6892ae2cb5fe2c5c2678c21dab7a8459cef
1 change: 0 additions & 1 deletion App/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
Auth0.enableLogging()
return true
}

Expand Down
11 changes: 9 additions & 2 deletions App/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,17 @@ class ViewController: UIViewController {
}

@IBAction func startOAuth2(sender: AnyObject) {
Auth0.webAuth().start(onAuth)
var auth0 = Auth0.webAuth()
auth0
.logging(enabled: true)
.start(onAuth)
}

@IBAction func startGoogleOAuth2(sender: AnyObject) {
Auth0.webAuth().connection("google-oauth2").start(onAuth)
var auth0 = Auth0.webAuth()
auth0
.logging(enabled: true)
.connection("google-oauth2")
.start(onAuth)
}
}
17 changes: 11 additions & 6 deletions Auth0.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,10 @@
5F23E7131D4B890500C3F2D9 /* A0ChallengeGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FC34AF61D0101BF000F28F5 /* A0ChallengeGenerator.m */; };
5F23E71A1D4B891E00C3F2D9 /* Auth0.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F06DDC81CC66B710011842B /* Auth0.swift */; };
5F23E71B1D4B891E00C3F2D9 /* Auth0Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FD255B61D14F00900387ECB /* Auth0Error.swift */; };
5F2BD4041D09F7B700B5F7D2 /* _ObjectiveLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2BD4031D09F7B700B5F7D2 /* _ObjectiveLogger.swift */; };
5F2BD4051D09F7B700B5F7D2 /* _ObjectiveLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2BD4031D09F7B700B5F7D2 /* _ObjectiveLogger.swift */; };
5F28B4611D8216180000EB23 /* Loggable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F28B4601D8216180000EB23 /* Loggable.swift */; };
5F28B4621D8216180000EB23 /* Loggable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F28B4601D8216180000EB23 /* Loggable.swift */; };
5F28B4631D8216180000EB23 /* Loggable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F28B4601D8216180000EB23 /* Loggable.swift */; };
5F28B4641D8216180000EB23 /* Loggable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F28B4601D8216180000EB23 /* Loggable.swift */; };
5F331AFE1D4BB24C00AE4382 /* Auth0.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F23E6F61D4B87F000C3F2D9 /* Auth0.framework */; };
5F331B041D4BB78C00AE4382 /* TelemetrySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FE686A91D1894AA0075874C /* TelemetrySpec.swift */; };
5F331B051D4BB7D400AE4382 /* AuthenticationSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FBBF0421CCA90300024D2AF /* AuthenticationSpec.swift */; };
Expand Down Expand Up @@ -298,7 +300,7 @@
5F23E6B91D4ACA7100C3F2D9 /* Auth0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Auth0.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5F23E6F61D4B87F000C3F2D9 /* Auth0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Auth0.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5F23E6FA1D4B87F000C3F2D9 /* Info-tvOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-tvOS.plist"; path = "Auth0/Info-tvOS.plist"; sourceTree = SOURCE_ROOT; };
5F2BD4031D09F7B700B5F7D2 /* _ObjectiveLogger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _ObjectiveLogger.swift; sourceTree = "<group>"; };
5F28B4601D8216180000EB23 /* Loggable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Loggable.swift; sourceTree = "<group>"; };
5F331AF91D4BB24C00AE4382 /* Auth0Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Auth0Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
5F331B121D4BCBD400AE4382 /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quick.framework; path = Carthage/Build/tvOS/Quick.framework; sourceTree = "<group>"; };
5F331B131D4BCBD400AE4382 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/tvOS/Nimble.framework; sourceTree = "<group>"; };
Expand Down Expand Up @@ -579,7 +581,7 @@
isa = PBXGroup;
children = (
5F6FAC621D09E98000D5B4EA /* Logger.swift */,
5F2BD4031D09F7B700B5F7D2 /* _ObjectiveLogger.swift */,
5F28B4601D8216180000EB23 /* Loggable.swift */,
);
path = Logger;
sourceTree = "<group>";
Expand Down Expand Up @@ -1091,6 +1093,7 @@
5FCCC31C1CF51DF300901E2E /* _ObjectiveManagementAPI.swift in Sources */,
5FC34AF81D0101BF000F28F5 /* A0ChallengeGenerator.m in Sources */,
5F6FAC631D09E98000D5B4EA /* Logger.swift in Sources */,
5F28B4611D8216180000EB23 /* Loggable.swift in Sources */,
5FBBF0461CCA99E90024D2AF /* Credentials.swift in Sources */,
5F53F5CE1CFD157300476A46 /* OAuth2Session.swift in Sources */,
5FBEF3DC1D079F2100D90941 /* _ObjectiveWebAuth.swift in Sources */,
Expand All @@ -1102,7 +1105,6 @@
5FD255BA1D14F70B00387ECB /* WebAuthError.swift in Sources */,
5FD255B71D14F00900387ECB /* Auth0Error.swift in Sources */,
5FD255AE1D14A4A300387ECB /* AuthenticationError.swift in Sources */,
5F2BD4041D09F7B700B5F7D2 /* _ObjectiveLogger.swift in Sources */,
5F06DDC91CC66B710011842B /* Auth0.swift in Sources */,
5FE2F8B21CCEAED8003628F4 /* Requestable.swift in Sources */,
5FCCC3191CF51BBD00901E2E /* NSError+Management.swift in Sources */,
Expand All @@ -1129,6 +1131,7 @@
files = (
5FE2F8BC1CD0EAAD003628F4 /* Response.swift in Sources */,
5FCCC31D1CF51DF300901E2E /* _ObjectiveManagementAPI.swift in Sources */,
5F28B4621D8216180000EB23 /* Loggable.swift in Sources */,
5FBBF0471CCA99E90024D2AF /* Credentials.swift in Sources */,
5F74CB3E1CEE8E9100226823 /* Identity.swift in Sources */,
5F6FAC641D09E98000D5B4EA /* Logger.swift in Sources */,
Expand All @@ -1144,7 +1147,6 @@
5FADB60D1CED7E0800D4BB50 /* UserPatchAttributes.swift in Sources */,
5F7989521CF13A20009E8A10 /* _ObjectiveAuthenticationAPI.swift in Sources */,
5F74CB411CEFD5E600226823 /* JSONObjectPayload.swift in Sources */,
5F2BD4051D09F7B700B5F7D2 /* _ObjectiveLogger.swift in Sources */,
5FD255AF1D14A4A300387ECB /* AuthenticationError.swift in Sources */,
5FE2F8B91CD0E910003628F4 /* Request.swift in Sources */,
5FE2F8AA1CCE54F1003628F4 /* Result.swift in Sources */,
Expand Down Expand Up @@ -1219,6 +1221,7 @@
5F23E6DD1D4ACD6100C3F2D9 /* NSURL+Auth0.swift in Sources */,
5F23E6D71D4ACD5B00C3F2D9 /* Credentials.swift in Sources */,
5F23E6E71D4ACD8500C3F2D9 /* Response.swift in Sources */,
5F28B4631D8216180000EB23 /* Loggable.swift in Sources */,
5F23E6E01D4ACD7F00C3F2D9 /* Management.swift in Sources */,
5F23E6DA1D4ACD5B00C3F2D9 /* Profile.swift in Sources */,
5F23E6D51D4ACD4C00C3F2D9 /* Telemetry.swift in Sources */,
Expand Down Expand Up @@ -1248,6 +1251,7 @@
5F23E7011D4B88DB00C3F2D9 /* Credentials.swift in Sources */,
5F23E71A1D4B891E00C3F2D9 /* Auth0.swift in Sources */,
5F23E7101D4B88FC00C3F2D9 /* Response.swift in Sources */,
5F28B4641D8216180000EB23 /* Loggable.swift in Sources */,
5F23E7091D4B88F600C3F2D9 /* Management.swift in Sources */,
5F23E7041D4B88DB00C3F2D9 /* Profile.swift in Sources */,
5F23E6FF1D4B88D400C3F2D9 /* Telemetry.swift in Sources */,
Expand Down Expand Up @@ -1869,6 +1873,7 @@
5F331B021D4BB24C00AE4382 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
5F3965E11CF67DD800CDE7C0 /* Build configuration list for PBXNativeTarget "OAuth2" */ = {
isa = XCConfigurationList;
Expand Down
11 changes: 0 additions & 11 deletions Auth0/Auth0.swift
Original file line number Diff line number Diff line change
Expand Up @@ -190,17 +190,6 @@ public func users(token token: String, domain: String, session: NSURLSession = .
return management(token: token, domain: domain, session: session).users()
}

/**
Turn on/off Auth0.swift debug logging of HTTP requests and OAuth2 flow (iOS only).

- parameter enabled: optional flag to turn on/off logging
- note: By default all logging is **disabled**
- important: Logging should be turned on/off **before** making request to Auth0 for the flag to take effect.
*/
public func enableLogging(enabled enabled: Bool = true) {
Auth0Logger.sharedInstance.logger = enabled ? DefaultLogger() : nil
}

func plistValues(bundle bundle: NSBundle) -> (clientId: String, domain: String)? {
guard
let path = bundle.pathForResource("Auth0", ofType: "plist"),
Expand Down
21 changes: 11 additions & 10 deletions Auth0/Authentication/Authentication.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,11 @@ public typealias DatabaseUser = (email: String, username: String?, verified: Boo
Auth endpoints of Auth0
- seeAlso: [Auth0 Auth API docs](https://auth0.com/docs/api/authentication)
*/
public struct Authentication: Trackable {
public struct Authentication: Trackable, Loggable {
public let clientId: String
public let url: NSURL
public var telemetry: Telemetry
public var logger: Logger?

let session: NSURLSession

Expand Down Expand Up @@ -103,7 +104,7 @@ public struct Authentication: Trackable {
]
payload["mfa_code"] = multifactorCode
parameters.forEach { key, value in payload[key] = value }
return Request(session: session, url: resourceOwner, method: "POST", handle: authenticationObject, payload: payload, telemetry: self.telemetry)
return Request(session: session, url: resourceOwner, method: "POST", handle: authenticationObject, payload: payload, logger: self.logger, telemetry: self.telemetry)
}


Expand Down Expand Up @@ -154,7 +155,7 @@ public struct Authentication: Trackable {
payload["user_metadata"] = userMetadata

let createUser = NSURL(string: "/dbconnections/signup", relativeToURL: self.url)!
return Request(session: session, url: createUser, method: "POST", handle: databaseUser, payload: payload, telemetry: self.telemetry)
return Request(session: session, url: createUser, method: "POST", handle: databaseUser, payload: payload, logger: self.logger, telemetry: self.telemetry)
}

/**
Expand All @@ -179,7 +180,7 @@ public struct Authentication: Trackable {
"client_id": self.clientId
]
let resetPassword = NSURL(string: "/dbconnections/change_password", relativeToURL: self.url)!
return Request(session: session, url: resetPassword, method: "POST", handle: noBody, payload: payload, telemetry: self.telemetry)
return Request(session: session, url: resetPassword, method: "POST", handle: noBody, payload: payload, logger: self.logger, telemetry: self.telemetry)
}

/**
Expand Down Expand Up @@ -273,7 +274,7 @@ public struct Authentication: Trackable {
}

let start = NSURL(string: "/passwordless/start", relativeToURL: self.url)!
return Request(session: session, url: start, method: "POST", handle: noBody, payload: payload, telemetry: self.telemetry)
return Request(session: session, url: start, method: "POST", handle: noBody, payload: payload, logger: self.logger, telemetry: self.telemetry)
}

/**
Expand Down Expand Up @@ -309,7 +310,7 @@ public struct Authentication: Trackable {
"client_id": self.clientId,
]
let start = NSURL(string: "/passwordless/start", relativeToURL: self.url)!
return Request(session: session, url: start, method: "POST", handle: noBody, payload: payload, telemetry: self.telemetry)
return Request(session: session, url: start, method: "POST", handle: noBody, payload: payload, logger: self.logger, telemetry: self.telemetry)
}

/**
Expand All @@ -329,7 +330,7 @@ public struct Authentication: Trackable {
public func tokenInfo(token token: String) -> Request<Profile, AuthenticationError> {
let payload: [String: AnyObject] = ["id_token": token]
let tokenInfo = NSURL(string: "/tokeninfo", relativeToURL: self.url)!
return Request(session: session, url: tokenInfo, method: "POST", handle: authenticationObject, payload: payload, telemetry: self.telemetry)
return Request(session: session, url: tokenInfo, method: "POST", handle: authenticationObject, payload: payload, logger: self.logger, telemetry: self.telemetry)
}

/**
Expand All @@ -348,7 +349,7 @@ public struct Authentication: Trackable {
*/
public func userInfo(token token: String) -> Request<Profile, AuthenticationError> {
let userInfo = NSURL(string: "/userinfo", relativeToURL: self.url)!
return Request(session: session, url: userInfo, method: "GET", handle: authenticationObject, headers: ["Authorization": "Bearer \(token)"], telemetry: self.telemetry)
return Request(session: session, url: userInfo, method: "GET", handle: authenticationObject, headers: ["Authorization": "Bearer \(token)"], logger: self.logger, telemetry: self.telemetry)
}

/**
Expand Down Expand Up @@ -386,7 +387,7 @@ public struct Authentication: Trackable {
]
parameters.forEach { key, value in payload[key] = value }
let accessToken = NSURL(string: "/oauth/access_token", relativeToURL: self.url)!
return Request(session: session, url: accessToken, method: "POST", handle: authenticationObject, payload: payload, telemetry: self.telemetry)
return Request(session: session, url: accessToken, method: "POST", handle: authenticationObject, payload: payload, logger: self.logger, telemetry: self.telemetry)
}


Expand All @@ -411,7 +412,7 @@ public struct Authentication: Trackable {
]
parameters.forEach { payload[$0] = $1 }
let token = NSURL(string: "/oauth/token", relativeToURL: self.url)!
return Request(session: session, url: token, method: "POST", handle: authenticationObject, payload: payload, telemetry: self.telemetry)
return Request(session: session, url: token, method: "POST", handle: authenticationObject, payload: payload, logger: self.logger, telemetry: self.telemetry)
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// _ObjectiveLogger.swift
// Loggable.swift
//
// Copyright (c) 2016 Auth0 (http://auth0.com)
//
Expand All @@ -22,26 +22,39 @@

import Foundation

@objc(A0Logger)
public class _ObjectiveLogger: NSObject {
public protocol Loggable {

var logger: Logger? { get set }

}

public extension Loggable {

/**
Turn on Auth0.swift debug logging of HTTP requests and OAuth2 flow (iOS only).
Turn on Auth0.swift debug logging of HTTP requests and OAuth2 flow (iOS only) with a custom logger.

- parameter logger: logger used to print log statements
- note: By default all logging is **disabled**
- important: Logging should be turned on/off **before** making request to Auth0 for the flag to take effect.
*/
public static func loggingEnabled() {
enableLogging(enabled: true)
mutating func usingLogger(logger: Logger) -> Self {
self.logger = logger
return self
}

/**
Turn on/off Auth0.swift debug logging of HTTP requests and OAuth2 flow (iOS only).

- parameter enabled: flag to turn on/off logging
- parameter enabled: optional flag to turn on/off logging
- note: By default all logging is **disabled**
- important: Logging should be turned on/off **before** making request to Auth0 for the flag to take effect.
*/
public static func loggingEnabled(enabled: Bool) {
enableLogging(enabled: enabled)
mutating func logging(enabled enabled: Bool) -> Self {
if enabled {
self.logger = DefaultLogger()
} else {
self.logger = nil
}
return self
}
}
6 changes: 0 additions & 6 deletions Auth0/Logger/Logger.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,6 @@

import Foundation

class Auth0Logger {
static let sharedInstance = Auth0Logger()

var logger: Logger? = nil
}

public protocol Logger {
func trace(request: NSURLRequest, session: NSURLSession)
func trace(response: NSURLResponse, data: NSData?)
Expand Down
11 changes: 6 additions & 5 deletions Auth0/Management/Users.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,10 @@ import Foundation
Users endpoints of Auth0 Management API v2
- seeAlso: [Auth0 Management API docs](https://auth0.com/docs/api/management/v2#!/Users)
*/
public struct Users: Trackable {
public struct Users: Trackable, Loggable {
let management: Management
public var telemetry: Telemetry
public var logger: Logger?

init(management: Management, telemetry: Telemetry) {
self.management = management
Expand Down Expand Up @@ -84,7 +85,7 @@ public struct Users: Trackable {
]
}

return Request(session: self.management.session, url: component.URL!, method: "GET", handle: self.management.managementObject, headers: self.management.defaultHeaders, telemetry: self.telemetry)
return Request(session: self.management.session, url: component.URL!, method: "GET", handle: self.management.managementObject, headers: self.management.defaultHeaders, logger: self.logger, telemetry: self.telemetry)
}

/**
Expand Down Expand Up @@ -135,7 +136,7 @@ public struct Users: Trackable {
let userPath = "/api/v2/users/\(identifier)"
let component = components(self.management.url, path: userPath)

return Request(session: self.management.session, url: component.URL!, method: "PATCH", handle: self.management.managementObject, payload: attributes.dictionary, headers: self.management.defaultHeaders, telemetry: self.telemetry)
return Request(session: self.management.session, url: component.URL!, method: "PATCH", handle: self.management.managementObject, payload: attributes.dictionary, headers: self.management.defaultHeaders, logger: self.logger, telemetry: self.telemetry)
}

/**
Expand Down Expand Up @@ -216,7 +217,7 @@ public struct Users: Trackable {
private func link(identifier: String, payload: [String: String]) -> Request<[Management.Object], ManagementError> {
let identitiesPath = "/api/v2/users/\(identifier)/identities"
let url = components(self.management.url, path: identitiesPath).URL!
return Request(session: self.management.session, url: url, method: "POST", handle: self.management.managementObjects, payload: payload, headers: self.management.defaultHeaders, telemetry: self.telemetry)
return Request(session: self.management.session, url: url, method: "POST", handle: self.management.managementObjects, payload: payload, headers: self.management.defaultHeaders, logger: self.logger, telemetry: self.telemetry)
}

/**
Expand All @@ -241,7 +242,7 @@ public struct Users: Trackable {
public func unlink(identityId identityId: String, provider: String, fromUserId identifier: String) -> Request<[Management.Object], ManagementError> {
let identityPath = "/api/v2/users/\(identifier)/identities/\(provider)/\(identityId)"
let url = components(self.management.url, path: identityPath).URL!
return Request(session: self.management.session, url: url, method: "DELETE", handle: self.management.managementObjects, headers: self.management.defaultHeaders, telemetry: self.telemetry)
return Request(session: self.management.session, url: url, method: "DELETE", handle: self.management.managementObjects, headers: self.management.defaultHeaders, logger: self.logger, telemetry: self.telemetry)
}
}

Expand Down
2 changes: 1 addition & 1 deletion Auth0/Networking/Request.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public struct Request<T, E: Auth0Error>: Requestable {
let logger: Logger?
let telemetry: Telemetry

init(session: NSURLSession, url: NSURL, method: String, handle: (Response<E>, Callback) -> (), payload: [String: AnyObject] = [:], headers: [String: String] = [:], logger: Logger? = Auth0Logger.sharedInstance.logger, telemetry: Telemetry) {
init(session: NSURLSession, url: NSURL, method: String, handle: (Response<E>, Callback) -> (), payload: [String: AnyObject] = [:], headers: [String: String] = [:], logger: Logger?, telemetry: Telemetry) {
self.session = session
self.url = url
self.method = method
Expand Down
Loading