From 16eea6edad644592638a54817ebc76e01b3dd06e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ralph=20K=C3=BCpper?= Date: Thu, 12 Oct 2023 15:37:02 +0200 Subject: [PATCH 1/9] async/await Signed-off-by: wibe --- .../Services/DeviantArt/DeviantArt.swift | 4 +- .../DeviantArt/DeviantArtRouter.swift | 50 ++++++++-------- Sources/Imperial/Services/Imgur/Imgur.swift | 4 +- .../Imperial/Services/Imgur/ImgurRouter.swift | 10 ++-- .../Services/Microsoft/Microsoft.swift | 4 +- .../Services/Microsoft/MicrosoftRouter.swift | 10 ++-- .../Imperial/Services/Mixcloud/Mixcloud.swift | 2 +- .../Services/Mixcloud/MixcloudRouter.swift | 8 +-- Sources/ImperialAuth0/Auth0.swift | 10 ++-- Sources/ImperialAuth0/Auth0Router.swift | 6 +- .../Routing/FederatedServiceRouter.swift | 57 ++++++++----------- Sources/ImperialCore/ServiceRegister.swift | 16 +++--- .../Services/FederatedService.swift | 2 +- Sources/ImperialDiscord/Discord.swift | 8 +-- Sources/ImperialDiscord/DiscordRouter.swift | 7 ++- Sources/ImperialDropbox/Dropbox.swift | 10 ++-- Sources/ImperialDropbox/DropboxRouter.swift | 7 ++- Sources/ImperialFacebook/Facebook.swift | 8 +-- Sources/ImperialFacebook/FacebookRouter.swift | 6 +- Sources/ImperialGitHub/GitHub.swift | 10 ++-- .../ImperialGitHub/GitHubCallbackBody.swift | 2 +- Sources/ImperialGitHub/GitHubRouter.swift | 7 +-- Sources/ImperialGitlab/Gitlab.swift | 10 ++-- Sources/ImperialGitlab/GitlabRouter.swift | 6 +- Sources/ImperialGoogle/JWT/GoogleJWT.swift | 10 ++-- .../ImperialGoogle/JWT/GoogleJWTRouter.swift | 22 +++---- Sources/ImperialGoogle/Standard/Google.swift | 8 +-- .../Standard/GoogleRouter.swift | 6 +- Sources/ImperialKeycloak/Keycloak.swift | 10 ++-- Sources/ImperialKeycloak/KeycloakRouter.swift | 6 +- Sources/ImperialMicrosoft/Microsoft.swift | 10 ++-- .../ImperialMicrosoft/MicrosoftRouter.swift | 8 +-- Sources/ImperialShopify/Shopify.swift | 10 ++-- Sources/ImperialShopify/ShopifyRouter.swift | 31 +++++----- 34 files changed, 183 insertions(+), 202 deletions(-) diff --git a/Sources/Imperial/Services/DeviantArt/DeviantArt.swift b/Sources/Imperial/Services/DeviantArt/DeviantArt.swift index 239a3de..47048e2 100644 --- a/Sources/Imperial/Services/DeviantArt/DeviantArt.swift +++ b/Sources/Imperial/Services/DeviantArt/DeviantArt.swift @@ -8,10 +8,10 @@ public class DeviantArt: FederatedService { public required init( router: Router, authenticate: String, - authenticateCallback: ((Request)throws -> (Future))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String] = [], - completion: @escaping (Request, String)throws -> (Future) + completion: @escaping (Request, String) async throws -> Response) ) throws { self.router = try DeviantArtRouter(callback: callback, completion: completion) self.tokens = self.router.tokens diff --git a/Sources/Imperial/Services/DeviantArt/DeviantArtRouter.swift b/Sources/Imperial/Services/DeviantArt/DeviantArtRouter.swift index 66e8dd9..e38b3ee 100644 --- a/Sources/Imperial/Services/DeviantArt/DeviantArtRouter.swift +++ b/Sources/Imperial/Services/DeviantArt/DeviantArtRouter.swift @@ -3,12 +3,12 @@ import Foundation public class DeviantArtRouter: FederatedServiceRouter { public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String)throws -> (Future) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public var callbackURL: String public let accessTokenURL: String = "https://www.deviantart.com/oauth2/token" - public required init(callback: String, completion: @escaping (Request, String)throws -> (Future)) throws { + public required init(callback: String, completion: @escaping (Request, String)async throws -> Response) throws { self.tokens = try DeviantArtAuth() self.callbackURL = callback self.callbackCompletion = completion @@ -27,7 +27,7 @@ public class DeviantArtRouter: FederatedServiceRouter { "response_type=code" } - public func fetchToken(from request: Request)throws -> Future { + public func fetchToken(from request: Request) async throws -> String { let code: String if let queryCode: String = try request.query.get(at: "code") { code = queryCode @@ -38,35 +38,33 @@ public class DeviantArtRouter: FederatedServiceRouter { } let body = DeviantArtCallbackBody(code: code, clientId: self.tokens.clientID, clientSecret: self.tokens.clientSecret, redirectURI: self.callbackURL) - return try body.encode(using: request).flatMap(to: Response.self) { request in - guard let url = URL(string: self.accessTokenURL) else { - throw Abort(.internalServerError, reason: "Unable to convert String '\(self.accessTokenURL)' to URL") - } - request.http.method = .POST - request.http.url = url - return try request.make(Client.self).send(request) - }.flatMap(to: String.self) { response in - let session = try request.session() + let requestBody = try await body.encode(using: request) + guard let url = URL(string: self.accessTokenURL) else { + throw Abort(.internalServerError, reason: "Unable to convert String '\(self.accessTokenURL)' to URL") + } + requestBody.http.method = .POST + requestBody.http.url = url + let response = try await requestBody.make(Client.self).send(request) + let session = try request.session() - return response.content.get(String.self, at: ["refresh_token"]) - .flatMap { refresh in - session.setRefreshToken(refresh) + return response.content.get(String.self, at: ["refresh_token"]) + .flatMap { refresh in + session.setRefreshToken(refresh) - return response.content.get(String.self, at: ["access_token"]) - } + return response.content.get(String.self, at: ["access_token"]) } + } - public func callback(_ request: Request)throws -> Future { - return try self.fetchToken(from: request).flatMap(to: ResponseEncodable.self) { accessToken in - let session = try request.session() + public func callback(_ request: Request) async throws -> Response { + let accessToken = try await self.fetchToken(from: request) + let session = try request.session() - session.setAccessToken(accessToken) - try session.set("access_token_service", to: OAuthService.deviantart) + session.setAccessToken(accessToken) + try session.set("access_token_service", to: OAuthService.deviantart) - return try self.callbackCompletion(request, accessToken) - }.flatMap(to: Response.self) { response in - return try response.encode(for: request) - } + let response = try await self.callbackCompletion(request, accessToken) + return try response.encode(for: request) + } } diff --git a/Sources/Imperial/Services/Imgur/Imgur.swift b/Sources/Imperial/Services/Imgur/Imgur.swift index 17e360e..296bf1f 100644 --- a/Sources/Imperial/Services/Imgur/Imgur.swift +++ b/Sources/Imperial/Services/Imgur/Imgur.swift @@ -8,10 +8,10 @@ public class Imgur: FederatedService { public required init( router: Router, authenticate: String, - authenticateCallback: ((Request)throws -> (Future))?, + authenticateCallback: ((Request) async throws -> Void?, callback: String, scope: [String] = [], - completion: @escaping (Request, String)throws -> (Future) + completion: @escaping (Request, String) async throws -> Response ) throws { self.router = try ImgurRouter(callback: callback, completion: completion) self.tokens = self.router.tokens diff --git a/Sources/Imperial/Services/Imgur/ImgurRouter.swift b/Sources/Imperial/Services/Imgur/ImgurRouter.swift index 52e3756..7f2b751 100644 --- a/Sources/Imperial/Services/Imgur/ImgurRouter.swift +++ b/Sources/Imperial/Services/Imgur/ImgurRouter.swift @@ -3,12 +3,12 @@ import Foundation public class ImgurRouter: FederatedServiceRouter { public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String)throws -> (Future) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public var callbackURL: String public let accessTokenURL: String = "https://api.imgur.com/oauth2/token" - public required init(callback: String, completion: @escaping (Request, String)throws -> (Future)) throws { + public required init(callback: String, completion: @escaping (Request, String) async throws -> Response) throws { self.tokens = try ImgurAuth() self.callbackURL = callback self.callbackCompletion = completion @@ -20,7 +20,7 @@ public class ImgurRouter: FederatedServiceRouter { "response_type=code" } - public func fetchToken(from request: Request)throws -> Future { + public func fetchToken(from request: Request) async throws -> String { let code: String if let queryCode: String = try request.query.get(at: "code") { code = queryCode @@ -50,8 +50,8 @@ public class ImgurRouter: FederatedServiceRouter { } } - public func callback(_ request: Request)throws -> Future { - return try self.fetchToken(from: request).flatMap(to: ResponseEncodable.self) { accessToken in + public func callback(_ request: Request) async throws -> Response { + return try self.fetchToken(from: request).flatMap(to: Response.self) { accessToken in let session = try request.session() session.setAccessToken(accessToken) diff --git a/Sources/Imperial/Services/Microsoft/Microsoft.swift b/Sources/Imperial/Services/Microsoft/Microsoft.swift index 2279eaa..0f11498 100644 --- a/Sources/Imperial/Services/Microsoft/Microsoft.swift +++ b/Sources/Imperial/Services/Microsoft/Microsoft.swift @@ -8,10 +8,10 @@ public class Microsoft: FederatedService { public required init( router: Router, authenticate: String, - authenticateCallback: ((Request)throws -> (Future))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String] = [], - completion: @escaping (Request, String)throws -> (Future) + completion: @escaping (Request, String) async throws -> Response ) throws { self.router = try MicrosoftRouter(callback: callback, completion: completion) self.tokens = self.router.tokens diff --git a/Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift b/Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift index 2e6ec45..1878a44 100644 --- a/Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift +++ b/Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift @@ -5,7 +5,7 @@ public class MicrosoftRouter: FederatedServiceRouter { public static var tenantIDEnvKey: String = "MICROSOFT_TENANT_ID" public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String)throws -> (Future) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public let callbackURL: String public var tenantID: String { Environment.get(MicrosoftRouter.tenantIDEnvKey) ?? "common" } @@ -13,7 +13,7 @@ public class MicrosoftRouter: FederatedServiceRouter { public required init( callback: String, - completion: @escaping (Request, String) throws -> (Future) + completion: @escaping (Request, String) assync throws -> Response ) throws { self.tokens = try MicrosoftAuth() self.callbackURL = callback @@ -30,7 +30,7 @@ public class MicrosoftRouter: FederatedServiceRouter { + "prompt=consent" } - public func fetchToken(from request: Request)throws -> Future { + public func fetchToken(from request: Request) async throws -> String { let code: String if let queryCode: String = try request.query.get(at: "code") { @@ -66,8 +66,8 @@ public class MicrosoftRouter: FederatedServiceRouter { } } - public func callback(_ request: Request)throws -> Future { - return try self.fetchToken(from: request).flatMap(to: ResponseEncodable.self) { accessToken in + public func callback(_ request: Request) async throws -> Response { + return try self.fetchToken(from: request).flatMap(to: Response.self) { accessToken in let session = try request.session() session.setAccessToken(accessToken) diff --git a/Sources/Imperial/Services/Mixcloud/Mixcloud.swift b/Sources/Imperial/Services/Mixcloud/Mixcloud.swift index 5396a32..7c03c2f 100644 --- a/Sources/Imperial/Services/Mixcloud/Mixcloud.swift +++ b/Sources/Imperial/Services/Mixcloud/Mixcloud.swift @@ -13,7 +13,7 @@ public class Mixcloud: FederatedService { authenticateCallback: ((Request)throws -> (Future))?, callback: String, scope: [String] = [], - completion: @escaping (Request, String)throws -> (Future) + completion: @escaping (Request, String) async throws -> Response ) throws { self.router = try MixcloudRouter(callback: callback, completion: completion) self.tokens = self.router.tokens diff --git a/Sources/Imperial/Services/Mixcloud/MixcloudRouter.swift b/Sources/Imperial/Services/Mixcloud/MixcloudRouter.swift index 5f832a7..3d51dfc 100644 --- a/Sources/Imperial/Services/Mixcloud/MixcloudRouter.swift +++ b/Sources/Imperial/Services/Mixcloud/MixcloudRouter.swift @@ -3,12 +3,12 @@ import Foundation public class MixcloudRouter: FederatedServiceRouter { public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String)throws -> (Future) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public var callbackURL: String public let accessTokenURL: String = "https://www.mixcloud.com/oauth/access_token" - public required init(callback: String, completion: @escaping (Request, String)throws -> (Future)) throws { + public required init(callback: String, completion: @escaping (Request, String) async throws -> Response) throws { self.tokens = try MixcloudAuth() self.callbackURL = callback self.callbackCompletion = completion @@ -20,7 +20,7 @@ public class MixcloudRouter: FederatedServiceRouter { "redirect_uri=\(self.callbackURL)" } - public func fetchToken(from request: Request)throws -> Future { + public func fetchToken(from request: Request) async throws -> String { let code: String if let queryCode: String = try request.query.get(at: "code") { code = queryCode @@ -40,7 +40,7 @@ public class MixcloudRouter: FederatedServiceRouter { } } - public func callback(_ request: Request)throws -> Future { + public func callback(_ request: Request) async throws -> Response { return try self.fetchToken(from: request).flatMap(to: ResponseEncodable.self) { accessToken in let session = try request.session() diff --git a/Sources/ImperialAuth0/Auth0.swift b/Sources/ImperialAuth0/Auth0.swift index b9c0794..8c484c8 100644 --- a/Sources/ImperialAuth0/Auth0.swift +++ b/Sources/ImperialAuth0/Auth0.swift @@ -9,16 +9,16 @@ public class Auth0: FederatedService { public required init( routes: RoutesBuilder, authenticate: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String] = [], - completion: @escaping (Request, String) throws -> (EventLoopFuture) - ) throws { - self.router = try Auth0Router(callback: callback, completion: completion) + completion: @escaping (Request, String) async throws -> Response + ) async throws { + self.router = try await Auth0Router(callback: callback, completion: completion) self.tokens = self.router.tokens self.router.scope = scope - try self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) + try await self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) OAuthService.register(.auth0) } diff --git a/Sources/ImperialAuth0/Auth0Router.swift b/Sources/ImperialAuth0/Auth0Router.swift index d806408..9dcf9b8 100644 --- a/Sources/ImperialAuth0/Auth0Router.swift +++ b/Sources/ImperialAuth0/Auth0Router.swift @@ -5,7 +5,7 @@ public class Auth0Router: FederatedServiceRouter { public let baseURL: String public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String) throws -> (EventLoopFuture) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [ ] public var requiredScopes = [ "openid" ] public let callbackURL: String @@ -17,7 +17,7 @@ public class Auth0Router: FederatedServiceRouter { return self.baseURL.finished(with: "/") + path } - public required init(callback: String, completion: @escaping (Request, String) throws -> (EventLoopFuture)) throws { + public required init(callback: String, completion: @escaping (Request, String) async throws -> Response) async throws { let auth = try Auth0Auth() self.tokens = auth self.baseURL = "https://\(auth.domain)" @@ -45,7 +45,7 @@ public class Auth0Router: FederatedServiceRouter { return rtn } - public func callbackBody(with code: String) -> ResponseEncodable { + public func callbackBody(with code: String) -> any Content { Auth0CallbackBody(clientId: self.tokens.clientID, clientSecret: self.tokens.clientSecret, code: code, diff --git a/Sources/ImperialCore/Routing/FederatedServiceRouter.swift b/Sources/ImperialCore/Routing/FederatedServiceRouter.swift index 623a460..3d951b5 100644 --- a/Sources/ImperialCore/Routing/FederatedServiceRouter.swift +++ b/Sources/ImperialCore/Routing/FederatedServiceRouter.swift @@ -10,7 +10,7 @@ public protocol FederatedServiceRouter { /// The callback that is fired after the access token is fetched from the OAuth provider. /// The response that is returned from this callback is also returned from the callback route. - var callbackCompletion: (Request, String) throws -> (EventLoopFuture) { get } + var callbackCompletion: (Request, String) async throws -> Response { get } /// The scopes to get permission for when getting the access token. /// Usage of this property varies by provider. @@ -43,7 +43,7 @@ public protocol FederatedServiceRouter { /// - callback: The callback URL that the OAuth provider will redirect to after authenticating the user. /// - completion: The completion handler that will be fired at the end of the `callback` route. The access token is passed into it. /// - Throws: Any errors that could occur in the implementation. - init(callback: String, completion: @escaping (Request, String) throws -> (EventLoopFuture)) throws + init(callback: String, completion: @escaping (Request, String) async throws -> Response) async throws /// Configures the `authenticate` and `callback` routes with the droplet. /// @@ -51,24 +51,24 @@ public protocol FederatedServiceRouter { /// - authURL: The URL for the route that will redirect the user to the OAuth provider. /// - authenticateCallback: Execute custom code within the authenticate closure before redirection. /// - Throws: N/A - func configureRoutes(withAuthURL authURL: String, authenticateCallback: ((Request) throws -> (EventLoopFuture))?, on router: RoutesBuilder) throws + func configureRoutes(withAuthURL authURL: String, authenticateCallback: ((Request) async throws -> Void)?, on router: RoutesBuilder) async throws /// Gets an access token from an OAuth provider. /// This method is the main body of the `callback` handler. /// /// - Parameters: request: The request for the route /// this method is called in. - func fetchToken(from request: Request) throws -> EventLoopFuture + func fetchToken(from request: Request) async throws -> String /// Creates CallbackBody with authorization code - func callbackBody(with code: String) -> ResponseEncodable + func callbackBody(with code: String) -> any Content /// The route that the OAuth provider calls when the user has been authenticated. /// /// - Parameter request: The request from the OAuth provider. /// - Returns: A response that should redirect the user back to the app. /// - Throws: An errors that occur in the implementation code. - func callback(_ request: Request) throws -> EventLoopFuture + func callback(_ request: Request) async throws -> Response } extension FederatedServiceRouter { @@ -77,20 +77,19 @@ extension FederatedServiceRouter { public var errorKey: String { "error" } public var callbackHeaders: HTTPHeaders { [:] } - public func configureRoutes(withAuthURL authURL: String, authenticateCallback: ((Request) throws -> (EventLoopFuture))?, on router: RoutesBuilder) throws { - router.get(callbackURL.pathComponents, use: callback) - router.get(authURL.pathComponents) { req -> EventLoopFuture in + public func configureRoutes(withAuthURL authURL: String, authenticateCallback: ((Request) async throws -> Void)?, on router: RoutesBuilder) async throws { + router.get(callbackURL.pathComponents, use: self.callback) + router.get(authURL.pathComponents) { req async throws -> Response in let redirect: Response = req.redirect(to: try self.authURL(req)) guard let authenticateCallback = authenticateCallback else { - return req.eventLoop.makeSucceededFuture(redirect) - } - return try authenticateCallback(req).map { return redirect } + try await authenticateCallback(req) + return redirect } } - public func fetchToken(from request: Request) throws -> EventLoopFuture { + public func fetchToken(from request: Request) async throws -> String { let code: String if let queryCode: String = try request.query.get(at: codeKey) { code = queryCode @@ -100,31 +99,21 @@ extension FederatedServiceRouter { throw Abort(.badRequest, reason: "Missing 'code' key in URL query") } - let body = callbackBody(with: code) let url = URI(string: accessTokenURL) + let body = try JSONEncoder().encode(callbackBody(with: code)) - return body.encodeResponse(for: request) - .map { $0.body.buffer } - .flatMap { buffer in - return request.client.post(url, headers: self.callbackHeaders) { $0.body = buffer } - }.flatMapThrowing { response in - return try response.content.get(String.self, at: ["access_token"]) - } + let response = try await request.client.post(url, headers: self.callbackHeaders, beforeSend: { r in + r.body = ByteBuffer(data: body) + }) + return try response.content.get(String.self, at: ["access_token"]) } - public func callback(_ request: Request) throws -> EventLoopFuture { - return try self.fetchToken(from: request).flatMap { accessToken in - let session = request.session - do { - try session.setAccessToken(accessToken) - try session.set("access_token_service", to: self.service) - return try self.callbackCompletion(request, accessToken).flatMap { response in - return response.encodeResponse(for: request) - } - } catch { - return request.eventLoop.makeFailedFuture(error) - } - } + public func callback(_ request: Request) async throws -> Response { + let accessToken = try await self.fetchToken(from: request) + let session = request.session + try session.setAccessToken(accessToken) + try session.set("access_token_service", to: self.service) + return try await self.callbackCompletion(request, accessToken) } } diff --git a/Sources/ImperialCore/ServiceRegister.swift b/Sources/ImperialCore/ServiceRegister.swift index 3de41f1..83c645e 100644 --- a/Sources/ImperialCore/ServiceRegister.swift +++ b/Sources/ImperialCore/ServiceRegister.swift @@ -17,12 +17,12 @@ extension RoutesBuilder { public func oAuth( from provider: OAuthProvider.Type, authenticate authUrl: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))? = nil, + authenticateCallback: ((Request) async throws -> Void)? = nil, callback: String, scope: [String] = [], - completion: @escaping (Request, String) throws -> EventLoopFuture - ) throws where OAuthProvider: FederatedService { - _ = try OAuthProvider( + completion: @escaping (Request, String) async throws -> Response + ) async throws where OAuthProvider: FederatedService { + _ = try await OAuthProvider( routes: self, authenticate: authUrl, authenticateCallback: authenticateCallback, @@ -46,14 +46,14 @@ extension RoutesBuilder { public func oAuth( from provider: OAuthProvider.Type, authenticate authUrl: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))? = nil, + authenticateCallback: ((Request) async throws -> Void)? = nil, callback: String, scope: [String] = [], redirect redirectURL: String - ) throws where OAuthProvider: FederatedService { - try self.oAuth(from: OAuthProvider.self, authenticate: authUrl, authenticateCallback: authenticateCallback, callback: callback, scope: scope) { (request, _) in + ) async throws where OAuthProvider: FederatedService { + try await self.oAuth(from: OAuthProvider.self, authenticate: authUrl, authenticateCallback: authenticateCallback, callback: callback, scope: scope) { (request, _) in let redirect: Response = request.redirect(to: redirectURL) - return request.eventLoop.makeSucceededFuture(redirect) + return redirect } } } diff --git a/Sources/ImperialCore/Services/FederatedService.swift b/Sources/ImperialCore/Services/FederatedService.swift index 12e4d7e..8a06652 100644 --- a/Sources/ImperialCore/Services/FederatedService.swift +++ b/Sources/ImperialCore/Services/FederatedService.swift @@ -42,5 +42,5 @@ public protocol FederatedService { /// - scope: The scopes to send to the provider to request access to. /// - completion: The completion handler that will fire at the end of the callback route. The access token is passed into the callback and the response that is returned will be returned from the callback route. This will usually be a redirect back to the app. /// - Throws: Any errors that occur in the implementation. - init(routes: RoutesBuilder, authenticate: String, authenticateCallback: ((Request) throws -> (EventLoopFuture))?, callback: String, scope: [String], completion: @escaping (Request, String) throws -> (EventLoopFuture)) throws + init(routes: RoutesBuilder, authenticate: String, authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String], completion: @escaping (Request, String) async throws -> Response) async throws } diff --git a/Sources/ImperialDiscord/Discord.swift b/Sources/ImperialDiscord/Discord.swift index fa2db84..2e6f744 100644 --- a/Sources/ImperialDiscord/Discord.swift +++ b/Sources/ImperialDiscord/Discord.swift @@ -9,16 +9,16 @@ public class Discord: FederatedService { public required init( routes: RoutesBuilder, authenticate: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String] = [], - completion: @escaping (Request, String) throws -> (EventLoopFuture) - ) throws { + completion: @escaping (Request, String) async throws -> Response + ) async throws { self.router = try DiscordRouter(callback: callback, completion: completion) self.tokens = self.router.tokens self.router.scope = scope - try self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) + try await self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) OAuthService.register(.discord) } diff --git a/Sources/ImperialDiscord/DiscordRouter.swift b/Sources/ImperialDiscord/DiscordRouter.swift index 6932a86..2958d96 100644 --- a/Sources/ImperialDiscord/DiscordRouter.swift +++ b/Sources/ImperialDiscord/DiscordRouter.swift @@ -2,18 +2,19 @@ import Vapor import Foundation public class DiscordRouter: FederatedServiceRouter { + public static var baseURL: String = "https://discord.com/" public static var callbackURL: String = "callback" public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String) throws -> (EventLoopFuture) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public let callbackURL: String public let accessTokenURL: String = "\(DiscordRouter.baseURL.finished(with: "/"))api/oauth2/token" public let service: OAuthService = .discord public let callbackHeaders = HTTPHeaders([("Content-Type", "application/x-www-form-urlencoded")]) - public required init(callback: String, completion: @escaping (Request, String) throws -> (EventLoopFuture)) throws { + public required init(callback: String, completion: @escaping (Request, String) async throws -> Response) throws { self.tokens = try DiscordAuth() self.callbackURL = callback self.callbackCompletion = completion @@ -39,7 +40,7 @@ public class DiscordRouter: FederatedServiceRouter { return url.absoluteString } - public func callbackBody(with code: String) -> ResponseEncodable { + public func callbackBody(with code: String) -> any Content { return DiscordCallbackBody( clientId: tokens.clientID, clientSecret: tokens.clientSecret, diff --git a/Sources/ImperialDropbox/Dropbox.swift b/Sources/ImperialDropbox/Dropbox.swift index 667f7d9..31be38f 100644 --- a/Sources/ImperialDropbox/Dropbox.swift +++ b/Sources/ImperialDropbox/Dropbox.swift @@ -2,6 +2,8 @@ import Vapor public class Dropbox: FederatedService { + + public var tokens: FederatedServiceTokens public var router: FederatedServiceRouter @@ -9,16 +11,16 @@ public class Dropbox: FederatedService { public required init( routes: RoutesBuilder, authenticate: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String] = [], - completion: @escaping (Request, String) throws -> (EventLoopFuture) - ) throws { + completion: @escaping (Request, String) async throws -> Response + ) async throws { self.router = try DropboxRouter(callback: callback, completion: completion) self.tokens = self.router.tokens self.router.scope = scope - try self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) + try await self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) OAuthService.register(.dropbox) } diff --git a/Sources/ImperialDropbox/DropboxRouter.swift b/Sources/ImperialDropbox/DropboxRouter.swift index 78d6ab8..eeb7a81 100644 --- a/Sources/ImperialDropbox/DropboxRouter.swift +++ b/Sources/ImperialDropbox/DropboxRouter.swift @@ -2,8 +2,9 @@ import Vapor import Foundation public class DropboxRouter: FederatedServiceRouter { + public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String) throws -> (EventLoopFuture) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public let callbackURL: String public let accessTokenURL: String = "https://api.dropboxapi.com/oauth2/token" @@ -17,7 +18,7 @@ public class DropboxRouter: FederatedServiceRouter { public let service: OAuthService = .dropbox - public required init(callback: String, completion: @escaping (Request, String) throws -> (EventLoopFuture)) throws { + public required init(callback: String, completion: @escaping (Request, String) async throws -> Response) throws { self.tokens = try DropboxAuth() self.callbackURL = callback self.callbackCompletion = completion @@ -42,7 +43,7 @@ public class DropboxRouter: FederatedServiceRouter { return url.absoluteString } - public func callbackBody(with code: String) -> ResponseEncodable { + public func callbackBody(with code: String) -> any Content { DropboxCallbackBody(code: code, redirectURI: callbackURL) } diff --git a/Sources/ImperialFacebook/Facebook.swift b/Sources/ImperialFacebook/Facebook.swift index 41fdde7..912237a 100644 --- a/Sources/ImperialFacebook/Facebook.swift +++ b/Sources/ImperialFacebook/Facebook.swift @@ -9,16 +9,16 @@ public class Facebook: FederatedService { public required init( routes: RoutesBuilder, authenticate: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String] = [], - completion: @escaping (Request, String) throws -> (EventLoopFuture) - ) throws { + completion: @escaping (Request, String) async throws -> Response + ) async throws { self.router = try FacebookRouter(callback: callback, completion: completion) self.tokens = self.router.tokens self.router.scope = scope - try self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) + try await self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) OAuthService.register(.facebook) } diff --git a/Sources/ImperialFacebook/FacebookRouter.swift b/Sources/ImperialFacebook/FacebookRouter.swift index 7f404ab..5f1c54e 100644 --- a/Sources/ImperialFacebook/FacebookRouter.swift +++ b/Sources/ImperialFacebook/FacebookRouter.swift @@ -4,7 +4,7 @@ import Foundation public class FacebookRouter: FederatedServiceRouter { public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String) throws -> (EventLoopFuture) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public let callbackURL: String public var accessTokenURL: String = "https://graph.facebook.com/v3.2/oauth/access_token" @@ -29,13 +29,13 @@ public class FacebookRouter: FederatedServiceRouter { return url.absoluteString } - public required init(callback: String, completion: @escaping (Request, String) throws -> (EventLoopFuture)) throws { + public required init(callback: String, completion: @escaping (Request, String) async throws -> Response) throws { self.tokens = try FacebookAuth() self.callbackURL = callback self.callbackCompletion = completion } - public func callbackBody(with code: String) -> ResponseEncodable { + public func callbackBody(with code: String) -> any Content { FacebookCallbackBody(code: code, clientId: tokens.clientID, clientSecret: tokens.clientSecret, diff --git a/Sources/ImperialGitHub/GitHub.swift b/Sources/ImperialGitHub/GitHub.swift index ee511d4..cabe3d2 100644 --- a/Sources/ImperialGitHub/GitHub.swift +++ b/Sources/ImperialGitHub/GitHub.swift @@ -9,16 +9,16 @@ public class GitHub: FederatedService { public required init( routes: RoutesBuilder, authenticate: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String] = [], - completion: @escaping (Request, String) throws -> (EventLoopFuture) - ) throws { - self.router = try GitHubRouter(callback: callback, completion: completion) + completion: @escaping (Request, String) async throws -> Response + ) async throws { + self.router = try await GitHubRouter(callback: callback, completion: completion) self.tokens = self.router.tokens self.router.scope = scope - try self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) + try await self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) OAuthService.register(.github) } diff --git a/Sources/ImperialGitHub/GitHubCallbackBody.swift b/Sources/ImperialGitHub/GitHubCallbackBody.swift index e697eae..aa1d515 100644 --- a/Sources/ImperialGitHub/GitHubCallbackBody.swift +++ b/Sources/ImperialGitHub/GitHubCallbackBody.swift @@ -1,6 +1,6 @@ import Vapor -struct GitHubCallbackBody: Content { +public struct GitHubCallbackBody: Content { let clientId: String let clientSecret: String let code: String diff --git a/Sources/ImperialGitHub/GitHubRouter.swift b/Sources/ImperialGitHub/GitHubRouter.swift index a1a53d0..7ec7318 100644 --- a/Sources/ImperialGitHub/GitHubRouter.swift +++ b/Sources/ImperialGitHub/GitHubRouter.swift @@ -2,10 +2,9 @@ import Vapor import Foundation public class GitHubRouter: FederatedServiceRouter { - public static var baseURL: String = "https://github.com/" public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String) throws -> (EventLoopFuture) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public let callbackURL: String public let accessTokenURL: String = "\(GitHubRouter.baseURL.finished(with: "/"))login/oauth/access_token" @@ -16,7 +15,7 @@ public class GitHubRouter: FederatedServiceRouter { return headers }() - public required init(callback: String, completion: @escaping (Request, String) throws -> (EventLoopFuture)) throws { + public required init(callback: String, completion: @escaping (Vapor.Request, String) async throws -> Vapor.Response) async throws { self.tokens = try GitHubAuth() self.callbackURL = callback self.callbackCompletion = completion @@ -40,7 +39,7 @@ public class GitHubRouter: FederatedServiceRouter { return url.absoluteString } - public func callbackBody(with code: String) -> ResponseEncodable { + public func callbackBody(with code: String) -> any Content { GitHubCallbackBody(clientId: tokens.clientID, clientSecret: tokens.clientSecret, code: code) diff --git a/Sources/ImperialGitlab/Gitlab.swift b/Sources/ImperialGitlab/Gitlab.swift index 62b88ef..81d9f82 100644 --- a/Sources/ImperialGitlab/Gitlab.swift +++ b/Sources/ImperialGitlab/Gitlab.swift @@ -9,16 +9,16 @@ public class Gitlab: FederatedService { public required init( routes: RoutesBuilder, authenticate: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String] = [], - completion: @escaping (Request, String) throws -> (EventLoopFuture) - ) throws { - self.router = try GitlabRouter(callback: callback, completion: completion) + completion: @escaping (Request, String) async throws -> Response + ) async throws { + self.router = try await GitlabRouter(callback: callback, completion: completion) self.tokens = self.router.tokens self.router.scope = scope - try self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) + try await self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) OAuthService.register(.gitlab) } diff --git a/Sources/ImperialGitlab/GitlabRouter.swift b/Sources/ImperialGitlab/GitlabRouter.swift index de35b25..5215657 100644 --- a/Sources/ImperialGitlab/GitlabRouter.swift +++ b/Sources/ImperialGitlab/GitlabRouter.swift @@ -6,13 +6,13 @@ public class GitlabRouter: FederatedServiceRouter { public static var baseURL: String = "https://gitlab.com/" public static var callbackURL: String = "callback" public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String) throws -> (EventLoopFuture) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public let callbackURL: String public let accessTokenURL: String = "\(GitlabRouter.baseURL.finished(with: "/"))oauth/token" public let service: OAuthService = .gitlab - public required init(callback: String, completion: @escaping (Request, String) throws -> (EventLoopFuture)) throws { + public required init(callback: String, completion: @escaping (Request, String) async throws -> Response) async throws { self.tokens = try GitlabAuth() self.callbackURL = callback self.callbackCompletion = completion @@ -37,7 +37,7 @@ public class GitlabRouter: FederatedServiceRouter { return url.absoluteString } - public func callbackBody(with code: String) -> ResponseEncodable { + public func callbackBody(with code: String) -> any Content { GitlabCallbackBody(clientId: tokens.clientID, clientSecret: tokens.clientSecret, code: code, diff --git a/Sources/ImperialGoogle/JWT/GoogleJWT.swift b/Sources/ImperialGoogle/JWT/GoogleJWT.swift index f610d29..2704b7d 100644 --- a/Sources/ImperialGoogle/JWT/GoogleJWT.swift +++ b/Sources/ImperialGoogle/JWT/GoogleJWT.swift @@ -8,16 +8,16 @@ public class GoogleJWT: FederatedService { public required init( routes: RoutesBuilder, authenticate: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String] = [], - completion: @escaping (Request, String) throws -> (EventLoopFuture) - ) throws { - self.router = try GoogleJWTRouter(callback: callback, completion: completion) + completion: @escaping (Request, String) async throws -> Response + ) async throws { + self.router = try await GoogleJWTRouter(callback: callback, completion: completion) self.tokens = self.router.tokens self.router.scope = scope - try self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) + try await self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) OAuthService.register(.google) } diff --git a/Sources/ImperialGoogle/JWT/GoogleJWTRouter.swift b/Sources/ImperialGoogle/JWT/GoogleJWTRouter.swift index 3664067..5637cc4 100644 --- a/Sources/ImperialGoogle/JWT/GoogleJWTRouter.swift +++ b/Sources/ImperialGoogle/JWT/GoogleJWTRouter.swift @@ -6,7 +6,7 @@ import JWTKit public final class GoogleJWTRouter: FederatedServiceRouter { public var tokens: FederatedServiceTokens - public var callbackCompletion: (Request, String) throws -> (EventLoopFuture) + public var callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public var callbackURL: String public var accessTokenURL: String = "https://www.googleapis.com/oauth2/v4/token" @@ -18,7 +18,7 @@ public final class GoogleJWTRouter: FederatedServiceRouter { return headers }() - public init(callback: String, completion: @escaping (Request, String) throws -> (EventLoopFuture)) throws { + public init(callback: String, completion: @escaping (Request, String) async throws -> Response) async throws { self.tokens = try GoogleJWTAuth() self.callbackURL = callback self.authURL = callback @@ -29,27 +29,23 @@ public final class GoogleJWTRouter: FederatedServiceRouter { return authURL } - public func callbackBody(with code: String) -> ResponseEncodable { + public func callbackBody(with code: String) -> any Content { return "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=\(code)" } - public func fetchToken(from request: Request) throws -> EventLoopFuture { + public func fetchToken(from request: Request) async throws -> String { let token = try self.jwt() let body = callbackBody(with: token) let url = URI(string: self.accessTokenURL) - return body.encodeResponse(for: request) - .map { $0.body.buffer } - .flatMap { buffer in - return request.client.post(url, headers: self.callbackHeaders) { $0.body = buffer } - }.flatMapThrowing { response in - return try response.content.get(GoogleJWTResponse.self) - }.map { $0.accessToken } + let buffer = try ByteBuffer(data:JSONEncoder().encode(body)) + let response = try await request.client.post(url, headers: self.callbackHeaders) { $0.body = buffer } + return try response.content.get(GoogleJWTResponse.self).accessToken } - public func authenticate(_ request: Request) throws -> EventLoopFuture { + public func authenticate(_ request: Request) async throws -> Response { let redirect: Response = request.redirect(to: self.callbackURL) - return request.eventLoop.makeSucceededFuture(redirect) + return redirect } public func jwt() throws -> String { diff --git a/Sources/ImperialGoogle/Standard/Google.swift b/Sources/ImperialGoogle/Standard/Google.swift index 1589f3a..250530c 100644 --- a/Sources/ImperialGoogle/Standard/Google.swift +++ b/Sources/ImperialGoogle/Standard/Google.swift @@ -9,16 +9,16 @@ public class Google: FederatedService { public required init( routes: RoutesBuilder, authenticate: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String] = [], - completion: @escaping (Request, String) throws -> (EventLoopFuture) - ) throws { + completion: @escaping (Request, String) async throws -> Response + ) async throws { self.router = try GoogleRouter(callback: callback, completion: completion) self.tokens = self.router.tokens self.router.scope = scope - try self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) + try await self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) OAuthService.register(.google) } diff --git a/Sources/ImperialGoogle/Standard/GoogleRouter.swift b/Sources/ImperialGoogle/Standard/GoogleRouter.swift index 56b7051..6600214 100644 --- a/Sources/ImperialGoogle/Standard/GoogleRouter.swift +++ b/Sources/ImperialGoogle/Standard/GoogleRouter.swift @@ -3,7 +3,7 @@ import Foundation public class GoogleRouter: FederatedServiceRouter { public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String) throws -> (EventLoopFuture) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public let callbackURL: String public let accessTokenURL: String = "https://www.googleapis.com/oauth2/v4/token" @@ -14,7 +14,7 @@ public class GoogleRouter: FederatedServiceRouter { return headers }() - public required init(callback: String, completion: @escaping (Request, String) throws -> (EventLoopFuture)) throws { + public required init(callback: String, completion: @escaping (Request, String) async throws -> Response) throws { self.tokens = try GoogleAuth() self.callbackURL = callback self.callbackCompletion = completion @@ -39,7 +39,7 @@ public class GoogleRouter: FederatedServiceRouter { return url.absoluteString } - public func callbackBody(with code: String) -> ResponseEncodable { + public func callbackBody(with code: String) -> any Content { GoogleCallbackBody(code: code, clientId: tokens.clientID, clientSecret: tokens.clientSecret, diff --git a/Sources/ImperialKeycloak/Keycloak.swift b/Sources/ImperialKeycloak/Keycloak.swift index a5432fa..f6c0942 100644 --- a/Sources/ImperialKeycloak/Keycloak.swift +++ b/Sources/ImperialKeycloak/Keycloak.swift @@ -9,16 +9,16 @@ public class Keycloak: FederatedService { public required init( routes: RoutesBuilder, authenticate: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String] = [], - completion: @escaping (Request, String) throws -> (EventLoopFuture) - ) throws { - self.router = try KeycloakRouter(callback: callback, completion: completion) + completion: @escaping (Request, String) async throws -> Response + ) async throws { + self.router = try await KeycloakRouter(callback: callback, completion: completion) self.tokens = self.router.tokens self.router.scope = scope - try self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) + try await self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) OAuthService.register(.keycloak) } diff --git a/Sources/ImperialKeycloak/KeycloakRouter.swift b/Sources/ImperialKeycloak/KeycloakRouter.swift index e1fc8c5..9aee536 100644 --- a/Sources/ImperialKeycloak/KeycloakRouter.swift +++ b/Sources/ImperialKeycloak/KeycloakRouter.swift @@ -4,13 +4,13 @@ import Foundation public class KeycloakRouter: FederatedServiceRouter { public let tokens: FederatedServiceTokens public let keycloakTokens: KeycloakAuth - public let callbackCompletion: (Request, String) throws -> (EventLoopFuture) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public let callbackURL: String public let accessTokenURL: String public let service: OAuthService = .keycloak - public required init(callback: String, completion: @escaping (Request, String) throws -> (EventLoopFuture)) throws { + public required init(callback: String, completion: @escaping (Request, String) async throws -> Response) async throws { self.tokens = try KeycloakAuth() self.keycloakTokens = self.tokens as! KeycloakAuth self.accessTokenURL = keycloakTokens.accessTokenURL @@ -26,7 +26,7 @@ public class KeycloakRouter: FederatedServiceRouter { "response_type=code" } - public func callbackBody(with code: String) -> ResponseEncodable { + public func callbackBody(with code: String) -> any Content { KeycloakCallbackBody(code: code, clientId: tokens.clientID, clientSecret: tokens.clientSecret, diff --git a/Sources/ImperialMicrosoft/Microsoft.swift b/Sources/ImperialMicrosoft/Microsoft.swift index 5621922..d439e24 100644 --- a/Sources/ImperialMicrosoft/Microsoft.swift +++ b/Sources/ImperialMicrosoft/Microsoft.swift @@ -9,16 +9,16 @@ public class Microsoft: FederatedService { public required init( routes: RoutesBuilder, authenticate: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String] = [], - completion: @escaping (Request, String)throws -> (EventLoopFuture) - ) throws { - self.router = try MicrosoftRouter(callback: callback, completion: completion) + completion: @escaping (Request, String) async throws -> Response + ) async throws { + self.router = try await MicrosoftRouter(callback: callback, completion: completion) self.tokens = self.router.tokens self.router.scope = scope - try self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) + try await self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) OAuthService.register(.microsoft) } diff --git a/Sources/ImperialMicrosoft/MicrosoftRouter.swift b/Sources/ImperialMicrosoft/MicrosoftRouter.swift index 1d05d6a..77fdfeb 100644 --- a/Sources/ImperialMicrosoft/MicrosoftRouter.swift +++ b/Sources/ImperialMicrosoft/MicrosoftRouter.swift @@ -6,7 +6,7 @@ public class MicrosoftRouter: FederatedServiceRouter { public static var tenantIDEnvKey: String = "MICROSOFT_TENANT_ID" public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String)throws -> (EventLoopFuture) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public let callbackURL: String public var tenantID: String { Environment.get(MicrosoftRouter.tenantIDEnvKey) ?? "common" } @@ -16,8 +16,8 @@ public class MicrosoftRouter: FederatedServiceRouter { public required init( callback: String, - completion: @escaping (Request, String) throws -> (EventLoopFuture) - ) throws { + completion: @escaping (Request, String) async throws -> Response + ) async throws { self.tokens = try MicrosoftAuth() self.callbackURL = callback self.callbackCompletion = completion @@ -44,7 +44,7 @@ public class MicrosoftRouter: FederatedServiceRouter { return url.absoluteString } - public func callbackBody(with code: String) -> ResponseEncodable { + public func callbackBody(with code: String) -> any Content { MicrosoftCallbackBody(code: code, clientId: tokens.clientID, clientSecret: tokens.clientSecret, diff --git a/Sources/ImperialShopify/Shopify.swift b/Sources/ImperialShopify/Shopify.swift index e377470..1ab5c10 100644 --- a/Sources/ImperialShopify/Shopify.swift +++ b/Sources/ImperialShopify/Shopify.swift @@ -11,15 +11,15 @@ public final class Shopify: FederatedService { public init( routes: RoutesBuilder, authenticate: String, - authenticateCallback: ((Request) throws -> (EventLoopFuture))?, + authenticateCallback: ((Request) async throws -> Void)?, callback: String, scope: [String], - completion: @escaping (Request, String) throws -> (EventLoopFuture) - ) throws { - self.shopifyRouter = try ShopifyRouter(callback: callback, completion: completion) + completion: @escaping (Request, String) async throws -> Response + ) async throws { + self.shopifyRouter = try await ShopifyRouter(callback: callback, completion: completion) self.shopifyRouter.scope = scope - try self.router.configureRoutes( + try await self.router.configureRoutes( withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes diff --git a/Sources/ImperialShopify/ShopifyRouter.swift b/Sources/ImperialShopify/ShopifyRouter.swift index 5e7f4a3..657e931 100644 --- a/Sources/ImperialShopify/ShopifyRouter.swift +++ b/Sources/ImperialShopify/ShopifyRouter.swift @@ -3,13 +3,13 @@ import Vapor public class ShopifyRouter: FederatedServiceRouter { public let tokens: FederatedServiceTokens - public let callbackCompletion: (Request, String) throws -> (EventLoopFuture) + public let callbackCompletion: (Request, String) async throws -> Response public var scope: [String] = [] public let callbackURL: String public var accessTokenURL: String = "" public let service: OAuthService = .shopify - required public init(callback: String, completion: @escaping (Request, String) throws -> (EventLoopFuture)) throws { + required public init(callback: String, completion: @escaping (Request, String) async throws -> Response) async throws { self.tokens = try ShopifyAuth() self.callbackURL = callback self.callbackCompletion = completion @@ -25,7 +25,7 @@ public class ShopifyRouter: FederatedServiceRouter { return try authURLFrom(shop, nonce: nonce).absoluteString } - public func callbackBody(with code: String) -> ResponseEncodable { + public func callbackBody(with code: String) -> any Content { ShopifyCallbackBody(code: code, clientId: tokens.clientID, clientSecret: tokens.clientSecret) @@ -66,22 +66,17 @@ public class ShopifyRouter: FederatedServiceRouter { /// - Parameter request: The request from the OAuth provider. /// - Returns: A response that should redirect the user back to the app. /// - Throws: Any errors that occur in the implementation code. - public func callback(_ request: Request) throws -> EventLoopFuture { - return try self.fetchToken(from: request).flatMap { accessToken in - let session = request.session - do { - guard let domain = request.query[String.self, at: "shop"] else { throw Abort(.badRequest) } + public func callback(_ request: Request) async throws -> Response { + let accessToken = try await self.fetchToken(from: request) + let session = request.session + + guard let domain = request.query[String.self, at: "shop"] else { throw Abort(.badRequest) } - try session.setAccessToken(accessToken) - try session.setShopDomain(domain) - try session.setNonce(nil) - return try self.callbackCompletion(request, accessToken).flatMap { response in - return response.encodeResponse(for: request) - } - } catch { - return request.eventLoop.makeFailedFuture(error) - } - } + try session.setAccessToken(accessToken) + try session.setShopDomain(domain) + try session.setNonce(nil) + return try await self.callbackCompletion(request, accessToken) + } private func authURLFrom(_ shop: String, nonce: String) throws -> URL { From fa3074e4bc4cac269f0429637bfaa5d4c6b6fa18 Mon Sep 17 00:00:00 2001 From: vamsii777 Date: Sat, 27 Jul 2024 17:09:00 +0530 Subject: [PATCH 2/9] update swift-tools-version to 5.10 --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index d6bbb27..cfdbacc 100755 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.2 +// swift-tools-version:5.10 import PackageDescription let package = Package( From f2b28561a2d68eed22e1eab54c5c3b996baab4bb Mon Sep 17 00:00:00 2001 From: vamsii777 Date: Sat, 27 Jul 2024 17:09:56 +0530 Subject: [PATCH 3/9] update xcode setup and swift version in test workflow --- .github/workflows/test.yml | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 21ae4a5..004c11d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -17,7 +17,7 @@ jobs: uses: maxim-lobanov/setup-xcode@v1.1 with: { 'xcode-version': '${{ matrix.xcode }}' } - name: Check out code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Run tests with Thread Sanitizer run: swift test --enable-test-discovery --sanitize=thread linux: @@ -25,25 +25,15 @@ jobs: fail-fast: false matrix: swiftver: - - swift:5.2 - - swift:5.3 + - swift:5.10 swiftos: - - xenial - - bionic + - jammy + - mantic - focal - - centos7 - - centos8 - - amazonlinux2 container: ${{ format('{0}-{1}', matrix.swiftver, matrix.swiftos) }} runs-on: ubuntu-latest steps: - - name: SPM is incompatible with CentOS 7 - if: ${{ matrix.swiftos == 'centos7' }} - run: | - yum install -y make libcurl-devel - git clone https://github.com/git/git -bv2.28.0 --depth 1 && cd git - make prefix=/usr -j all install NO_OPENSSL=1 NO_EXPAT=1 NO_TCLTK=1 NO_GETTEXT=1 NO_PERL=1 - name: Check out code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Run tests with Thread Sanitizer - run: swift test --enable-test-discovery --sanitize=thread + run: swift test --enable-test-discovery --sanitize=thread \ No newline at end of file From a40897203e7100778315382583cf1ed9df4c0478 Mon Sep 17 00:00:00 2001 From: vamsii777 Date: Sat, 27 Jul 2024 18:14:31 +0530 Subject: [PATCH 4/9] Add Restream --- Package.swift | 10 ++++- Sources/ImperialRestream/Restream.swift | 26 ++++++++++++ Sources/ImperialRestream/RestreamAuth.swift | 16 ++++++++ .../RestreamCallbackBody.swift | 19 +++++++++ Sources/ImperialRestream/RestreamRouter.swift | 41 +++++++++++++++++++ .../ImperialRestream/Service+Restream.swift | 6 +++ 6 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 Sources/ImperialRestream/Restream.swift create mode 100644 Sources/ImperialRestream/RestreamAuth.swift create mode 100644 Sources/ImperialRestream/RestreamCallbackBody.swift create mode 100644 Sources/ImperialRestream/RestreamRouter.swift create mode 100644 Sources/ImperialRestream/Service+Restream.swift diff --git a/Package.swift b/Package.swift index cfdbacc..df7f2a9 100755 --- a/Package.swift +++ b/Package.swift @@ -18,6 +18,10 @@ let package = Package( .library(name: "ImperialKeycloak", targets: ["ImperialCore", "ImperialKeycloak"]), .library(name: "ImperialMicrosoft", targets: ["ImperialCore", "ImperialMicrosoft"]), .library(name: "ImperialShopify", targets: ["ImperialCore", "ImperialShopify"]), + .library(name: "ImperialRestream", targets: [ + "ImperialCore", + "ImperialRestream" + ]), .library(name: "Imperial", targets: [ "ImperialCore", "ImperialAuth0", @@ -29,7 +33,8 @@ let package = Package( "ImperialGoogle", "ImperialKeycloak", "ImperialMicrosoft", - "ImperialShopify" + "ImperialShopify", + "ImperialRestream" ]), ], dependencies: [ @@ -54,6 +59,7 @@ let package = Package( .target(name: "ImperialKeycloak", dependencies: ["ImperialCore"]), .target(name: "ImperialMicrosoft", dependencies: ["ImperialCore"]), .target(name: "ImperialShopify", dependencies: ["ImperialCore"]), - .testTarget(name: "ImperialTests", dependencies: ["ImperialCore", "ImperialShopify"]), + .target(name: "ImperialRestream", dependencies: ["ImperialCore"]), + .testTarget(name: "ImperialTests", dependencies: ["ImperialCore", "ImperialShopify", "ImperialRestream"]), ] ) diff --git a/Sources/ImperialRestream/Restream.swift b/Sources/ImperialRestream/Restream.swift new file mode 100644 index 0000000..a3ffa35 --- /dev/null +++ b/Sources/ImperialRestream/Restream.swift @@ -0,0 +1,26 @@ +@_exported import ImperialCore +import Vapor + +public class Restream: FederatedService { + public var tokens: FederatedServiceTokens + public var router: FederatedServiceRouter + + @discardableResult + public required init( + routes: RoutesBuilder, + authenticate: String, + authenticateCallback: ((Request) async throws -> Void)?, + callback: String, + scope: [String] = [], + completion: @escaping (Request, String) async throws -> Response + ) async throws { + self.router = try RestreamRouter(callback: callback, completion: completion) + self.tokens = self.router.tokens + + self.router.scope = scope + try await self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: routes) + + OAuthService.register(.restream) + } +} + diff --git a/Sources/ImperialRestream/RestreamAuth.swift b/Sources/ImperialRestream/RestreamAuth.swift new file mode 100644 index 0000000..6d5f669 --- /dev/null +++ b/Sources/ImperialRestream/RestreamAuth.swift @@ -0,0 +1,16 @@ +import Vapor + +public class RestreamAuth: FederatedServiceTokens { + public static var idEnvKey: String = "RESTREAM_CLIENT_ID" + public static var secretEnvKey: String = "RESTREAM_CLIENT_SECRET" + public var clientID: String + public var clientSecret: String + + public required init() throws { + let idError = ImperialError.missingEnvVar(RestreamAuth.idEnvKey) + let secretError = ImperialError.missingEnvVar(RestreamAuth.secretEnvKey) + + self.clientID = try Environment.get(RestreamAuth.idEnvKey).value(or: idError) + self.clientSecret = try Environment.get(RestreamAuth.secretEnvKey).value(or: secretError) + } +} diff --git a/Sources/ImperialRestream/RestreamCallbackBody.swift b/Sources/ImperialRestream/RestreamCallbackBody.swift new file mode 100644 index 0000000..a24b917 --- /dev/null +++ b/Sources/ImperialRestream/RestreamCallbackBody.swift @@ -0,0 +1,19 @@ +import Vapor + +struct RestreamCallbackBody: Content { + let code: String + let clientId: String + let clientSecret: String + let redirectURI: String + let grantType: String = "authorization_code" + + static var defaultContentType: HTTPMediaType = .urlEncodedForm + + enum CodingKeys: String, CodingKey { + case code = "code" + case clientId = "client_id" + case clientSecret = "client_secret" + case redirectURI = "redirect_uri" + case grantType = "grant_type" + } +} diff --git a/Sources/ImperialRestream/RestreamRouter.swift b/Sources/ImperialRestream/RestreamRouter.swift new file mode 100644 index 0000000..8b84b66 --- /dev/null +++ b/Sources/ImperialRestream/RestreamRouter.swift @@ -0,0 +1,41 @@ +import Vapor +import Foundation + +public class RestreamRouter: FederatedServiceRouter { + public let tokens: FederatedServiceTokens + public let callbackCompletion: (Request, String) async throws -> Response + public var scope: [String] = [] + public var callbackURL: String + public let accessTokenURL: String = "https://api.restream.io/oauth/token" + + public required init(callback: String, completion: @escaping (Request, String) async throws -> Response) throws { + self.tokens = try RestreamAuth() + self.callbackURL = callback + self.callbackCompletion = completion + } + + public var service: OAuthService { .restream } + + public func authURL(_ request: Request) throws -> String { + var components = URLComponents(string: "https://api.restream.io/login")! + components.queryItems = [ + clientIDItem, + redirectURIItem, + codeResponseTypeItem, + URLQueryItem(name: "state", value: UUID().uuidString) + ] + if !scope.isEmpty { + components.queryItems?.append(scopeItem) + } + return components.url!.absoluteString + } + + public func callbackBody(with code: String) -> any Content { + return RestreamCallbackBody( + code: code, + clientId: tokens.clientID, + clientSecret: tokens.clientSecret, + redirectURI: callbackURL + ) + } +} diff --git a/Sources/ImperialRestream/Service+Restream.swift b/Sources/ImperialRestream/Service+Restream.swift new file mode 100644 index 0000000..3d9016d --- /dev/null +++ b/Sources/ImperialRestream/Service+Restream.swift @@ -0,0 +1,6 @@ +extension OAuthService { + public static let restream = OAuthService.init( + name: "restream", + endpoints: [:] + ) +} From f2e275e95c78eaa4f7f07076191639a6da7e2ab0 Mon Sep 17 00:00:00 2001 From: vamsii777 Date: Sat, 27 Jul 2024 18:14:53 +0530 Subject: [PATCH 5/9] Add Restream integration documentation --- docs/Restream/README.md | 22 ++++++++++++++++++++++ docs/Restream/create-app.png | Bin 0 -> 284071 bytes 2 files changed, 22 insertions(+) create mode 100644 docs/Restream/README.md create mode 100644 docs/Restream/create-app.png diff --git a/docs/Restream/README.md b/docs/Restream/README.md new file mode 100644 index 0000000..7818526 --- /dev/null +++ b/docs/Restream/README.md @@ -0,0 +1,22 @@ +# Federated Login with Restream + +We need to start by creating a client ID and secret so Restream can identify us. Go to the [Restream Developer Portal](https://developers.restream.io/). + +Select 'Create App': + +![Create App](create-app.png) + +Fill in the necessary details for your application and create it. Under the 'Settings' section, in 'Redirect URIs', you will need to add a URI for Restream to redirect to after the authentication is complete. If you are developing locally, it will be `http://localhost:8080/auth/restream/callback` or `https...` if you have configured SSL: + +This provides you with an OAuth Client ID and secret you can provide to Imperial. + +## Imperial Integration + +You can use Restream with the `ImperialRestream` package. This expects two environment variables: + +* `RESTREAM_CLIENT_ID` +* `RESTREAM_CLIENT_SECRET` + +You can then register the OAuth provider like normal. + +[1]: https://developers.restream.io/docs \ No newline at end of file diff --git a/docs/Restream/create-app.png b/docs/Restream/create-app.png new file mode 100644 index 0000000000000000000000000000000000000000..a3cefd884735d95f61bbf5ada74bca0c4b6ca9b7 GIT binary patch literal 284071 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

8|&Iy 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 Date: Sat, 27 Jul 2024 20:52:20 +0530 Subject: [PATCH 6/9] Update FederatedServiceRouter to use async/await syntax for callback function Co-authored-by: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> --- Sources/ImperialCore/Routing/FederatedServiceRouter.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/ImperialCore/Routing/FederatedServiceRouter.swift b/Sources/ImperialCore/Routing/FederatedServiceRouter.swift index 3d951b5..3001bff 100644 --- a/Sources/ImperialCore/Routing/FederatedServiceRouter.swift +++ b/Sources/ImperialCore/Routing/FederatedServiceRouter.swift @@ -78,7 +78,7 @@ extension FederatedServiceRouter { public var callbackHeaders: HTTPHeaders { [:] } public func configureRoutes(withAuthURL authURL: String, authenticateCallback: ((Request) async throws -> Void)?, on router: RoutesBuilder) async throws { - router.get(callbackURL.pathComponents, use: self.callback) + router.get(callbackURL.pathComponents, use: { try await self.callback($0) }) router.get(authURL.pathComponents) { req async throws -> Response in let redirect: Response = req.redirect(to: try self.authURL(req)) guard let authenticateCallback = authenticateCallback else { From ffb39fb392339209086006413c28491db8759562 Mon Sep 17 00:00:00 2001 From: vamsii777 Date: Sat, 27 Jul 2024 20:54:18 +0530 Subject: [PATCH 7/9] Remove unused LinuxMain.swift --- Tests/LinuxMain.swift | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 Tests/LinuxMain.swift diff --git a/Tests/LinuxMain.swift b/Tests/LinuxMain.swift deleted file mode 100644 index b40e790..0000000 --- a/Tests/LinuxMain.swift +++ /dev/null @@ -1,6 +0,0 @@ -import XCTest -@testable import ImperialTests - -XCTMain([ - testCase(ImperialTests.allTests), -]) From 3834e3874760bb3307a88545161f256ce07680e6 Mon Sep 17 00:00:00 2001 From: vamsii777 Date: Sat, 27 Jul 2024 20:58:53 +0530 Subject: [PATCH 8/9] Update test workflow to include unit tests using Vapor CI --- .github/workflows/test.yml | 44 +++++++------------------------------- 1 file changed, 8 insertions(+), 36 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 004c11d..a8cca0d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,39 +1,11 @@ name: test +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - + pull_request: { types: [opened, reopened, synchronize, ready_for_review] } + push: { branches: [ main ] } + jobs: - macos: - strategy: - fail-fast: false - matrix: - xcode: [latest, latest-stable] - runs-on: macos-latest - steps: - - name: Select latest available Xcode - uses: maxim-lobanov/setup-xcode@v1.1 - with: { 'xcode-version': '${{ matrix.xcode }}' } - - name: Check out code - uses: actions/checkout@v4 - - name: Run tests with Thread Sanitizer - run: swift test --enable-test-discovery --sanitize=thread - linux: - strategy: - fail-fast: false - matrix: - swiftver: - - swift:5.10 - swiftos: - - jammy - - mantic - - focal - container: ${{ format('{0}-{1}', matrix.swiftver, matrix.swiftos) }} - runs-on: ubuntu-latest - steps: - - name: Check out code - uses: actions/checkout@v4 - - name: Run tests with Thread Sanitizer - run: swift test --enable-test-discovery --sanitize=thread \ No newline at end of file + unit-tests: + uses: vapor/ci/.github/workflows/run-unit-tests.yml@main \ No newline at end of file From 089ddfb664b658a6ead00f055ec482ab4cd52484 Mon Sep 17 00:00:00 2001 From: Vamsi Madduluri Date: Sat, 27 Jul 2024 21:43:29 +0530 Subject: [PATCH 9/9] Fix Typo in Completion Handler Syntax Co-authored-by: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> --- Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift b/Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift index 1878a44..feef61e 100644 --- a/Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift +++ b/Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift @@ -13,7 +13,7 @@ public class MicrosoftRouter: FederatedServiceRouter { public required init( callback: String, - completion: @escaping (Request, String) assync throws -> Response + completion: @escaping (Request, String) async throws -> Response ) throws { self.tokens = try MicrosoftAuth() self.callbackURL = callback