Skip to content

Commit c923524

Browse files
rosalyntanjeremyjiang-dev
authored andcommitted
Fix refresh logic for App Check custom providers. (#3582)
* Fix refresh logic for App Check custom providers. * Update tests. * Extract 1000L into a constant.
1 parent be5a7c1 commit c923524

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

appcheck/firebase-appcheck/src/main/java/com/google/firebase/appcheck/internal/DefaultAppCheckToken.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public final class DefaultAppCheckToken extends AppCheckToken {
4141
@VisibleForTesting static final String ISSUED_AT_KEY = "iat";
4242
@VisibleForTesting static final String EXPIRATION_TIME_KEY = "exp";
4343

44+
private static final long ONE_SECOND_MILLIS = 1000L;
45+
4446
// Raw token value
4547
private final String token;
4648
// Timestamp in MS at which this token was generated
@@ -79,7 +81,7 @@ public static DefaultAppCheckToken constructFromAppCheckTokenResponse(
7981
TokenParser.parseTokenClaims(tokenResponse.getAttestationToken());
8082
long iat = getLongFromClaimsSafely(claimsMap, ISSUED_AT_KEY);
8183
long exp = getLongFromClaimsSafely(claimsMap, EXPIRATION_TIME_KEY);
82-
expiresInMillis = exp - iat;
84+
expiresInMillis = (exp - iat) * ONE_SECOND_MILLIS;
8385
}
8486

8587
return new DefaultAppCheckToken(tokenResponse.getAttestationToken(), expiresInMillis);
@@ -138,10 +140,10 @@ public static DefaultAppCheckToken constructFromRawToken(@NonNull String token)
138140
Map<String, Object> claimsMap = TokenParser.parseTokenClaims(token);
139141
long iat = getLongFromClaimsSafely(claimsMap, ISSUED_AT_KEY);
140142
long exp = getLongFromClaimsSafely(claimsMap, EXPIRATION_TIME_KEY);
141-
long expiresInMillis = exp - iat;
143+
long expiresInMillis = (exp - iat) * ONE_SECOND_MILLIS;
142144
// We use iat for receivedAtTimestamp as an approximation since we have to guess for raw JWTs
143145
// that we recovered from storage
144-
return new DefaultAppCheckToken(token, expiresInMillis, iat);
146+
return new DefaultAppCheckToken(token, expiresInMillis, iat * ONE_SECOND_MILLIS);
145147
}
146148

147149
private static long getLongFromClaimsSafely(

appcheck/firebase-appcheck/src/test/java/com/google/firebase/appcheck/internal/DefaultAppCheckTokenTest.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class DefaultAppCheckTokenTest {
3737
private static final String INVALID_TIME_TO_LIVE = "notanumber";
3838
private static final long EXPIRES_IN_ONE_HOUR = 60L * 60L * 1000L; // 1 hour in millis
3939
private static final long RECEIVED_AT_TIMESTAMP = 1L;
40+
private static final long ONE_SECOND_MILLIS = 1000L;
4041
private static final long IAT = 10L;
4142
private static final long EXP = 30L;
4243
private static final String TOKEN_PREFIX = "prefix";
@@ -104,8 +105,9 @@ public void testConstructFromRawToken_normalToken_expectSuccess() throws Excepti
104105

105106
assertThat(defaultAppCheckToken).isNotNull();
106107
assertThat(defaultAppCheckToken.getToken()).isEqualTo(rawToken);
107-
assertThat(defaultAppCheckToken.getReceivedAtTimestamp()).isEqualTo(IAT);
108-
assertThat(defaultAppCheckToken.getExpiresInMillis()).isEqualTo(EXP - IAT);
108+
assertThat(defaultAppCheckToken.getReceivedAtTimestamp()).isEqualTo(IAT * ONE_SECOND_MILLIS);
109+
assertThat(defaultAppCheckToken.getExpiresInMillis())
110+
.isEqualTo((EXP - IAT) * ONE_SECOND_MILLIS);
109111
}
110112

111113
@Test
@@ -143,7 +145,8 @@ public void testConstructFromAppCheckTokenResponse_invalidTimeToLiveFormat_fallb
143145
DefaultAppCheckToken.constructFromAppCheckTokenResponse(mockAppCheckTokenResponse);
144146

145147
assertThat(defaultAppCheckToken.getToken()).isEqualTo(rawToken);
146-
assertThat(defaultAppCheckToken.getExpiresInMillis()).isEqualTo(EXP - IAT);
148+
assertThat(defaultAppCheckToken.getExpiresInMillis())
149+
.isEqualTo((EXP - IAT) * ONE_SECOND_MILLIS);
147150
}
148151

149152
private String constructFakeRawToken() throws Exception {

appcheck/firebase-appcheck/src/test/java/com/google/firebase/appcheck/internal/StorageHelperTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public class StorageHelperTest {
4040
private static final long RECEIVED_AT_TIMESTAMP = 10L;
4141
private static final long IAT = 10L;
4242
private static final long EXP = 30L;
43+
private static final long ONE_SECOND_MILLIS = 1000L;
4344
private static final String TOKEN_PREFIX = "prefix";
4445
private static final String TOKEN_SUFFIX = "suffix";
4546
private static final String SEPARATOR = ".";
@@ -108,8 +109,8 @@ public void testSaveAndRetrieveToken_TestAppCheckToken_expectEquivalentToken() t
108109
(DefaultAppCheckToken) storageHelper.retrieveAppCheckToken();
109110
assertThat(retrievedToken).isNotNull();
110111
assertThat(retrievedToken.getToken()).isEqualTo(rawToken);
111-
assertThat(retrievedToken.getExpiresInMillis()).isEqualTo(EXP - IAT);
112-
assertThat(retrievedToken.getReceivedAtTimestamp()).isEqualTo(IAT);
112+
assertThat(retrievedToken.getExpiresInMillis()).isEqualTo((EXP - IAT) * ONE_SECOND_MILLIS);
113+
assertThat(retrievedToken.getReceivedAtTimestamp()).isEqualTo(IAT * ONE_SECOND_MILLIS);
113114
}
114115

115116
@Test

0 commit comments

Comments
 (0)