| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // Copyright 2021 Google LLC
- //
- // 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 "GoogleSignIn/Sources/GIDSignInCallbackSchemes.h"
- NS_ASSUME_NONNULL_BEGIN
- @implementation GIDSignInCallbackSchemes {
- NSString *_clientIdentifier;
- }
- /**
- * @fn relevantURLSchemes
- * @brief Extracts CFBundleURLSchemes from the host app's info.plist.
- * @return An array of lowercase NSString *'s representing the URL schemes the host app has declared
- * support for.
- * @remarks Branched from google3/googlemac/iPhone/Firebase/Source/GGLBundleUtil.m
- */
- + (NSArray *)relevantURLSchemes {
- NSMutableArray *result = [NSMutableArray array];
- NSBundle *bundle = [NSBundle mainBundle];
- NSArray *urlTypes = [bundle objectForInfoDictionaryKey:@"CFBundleURLTypes"];
- for (NSDictionary *urlType in urlTypes) {
- NSArray *urlTypeSchemes = urlType[@"CFBundleURLSchemes"];
- for (NSString *urlTypeScheme in urlTypeSchemes) {
- [result addObject:urlTypeScheme.lowercaseString];
- }
- }
- return result;
- }
- - (instancetype)initWithClientIdentifier:(NSString *)clientIdentifier {
- self = [super init];
- if (self) {
- _clientIdentifier = [clientIdentifier copy];
- }
- return self;
- }
- - (NSString *)clientIdentifierScheme {
- NSArray *clientIdentifierParts = [_clientIdentifier componentsSeparatedByString:@"."];
- NSString *reversedClientIdentifier =
- [[clientIdentifierParts reverseObjectEnumerator].allObjects componentsJoinedByString:@"."];
- return reversedClientIdentifier.lowercaseString;
- }
- - (NSArray *)allSchemes {
- NSMutableArray *schemes = [NSMutableArray array];
- NSString *clientIdentifierScheme = [self clientIdentifierScheme];
- if (clientIdentifierScheme) {
- [schemes addObject:clientIdentifierScheme];
- }
- return schemes;
- }
- - (NSMutableArray *)unsupportedSchemes {
- NSMutableArray *unsupportedSchemes = [NSMutableArray arrayWithArray:[self allSchemes]];
- NSArray *supportedSchemes = [[self class] relevantURLSchemes];
- [unsupportedSchemes removeObjectsInArray:supportedSchemes];
- return unsupportedSchemes;
- }
- - (BOOL)URLSchemeIsCallbackScheme:(NSURL *)URL {
- NSString *incomingURLScheme = URL.scheme.lowercaseString;
- for (NSString *scheme in [self allSchemes]) {
- if ([incomingURLScheme isEqual:scheme]) {
- return YES;
- }
- }
- return NO;
- }
- @end
- NS_ASSUME_NONNULL_END
|