Skip to content

Commit

Permalink
add blockForCallbackURLQueryParams to OAuth2
Browse files Browse the repository at this point in the history
  • Loading branch information
noppoMan committed Aug 31, 2017
1 parent 5a8419c commit 8e6492a
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 20 deletions.
4 changes: 2 additions & 2 deletions Sources/HexavilleAuth/HexavilleAuth+Router.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,13 @@ extension HexavilleAuth {
return Response(
status: .found,
headers: [
"Location": try provider.createAuthorizeURL().absoluteString
"Location": try provider.createAuthorizeURL(withCallbackURLQueryItems: request.queryItems).absoluteString
]
)
}

router.use(.get, provider.oauth.callbackURL.path) { request, context in
let (cred, user) = try provider.authorize(request: request)
let (cred, user) = try provider.authorize(for: request)
context.session?[AuthenticationMiddleware.sessionKey] = user.serialize()
return try provider.callback(cred, user, request, context)
}
Expand Down
10 changes: 6 additions & 4 deletions Sources/HexavilleAuth/OAuth/OAuth2.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,26 +20,28 @@ public class OAuth2 {
var accessTokenURL: String?
let responseType: String
let callbackURL: CallbackURL
let blockForCallbackURLQueryParams: ((Request) -> [URLQueryItem])?
let scope: String

public init(consumerKey: String, consumerSecret: String, authorizeURL: String, accessTokenURL: String? = nil, responseType: String = "code", callbackURL: CallbackURL, scope: String) {
public init(consumerKey: String, consumerSecret: String, authorizeURL: String, accessTokenURL: String? = nil, responseType: String = "code", callbackURL: CallbackURL, blockForCallbackURLQueryParams: ((Request) -> [URLQueryItem])? = nil, scope: String) {
self.consumerKey = consumerKey
self.consumerSecret = consumerSecret
self.authorizeURL = authorizeURL
self.accessTokenURL = accessTokenURL
self.responseType = responseType
self.scope = scope
self.blockForCallbackURLQueryParams = blockForCallbackURLQueryParams
self.callbackURL = callbackURL
}

private func dictionary2Query(_ dict: [String: String]) -> String {
return dict.map({ "\($0.key)=\($0.value)" }).joined(separator: "&")
}

public func createAuthorizeURL() throws -> URL {
public func createAuthorizeURL(withCallbackURLQueryItems queryItems: [URLQueryItem]) throws -> URL {
let params = [
"client_id": consumerKey,
"redirect_uri": callbackURL.absoluteURL()!.absoluteString,
"redirect_uri": callbackURL.absoluteURL(withQueryItems: queryItems)!.absoluteString,
"response_type": responseType,
"scope": scope
]
Expand All @@ -53,7 +55,7 @@ public class OAuth2 {
return url
}

public func getAccessToken(request: Request) throws -> Credential {
public func getAccessToken(for request: Request) throws -> Credential {
guard let code = request.queryItems.filter({ $0.name == "code" }).first?.value else {
throw HexavilleAuthError.codeIsMissingInResponseParameters
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ public struct FacebookAuthorizationProvider: OAuth2AuthorizationProvidable {
self.callback = callback
}

public func authorize(request: Request) throws -> (Credential, LoginUser) {
let credential = try self.getAccessToken(request: request)
public func authorize(for request: Request) throws -> (Credential, LoginUser) {
let credential = try self.getAccessToken(for: request)

let request = Request(
method: .get,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ public struct GithubAuthorizationProvider: OAuth2AuthorizationProvidable {
self.callback = callback
}

public func authorize(request: Request) throws -> (Credential, LoginUser) {
let credential = try self.getAccessToken(request: request)
public func authorize(for request: Request) throws -> (Credential, LoginUser) {
let credential = try self.getAccessToken(for: request)

let request = Request(
method: .get,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ public struct GoogleAuthorizationProvider: OAuth2AuthorizationProvidable {

// TODO:
// not implemented yet
public func authorize(request: Request) throws -> (Credential, LoginUser) {
let credential = try self.getAccessToken(request: request)
public func authorize(for request: Request) throws -> (Credential, LoginUser) {
let credential = try self.getAccessToken(for: request)
let user = LoginUser(id: "", name: "")
return (credential, user)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ public struct InstagramAuthorizationProvider: OAuth2AuthorizationProvidable {

// TODO:
// not implemented yet
public func authorize(request: Request) throws -> (Credential, LoginUser) {
let credential = try self.getAccessToken(request: request)
public func authorize(for request: Request) throws -> (Credential, LoginUser) {
let credential = try self.getAccessToken(for: request)
let user = LoginUser(id: "", name: "")
return (credential, user)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,16 @@ public protocol OAuth2AuthorizationProvidable {
var oauth: OAuth2 { get }
var callback: RespodWithCredential { get }
init(path: String, consumerKey: String, consumerSecret: String, callbackURL: CallbackURL, scope: String, callback: @escaping RespodWithCredential)
func getAccessToken(request: Request) throws -> Credential
func authorize(request: Request) throws -> (Credential, LoginUser)
func getAccessToken(for: Request) throws -> Credential
func authorize(for: Request) throws -> (Credential, LoginUser)
}

extension OAuth2AuthorizationProvidable {
public func createAuthorizeURL() throws -> URL {
return try oauth.createAuthorizeURL()
public func createAuthorizeURL(withCallbackURLQueryItems queryItems: [URLQueryItem]) throws -> URL {
return try oauth.createAuthorizeURL(withCallbackURLQueryItems: queryItems)
}

public func getAccessToken(request: Request) throws -> Credential {
return try self.oauth.getAccessToken(request: request)
public func getAccessToken(for request: Request) throws -> Credential {
return try self.oauth.getAccessToken(for: request)
}
}

0 comments on commit 8e6492a

Please sign in to comment.