FIRAppCheckSettings.m 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*
  2. * Copyright 2021 Google LLC
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #import "FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.h"
  17. #import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
  18. NS_ASSUME_NONNULL_BEGIN
  19. NSString *const kFIRAppCheckTokenAutoRefreshEnabledUserDefaultsPrefix =
  20. @"FIRAppCheckTokenAutoRefreshEnabled_";
  21. NSString *const kFIRAppCheckTokenAutoRefreshEnabledInfoPlistKey =
  22. @"FirebaseAppCheckTokenAutoRefreshEnabled";
  23. @interface FIRAppCheckSettings ()
  24. @property(nonatomic, weak, readonly) FIRApp *firebaseApp;
  25. @property(nonatomic, readonly) NSUserDefaults *userDefaults;
  26. @property(nonatomic, readonly) NSBundle *mainBundle;
  27. @property(nonatomic, readonly) NSString *userDefaultKey;
  28. @property(nonatomic, nullable) NSNumber *isTokenAutoRefreshEnabledNumber;
  29. @end
  30. @implementation FIRAppCheckSettings
  31. @synthesize isTokenAutoRefreshEnabled = _isTokenAutoRefreshEnabled;
  32. - (instancetype)initWithApp:(FIRApp *)firebaseApp
  33. userDefault:(NSUserDefaults *)userDefaults
  34. mainBundle:(NSBundle *)mainBundle {
  35. self = [super init];
  36. if (self) {
  37. _firebaseApp = firebaseApp;
  38. _userDefaults = userDefaults;
  39. _mainBundle = mainBundle;
  40. _userDefaultKey = [kFIRAppCheckTokenAutoRefreshEnabledUserDefaultsPrefix
  41. stringByAppendingString:firebaseApp.name];
  42. }
  43. return self;
  44. }
  45. - (BOOL)isTokenAutoRefreshEnabled {
  46. @synchronized(self) {
  47. if (self.isTokenAutoRefreshEnabledNumber != nil) {
  48. // Return value form the in-memory cache to avoid accessing the user default or bundle when
  49. // not required.
  50. return self.isTokenAutoRefreshEnabledNumber.boolValue;
  51. }
  52. // Check user defaults for a value set during the previous launch.
  53. NSNumber *isTokenAutoRefreshEnabledNumber =
  54. [self.userDefaults objectForKey:self.userDefaultKey];
  55. // Check Info.plist if no user defaults value found.
  56. if (isTokenAutoRefreshEnabledNumber == nil) {
  57. isTokenAutoRefreshEnabledNumber = [self.mainBundle
  58. objectForInfoDictionaryKey:kFIRAppCheckTokenAutoRefreshEnabledInfoPlistKey];
  59. }
  60. if (isTokenAutoRefreshEnabledNumber != nil) {
  61. // Update in-memory cache.
  62. self.isTokenAutoRefreshEnabledNumber = isTokenAutoRefreshEnabledNumber;
  63. // Return the value.
  64. return isTokenAutoRefreshEnabledNumber.boolValue;
  65. }
  66. // Fallback to the global data collection flag.
  67. if (self.firebaseApp) {
  68. return self.firebaseApp.isDataCollectionDefaultEnabled;
  69. } else {
  70. // If `self.firebaseApp == nil`, then the app has been de-initialized. No auto-refresh in this
  71. // case.
  72. return NO;
  73. }
  74. }
  75. }
  76. - (void)setIsTokenAutoRefreshEnabled:(BOOL)isTokenAutoRefreshEnabled {
  77. @synchronized(self) {
  78. self.isTokenAutoRefreshEnabledNumber = @(isTokenAutoRefreshEnabled);
  79. [self.userDefaults setObject:self.isTokenAutoRefreshEnabledNumber forKey:self.userDefaultKey];
  80. }
  81. }
  82. @end
  83. NS_ASSUME_NONNULL_END