aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m
diff options
context:
space:
mode:
authorGravatar Paul Beusterien <paulbeusterien@google.com>2017-05-15 12:27:07 -0700
committerGravatar Paul Beusterien <paulbeusterien@google.com>2017-05-15 12:27:07 -0700
commit98ba64449a632518bd2b86fe8d927f4a960d3ddc (patch)
tree131d9c4272fa6179fcda6c5a33fcb3b1bd57ad2e /Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m
parent32461366c9e204a527ca05e6e9b9404a2454ac51 (diff)
Initial
Diffstat (limited to 'Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m')
-rw-r--r--Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m141
1 files changed, 141 insertions, 0 deletions
diff --git a/Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m b/Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m
new file mode 100644
index 0000000..1983542
--- /dev/null
+++ b/Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m
@@ -0,0 +1,141 @@
+/*
+ * 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"
+
+/** @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
+
++ (FIRSecureTokenRequest *)authCodeRequestWithCode:(NSString *)code APIKey:(NSString *)APIKey {
+ return [[self alloc] initWithGrantType:FIRSecureTokenRequestGrantTypeAuthorizationCode
+ scope:nil
+ refreshToken:nil
+ code:code
+ APIKey:APIKey];
+}
+
++ (FIRSecureTokenRequest *)refreshRequestWithRefreshToken:(NSString *)refreshToken
+ APIKey:(NSString *)APIKey {
+ return [[self alloc] initWithGrantType:FIRSecureTokenRequestGrantTypeRefreshToken
+ scope:nil
+ refreshToken:refreshToken
+ code:nil
+ APIKey:APIKey];
+}
+
+/** @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
+ APIKey:(NSString *)APIKey {
+ self = [super init];
+ if (self) {
+ _grantType = grantType;
+ _scope = [scope copy];
+ _refreshToken = [refreshToken copy];
+ _code = [code copy];
+ _APIKey = [APIKey copy];
+ }
+ return self;
+}
+
+- (NSURL *)requestURL {
+ NSString *URLString =
+ [NSString stringWithFormat:kFIRSecureTokenServiceGetTokenURLFormat, gAPIHost, _APIKey];
+ NSURL *URL = [NSURL URLWithString:URLString];
+ return URL;
+}
+
+- (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