You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
5.4 KiB
163 lines
5.4 KiB
/*
|
|
* Copyright 2017 Google
|
|
*
|
|
* 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 "FIRSecureTokenRequest.h"
|
|
#import "FIRAuthRequestConfiguration.h"
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
/** @var kFIRSecureTokenServiceGetTokenURLFormat
|
|
@brief The format of the secure token service URLs. Requires string format substitution with
|
|
the client's API Key.
|
|
*/
|
|
static NSString *const kFIRSecureTokenServiceGetTokenURLFormat = @"https://%@/v1/token?key=%@";
|
|
|
|
/** @var kFIRSecureTokenServiceGrantTypeRefreshToken
|
|
@brief The string value of the @c FIRSecureTokenRequestGrantTypeRefreshToken request type.
|
|
*/
|
|
static NSString *const kFIRSecureTokenServiceGrantTypeRefreshToken = @"refresh_token";
|
|
|
|
/** @var kFIRSecureTokenServiceGrantTypeAuthorizationCode
|
|
@brief The string value of the @c FIRSecureTokenRequestGrantTypeAuthorizationCode request type.
|
|
*/
|
|
static NSString *const kFIRSecureTokenServiceGrantTypeAuthorizationCode = @"authorization_code";
|
|
|
|
/** @var kGrantTypeKey
|
|
@brief The key for the "grantType" parameter in the request.
|
|
*/
|
|
static NSString *const kGrantTypeKey = @"grantType";
|
|
|
|
/** @var kScopeKey
|
|
@brief The key for the "scope" parameter in the request.
|
|
*/
|
|
static NSString *const kScopeKey = @"scope";
|
|
|
|
/** @var kRefreshTokenKey
|
|
@brief The key for the "refreshToken" parameter in the request.
|
|
*/
|
|
static NSString *const kRefreshTokenKey = @"refreshToken";
|
|
|
|
/** @var kCodeKey
|
|
@brief The key for the "code" parameter in the request.
|
|
*/
|
|
static NSString *const kCodeKey = @"code";
|
|
|
|
/** @var gAPIHost
|
|
@brief Host for server API calls.
|
|
*/
|
|
static NSString *gAPIHost = @"securetoken.googleapis.com";
|
|
|
|
@implementation FIRSecureTokenRequest {
|
|
/** @var _requestConfiguration
|
|
@brief Contains configuration relevant to the request.
|
|
*/
|
|
FIRAuthRequestConfiguration *_requestConfiguration;
|
|
}
|
|
|
|
+ (FIRSecureTokenRequest *)authCodeRequestWithCode:(NSString *)code
|
|
requestConfiguration:(FIRAuthRequestConfiguration *)
|
|
requestConfiguration {
|
|
return [[self alloc] initWithGrantType:FIRSecureTokenRequestGrantTypeAuthorizationCode
|
|
scope:nil
|
|
refreshToken:nil
|
|
code:code
|
|
requestConfiguration:requestConfiguration];
|
|
}
|
|
|
|
+ (FIRSecureTokenRequest *)refreshRequestWithRefreshToken:(NSString *)refreshToken
|
|
requestConfiguration:(FIRAuthRequestConfiguration *)
|
|
requestConfiguration {
|
|
return [[self alloc] initWithGrantType:FIRSecureTokenRequestGrantTypeRefreshToken
|
|
scope:nil
|
|
refreshToken:refreshToken
|
|
code:nil
|
|
requestConfiguration:requestConfiguration];
|
|
}
|
|
|
|
/** @fn grantTypeStringWithGrantType:
|
|
@brief Converts a @c FIRSecureTokenRequestGrantType to it's @c NSString equivilent.
|
|
*/
|
|
+ (NSString *)grantTypeStringWithGrantType:(FIRSecureTokenRequestGrantType)grantType {
|
|
switch (grantType) {
|
|
case FIRSecureTokenRequestGrantTypeAuthorizationCode:
|
|
return kFIRSecureTokenServiceGrantTypeAuthorizationCode;
|
|
case FIRSecureTokenRequestGrantTypeRefreshToken:
|
|
return kFIRSecureTokenServiceGrantTypeRefreshToken;
|
|
// No Default case so we will notice if new grant types are added to the enum.
|
|
}
|
|
}
|
|
|
|
- (nullable instancetype)initWithGrantType:(FIRSecureTokenRequestGrantType)grantType
|
|
scope:(nullable NSString *)scope
|
|
refreshToken:(nullable NSString *)refreshToken
|
|
code:(nullable NSString *)code
|
|
requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
|
|
self = [super init];
|
|
if (self) {
|
|
_grantType = grantType;
|
|
_scope = [scope copy];
|
|
_refreshToken = [refreshToken copy];
|
|
_code = [code copy];
|
|
_APIKey = [requestConfiguration.APIKey copy];
|
|
_requestConfiguration = requestConfiguration;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (FIRAuthRequestConfiguration *)requestConfiguration {
|
|
return _requestConfiguration;
|
|
}
|
|
|
|
- (NSURL *)requestURL {
|
|
NSString *URLString =
|
|
[NSString stringWithFormat:kFIRSecureTokenServiceGetTokenURLFormat, gAPIHost, _APIKey];
|
|
NSURL *URL = [NSURL URLWithString:URLString];
|
|
return URL;
|
|
}
|
|
|
|
- (BOOL)containsPostBody {
|
|
return YES;
|
|
}
|
|
|
|
- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
|
|
NSMutableDictionary *postBody = [@{
|
|
kGrantTypeKey : [[self class] grantTypeStringWithGrantType:_grantType]
|
|
} mutableCopy];
|
|
if (_scope) {
|
|
postBody[kScopeKey] = _scope;
|
|
}
|
|
if (_refreshToken) {
|
|
postBody[kRefreshTokenKey] = _refreshToken;
|
|
}
|
|
if (_code) {
|
|
postBody[kCodeKey] = _code;
|
|
}
|
|
return postBody;
|
|
}
|
|
|
|
#pragma mark - Internal API for development
|
|
|
|
+ (NSString *)host {
|
|
return gAPIHost;
|
|
}
|
|
|
|
+ (void)setHost:(NSString *)host {
|
|
gAPIHost = host;
|
|
}
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|