121 lines
3.9 KiB
Swift

/*
* JBoss, Home of Professional Open Source.
* Copyright Red Hat, Inc., and individual contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Foundation
/**
Configuration object to setup an OAuth2 module
*/
public class Config {
/**
Applies the baseURL to the configuration.
*/
public let baseURL: String
/**
Applies the "callback URL" once request token issued.
*/
public let redirectURL: String
/**
Applies the "authorization endpoint" to the request token.
*/
public var authzEndpoint: String
/**
Applies the "access token endpoint" to the exchange code for access token.
*/
public var accessTokenEndpoint: String
/**
Endpoint for request to invalidate both accessToken and refreshToken.
*/
public let revokeTokenEndpoint: String?
/**
Endpoint for request a refreshToken.
*/
public let refreshTokenEndpoint: String?
/**
Endpoint for OpenID Connect to get user information.
*/
public let userInfoEndpoint: String?
/**
Boolean to indicate whether OpenID Connect on authorization code grant flow is used.
*/
public var isOpenIDConnect: Bool
/**
Applies the various scopes of the authorization.
*/
public var scopes: [String]
var scope: String {
get {
// Create a string to concatenate all scopes existing in the _scopes array.
var scopeString = ""
for scope in self.scopes {
scopeString += scope.urlEncode()
// If the current scope is other than the last one, then add the "+" sign to the string to separate the scopes.
if (scope != self.scopes.last) {
scopeString += "+"
}
}
return scopeString
}
}
/**
Applies the "client id" obtained with the client registration process.
*/
public let clientId: String
/**
Applies the "client secret" obtained with the client registration process.
*/
public let clientSecret: String?
/**
Account id is used with AccountManager to store tokens. AccountId is defined by the end-user
and can be any String. If AccountManager is not used, this field is optional.
*/
public var accountId: String?
/**
Boolean to indicate to either used a webview (if true) or an external browser (by default, false)
for authorization code grant flow.
*/
public var isWebView: Bool = false
public init(base: String, authzEndpoint: String, redirectURL: String, accessTokenEndpoint: String, clientId: String, refreshTokenEndpoint: String? = nil, revokeTokenEndpoint: String? = nil, isOpenIDConnect:Bool = false, userInfoEndpoint: String? = nil, scopes: [String] = [], clientSecret: String? = nil, accountId: String? = nil, isWebView: Bool = false) {
self.baseURL = base
self.authzEndpoint = authzEndpoint
self.redirectURL = redirectURL
self.accessTokenEndpoint = accessTokenEndpoint
self.refreshTokenEndpoint = refreshTokenEndpoint
self.revokeTokenEndpoint = revokeTokenEndpoint
self.isOpenIDConnect = isOpenIDConnect ?? false
self.userInfoEndpoint = userInfoEndpoint
self.scopes = scopes
self.clientId = clientId
self.clientSecret = clientSecret
self.accountId = accountId
self.isWebView = isWebView
}
}