Skip to content

Commit

Permalink
Merge pull request #100 from trivago/feature/fix-obcj-compatibility
Browse files Browse the repository at this point in the history
Make OAuthAccessTokenParser objc compatible
  • Loading branch information
bckr authored Oct 19, 2016
2 parents b2ddc75 + 59f16de commit ff6a82b
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 18 deletions.
5 changes: 3 additions & 2 deletions Heimdallr/Core/Heimdallr.swift
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public let HeimdallrErrorNotAuthorized = 2
///
/// - returns: A new client initialized with the given token endpoint URL,
/// credentials and access token store.
public init(tokenURL: NSURL, credentials: OAuthClientCredentials? = nil, accessTokenStore: OAuthAccessTokenStore = OAuthAccessTokenKeychainStore(), accessTokenParser: OAuthAccessTokenParser = OAuthAccessTokenDefaultParser(), httpClient: HeimdallrHTTPClient = HeimdallrHTTPClientNSURLSession(), resourceRequestAuthenticator: HeimdallResourceRequestAuthenticator = HeimdallResourceRequestAuthenticatorHTTPAuthorizationHeader()) {
@objc public init(tokenURL: NSURL, credentials: OAuthClientCredentials? = nil, accessTokenStore: OAuthAccessTokenStore = OAuthAccessTokenKeychainStore(), accessTokenParser: OAuthAccessTokenParser = OAuthAccessTokenDefaultParser(), httpClient: HeimdallrHTTPClient = HeimdallrHTTPClientNSURLSession(), resourceRequestAuthenticator: HeimdallResourceRequestAuthenticator = HeimdallResourceRequestAuthenticatorHTTPAuthorizationHeader()) {
self.tokenURL = tokenURL
self.credentials = credentials
self.accessTokenStore = accessTokenStore
Expand Down Expand Up @@ -143,7 +143,8 @@ public let HeimdallrErrorNotAuthorized = 2
if let error = error {
completion(.Failure(error))
} else if (response as! NSHTTPURLResponse).statusCode == 200 {
switch self.accessTokenParser.parse(data!) {
let accessTokenResult = materialize { try self.accessTokenParser.parse(data!) }
switch accessTokenResult {
case let .Success(accessToken):
self.accessToken = accessToken
completion(.Success(accessToken))
Expand Down
17 changes: 7 additions & 10 deletions Heimdallr/Core/OAuthAccessTokenDefaultParser.swift
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
import Foundation
import Result

@objc
public class OAuthAccessTokenDefaultParser: NSObject, OAuthAccessTokenParser {
public func parse(data: NSData) -> Result<OAuthAccessToken, NSError> {

if let token = OAuthAccessToken.decode(data: data) {
return .Success(token)
} else {
let error = NSError(domain: HeimdallrErrorDomain, code: HeimdallrErrorInvalidData, userInfo: nil)
return .Failure(error)
@objc public class OAuthAccessTokenDefaultParser: NSObject, OAuthAccessTokenParser {
public func parse(data: NSData) throws -> OAuthAccessToken {

guard let token = OAuthAccessToken.decode(data: data) else {
throw NSError(domain: HeimdallrErrorDomain, code: HeimdallrErrorInvalidData, userInfo: nil)
}

return token
}
}

4 changes: 2 additions & 2 deletions Heimdallr/Core/OAuthAccessTokenParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ import Foundation
import Result

/// An access token parser that can be used by Heimdallr.
public protocol OAuthAccessTokenParser {
func parse(data: NSData) -> Result<OAuthAccessToken, NSError>
@objc public protocol OAuthAccessTokenParser {
func parse(data: NSData) throws -> OAuthAccessToken
}
8 changes: 4 additions & 4 deletions HeimdallrTests/Core/HeimdallrSpec.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,20 +43,20 @@ class OAuthAccessTokenInterceptorParser: OAuthAccessTokenParser {
interceptError = error
}

func parse(data: NSData) -> Result<OAuthAccessToken, NSError> {
@objc func parse(data: NSData) throws -> OAuthAccessToken {

timesCalled += 1

if self.shouldIntercept {
if let accessToken = self.interceptToken {
return .Success(accessToken)
return accessToken
} else if let error = self.interceptError {
return .Failure(error)
throw error
} else {
fatalError("Missing intercept token or error")
}
} else {
return defaultParser.parse(data)
return try defaultParser.parse(data)
}
}

Expand Down

0 comments on commit ff6a82b

Please sign in to comment.