mirror of
https://github.com/google/app-check
synced 2026-11-11 22:15:53 +05:45
feat: Only log local debug tokens when not yet registered (#95)
Co-authored-by: Nick Cooke <nickcooke@google.com>
This commit is contained in:
1 parent
f6b4582ed1
commit
bb4002485f
4 files changed
+187
-15
No files matched your search
@@ -36,18 +36,34 @@ static NSString *const kDebugTokenEnvKey = @"AppCheckDebugToken";
|
||||
static NSString *const kFirebaseDebugTokenEnvKey = @"FIRAAppCheckDebugToken";
|
||||
static NSString *const kDebugTokenUserDefaultsKey = @"GACAppCheckDebugToken";
|
||||
|
||||
// The base key for registration status.
|
||||
// NOTE: Do not use this key directly. Use `registeredUserDefaultsKeyForServiceName:resourceName:`
|
||||
// to obtain the namespaced key.
|
||||
static NSString *const kDebugTokenRegisteredUserDefaultsKey = @"GACAppCheckDebugTokenRegistered";
|
||||
|
||||
@interface GACAppCheckDebugProvider ()
|
||||
@property(nonatomic, readonly) id<GACAppCheckDebugProviderAPIServiceProtocol> APIService;
|
||||
@property(nonatomic, readonly, nullable, copy) NSString *debugTokenEnvValue;
|
||||
@property(nonatomic, readonly, copy) NSString *registeredUserDefaultsKey;
|
||||
|
||||
+ (NSString *)registeredUserDefaultsKeyForServiceName:(NSString *)serviceName
|
||||
resourceName:(NSString *)resourceName;
|
||||
@end
|
||||
|
||||
static NSString *_Nullable EnvironmentVariableDebugToken(NSString *registeredUserDefaultsKey);
|
||||
|
||||
@implementation GACAppCheckDebugProvider
|
||||
|
||||
- (instancetype)initWithAPIService:(id<GACAppCheckDebugProviderAPIServiceProtocol>)APIService {
|
||||
- (instancetype)initWithAPIService:(id<GACAppCheckDebugProviderAPIServiceProtocol>)APIService
|
||||
serviceName:(NSString *)serviceName
|
||||
resourceName:(NSString *)resourceName {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_APIService = APIService;
|
||||
_debugTokenEnvValue = EnvironmentVariableDebugToken();
|
||||
_registeredUserDefaultsKey =
|
||||
[[[self class] registeredUserDefaultsKeyForServiceName:serviceName
|
||||
resourceName:resourceName] copy];
|
||||
_debugTokenEnvValue = EnvironmentVariableDebugToken(_registeredUserDefaultsKey);
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@@ -70,7 +86,9 @@ static NSString *const kDebugTokenUserDefaultsKey = @"GACAppCheckDebugToken";
|
||||
[[GACAppCheckDebugProviderAPIService alloc] initWithAPIService:APIService
|
||||
resourceName:resourceName];
|
||||
|
||||
return [self initWithAPIService:debugAPIService];
|
||||
return [self initWithAPIService:debugAPIService
|
||||
serviceName:serviceName
|
||||
resourceName:resourceName];
|
||||
}
|
||||
|
||||
- (NSString *)currentDebugToken {
|
||||
@@ -108,6 +126,7 @@ static NSString *const kDebugTokenUserDefaultsKey = @"GACAppCheckDebugToken";
|
||||
return [self.APIService appCheckTokenWithDebugToken:debugToken limitedUse:limitedUse];
|
||||
})
|
||||
.then(^id(GACAppCheckToken *appCheckToken) {
|
||||
[[GULUserDefaults standardUserDefaults] setBool:YES forKey:self.registeredUserDefaultsKey];
|
||||
handler(appCheckToken, nil);
|
||||
return nil;
|
||||
})
|
||||
@@ -115,6 +134,10 @@ static NSString *const kDebugTokenUserDefaultsKey = @"GACAppCheckDebugToken";
|
||||
NSString *logMessage = [NSString
|
||||
stringWithFormat:@"Failed to exchange debug token to app check token: %@", error];
|
||||
GACAppCheckLogDebug(GACLoggerAppCheckMessageDebugProviderFailedExchange, logMessage);
|
||||
if (error.code != GACAppCheckErrorCodeServerUnreachable) {
|
||||
[[GULUserDefaults standardUserDefaults]
|
||||
removeObjectForKey:self.registeredUserDefaultsKey];
|
||||
}
|
||||
handler(nil, error);
|
||||
});
|
||||
}
|
||||
@@ -133,7 +156,19 @@ static NSString *GenerateAndStoreDebugToken(void) {
|
||||
return token;
|
||||
}
|
||||
|
||||
static NSString *_Nullable EnvironmentVariableDebugToken(void) {
|
||||
+ (NSString *)registeredUserDefaultsKeyForServiceName:(NSString *)serviceName
|
||||
resourceName:(NSString *)resourceName {
|
||||
NSString *safeServiceName = serviceName.length > 0 ? serviceName : @"default";
|
||||
NSString *safeResourceName = [resourceName stringByReplacingOccurrencesOfString:@"/"
|
||||
withString:@"_"];
|
||||
if (safeResourceName.length == 0) {
|
||||
safeResourceName = @"default";
|
||||
}
|
||||
return [NSString stringWithFormat:@"%@_%@_%@", kDebugTokenRegisteredUserDefaultsKey,
|
||||
safeServiceName, safeResourceName];
|
||||
}
|
||||
|
||||
static NSString *_Nullable EnvironmentVariableDebugToken(NSString *registeredUserDefaultsKey) {
|
||||
NSDictionary<NSString *, NSString *> *environment = [[NSProcessInfo processInfo] environment];
|
||||
NSString *envVariableValue = environment[kDebugTokenEnvKey];
|
||||
NSString *firebaseEnvVariableValue = environment[kFirebaseDebugTokenEnvKey];
|
||||
@@ -175,9 +210,14 @@ static NSString *_Nullable EnvironmentVariableDebugToken(void) {
|
||||
|
||||
return firebaseEnvVariableValue;
|
||||
} else {
|
||||
// Print only a locally generated token to avoid a valid token leak on CI.
|
||||
GACAppCheckLog(GACLoggerAppCheckMessageLocalDebugToken, GACAppCheckLogLevelWarning,
|
||||
[NSString stringWithFormat:@"App Check debug token: '%@'.", LocalDebugToken()]);
|
||||
BOOL isRegistered =
|
||||
[[GULUserDefaults standardUserDefaults] boolForKey:registeredUserDefaultsKey];
|
||||
if (!isRegistered) {
|
||||
// Print only a locally generated token to avoid a valid token leak on CI.
|
||||
GACAppCheckLog(
|
||||
GACLoggerAppCheckMessageLocalDebugToken, GACAppCheckLogLevelWarning,
|
||||
[NSString stringWithFormat:@"App Check debug token: '%@'.", LocalDebugToken()]);
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user