Skip to content

Commit 2e011bc

Browse files
committed
remove the appcheckprovider limited from android
The limited use token is not provided in the appcheck provider class
1 parent 0461c19 commit 2e011bc

File tree

4 files changed

+27
-91
lines changed

4 files changed

+27
-91
lines changed

app_check/src/android/app_check_android.cc

Lines changed: 22 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ namespace internal {
4848
X(GetToken, "getAppCheckToken", \
4949
"(Z)Lcom/google/android/gms/tasks/Task;"), \
5050
X(GetLimitedUseToken, "getLimitedUseAppCheckToken", \
51-
"()Lcom/google/android/gms/tasks/Task;"), \
51+
"()Lcom/google/android/gms/tasks/Task;", \
52+
util::kMethodTypeInstance, util::kMethodOptional), \
5253
X(AddAppCheckListener, "addAppCheckListener", \
5354
"(Lcom/google/firebase/appcheck/FirebaseAppCheck$AppCheckListener;)V"), \
5455
X(RemoveAppCheckListener, "removeAppCheckListener", \
@@ -111,17 +112,10 @@ JNIEXPORT void JNICALL JniAppCheckProvider_nativeGetToken(
111112
JNIEnv* env, jobject j_provider, jlong c_provider,
112113
jobject task_completion_source);
113114

114-
JNIEXPORT void JNICALL JniAppCheckProvider_nativeGetLimitedUseToken(
115-
JNIEnv* env, jobject j_provider, jlong c_provider,
116-
jobject task_completion_source);
117-
118115
static const JNINativeMethod kNativeJniAppCheckProviderMethods[] = {
119116
{"nativeGetToken",
120117
"(JLcom/google/android/gms/tasks/TaskCompletionSource;)V",
121-
reinterpret_cast<void*>(JniAppCheckProvider_nativeGetToken)},
122-
{"nativeGetLimitedUseToken",
123-
"(JLcom/google/android/gms/tasks/TaskCompletionSource;)V",
124-
reinterpret_cast<void*>(JniAppCheckProvider_nativeGetLimitedUseToken)}};
118+
reinterpret_cast<void*>(JniAppCheckProvider_nativeGetToken)}};
125119

126120
// clang-format off
127121
#define JNI_APP_CHECK_LISTENER_METHODS(X) \
@@ -269,39 +263,6 @@ JNIEXPORT void JNICALL JniAppCheckProvider_nativeGetToken(
269263
provider->GetToken(token_callback);
270264
}
271265

272-
JNIEXPORT void JNICALL JniAppCheckProvider_nativeGetLimitedUseToken(
273-
JNIEnv* env, jobject j_provider, jlong c_provider,
274-
jobject task_completion_source) {
275-
// Create GlobalReferences to the provider and task. These references will be
276-
// deleted in the completion callback.
277-
jobject j_provider_global = env->NewGlobalRef(j_provider);
278-
jobject task_completion_source_global =
279-
env->NewGlobalRef(task_completion_source);
280-
281-
// Defines a C++ callback method to call
282-
// JniAppCheckProvider.HandleGetTokenResult with the resulting token
283-
auto token_callback{[j_provider_global, task_completion_source_global](
284-
firebase::app_check::AppCheckToken token,
285-
int error_code, const std::string& error_message) {
286-
// util::GetJNIEnvFromApp returns a threadsafe instance of JNIEnv.
287-
JNIEnv* env = firebase::util::GetJNIEnvFromApp();
288-
jstring error_string = env->NewStringUTF(error_message.c_str());
289-
jstring token_string = env->NewStringUTF(token.token.c_str());
290-
env->CallVoidMethod(
291-
j_provider_global,
292-
jni_provider::GetMethodId(jni_provider::kHandleGetTokenResult),
293-
task_completion_source_global, token_string, token.expire_time_millis,
294-
error_code, error_string);
295-
FIREBASE_ASSERT(!util::CheckAndClearJniExceptions(env));
296-
env->DeleteLocalRef(token_string);
297-
env->DeleteLocalRef(error_string);
298-
env->DeleteGlobalRef(j_provider_global);
299-
env->DeleteGlobalRef(task_completion_source_global);
300-
}};
301-
AppCheckProvider* provider = reinterpret_cast<AppCheckProvider*>(c_provider);
302-
provider->GetLimitedUseToken(token_callback);
303-
}
304-
305266
JNIEXPORT void JNICALL JniAppCheckListener_nativeOnAppCheckTokenChanged(
306267
JNIEnv* env, jobject clazz, jlong c_app_check, jobject token) {
307268
auto app_check_internal = reinterpret_cast<AppCheckInternal*>(c_app_check);
@@ -492,21 +453,27 @@ Future<AppCheckToken> AppCheckInternal::GetLimitedUseAppCheckToken() {
492453
JNIEnv* env = app_->GetJNIEnv();
493454
auto handle =
494455
future()->SafeAlloc<AppCheckToken>(kAppCheckFnGetLimitedUseAppCheckToken);
495-
jobject j_task = env->CallObjectMethod(
496-
app_check_impl_, app_check::GetMethodId(app_check::kGetLimitedUseToken));
497-
498-
std::string error = util::GetAndClearExceptionMessage(env);
499-
if (error.empty()) {
500-
auto data_handle = new FutureDataHandle(future(), handle);
501-
util::RegisterCallbackOnTask(env, j_task, TokenResultCallback,
502-
reinterpret_cast<void*>(data_handle),
503-
jni_task_id_.c_str());
456+
jmethodID method_id = app_check::GetMethodId(app_check::kGetLimitedUseToken);
457+
if (method_id != nullptr) {
458+
jobject j_task = env->CallObjectMethod(app_check_impl_, method_id);
459+
460+
std::string error = util::GetAndClearExceptionMessage(env);
461+
if (error.empty()) {
462+
auto data_handle = new FutureDataHandle(future(), handle);
463+
util::RegisterCallbackOnTask(env, j_task, TokenResultCallback,
464+
reinterpret_cast<void*>(data_handle),
465+
jni_task_id_.c_str());
466+
} else {
467+
AppCheckToken empty_token;
468+
future()->CompleteWithResult(handle, kAppCheckErrorUnknown, error.c_str(),
469+
empty_token);
470+
}
471+
env->DeleteLocalRef(j_task);
504472
} else {
505-
AppCheckToken empty_token;
506-
future()->CompleteWithResult(handle, kAppCheckErrorUnknown, error.c_str(),
507-
empty_token);
473+
// Fall back to the standard getAppCheckToken() if
474+
// getLimitedUseAppCheckToken() is missing.
475+
return GetAppCheckToken(false);
508476
}
509-
env->DeleteLocalRef(j_task);
510477
return MakeFuture(future(), handle);
511478
}
512479

app_check/src/android/common_android.cc

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -164,25 +164,11 @@ void AndroidAppCheckProvider::GetToken(
164164
void AndroidAppCheckProvider::GetLimitedUseToken(
165165
std::function<void(AppCheckToken, int, const std::string&)>
166166
completion_callback) {
167-
JNIEnv* env = GetJniEnv();
168-
169-
jobject j_task = env->CallObjectMethod(
170-
android_provider_, app_check_provider::GetMethodId(
171-
app_check_provider::kGetLimitedUseToken));
172-
std::string error = util::GetAndClearExceptionMessage(env);
173-
if (error.empty()) {
174-
// Create an object to wrap the callback function
175-
TokenResultCallbackData* completion_callback_data =
176-
new TokenResultCallbackData(completion_callback);
177-
util::RegisterCallbackOnTask(
178-
env, j_task, TokenResultCallback,
179-
reinterpret_cast<void*>(completion_callback_data),
180-
jni_task_id_.c_str());
181-
} else {
182-
AppCheckToken empty_token;
183-
completion_callback(empty_token, kAppCheckErrorUnknown, error.c_str());
184-
}
185-
env->DeleteLocalRef(j_task);
167+
LogWarning(
168+
"GetLimitedUseToken() was called, but the AppCheckProvider interface on "
169+
"Android does not yet support limited-use tokens. Falling back to "
170+
"GetToken().");
171+
GetToken(completion_callback);
186172
}
187173

188174
} // namespace internal

app_check/src/android/common_android.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ namespace internal {
3333
// clang-format off
3434
#define APP_CHECK_PROVIDER_METHODS(X) \
3535
X(GetToken, "getToken", \
36-
"()Lcom/google/android/gms/tasks/Task;"), \
37-
X(GetLimitedUseToken, "getLimitedUseToken", \
3836
"()Lcom/google/android/gms/tasks/Task;")
3937
// clang-format on
4038

app_check/src_java/com/google/firebase/appcheck/internal/cpp/JniAppCheckProvider.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,6 @@ public Task<AppCheckToken> getToken() {
4141
return taskCompletionSource.getTask();
4242
}
4343

44-
public Task<AppCheckToken> getLimitedUseToken() {
45-
TaskCompletionSource<AppCheckToken> taskCompletionSource =
46-
new TaskCompletionSource<AppCheckToken>();
47-
// Call the C++ provider to get an AppCheckToken and set the task result.
48-
// The C++ code will call handleGetTokenResult with the resulting token.
49-
nativeGetLimitedUseToken(cProvider, taskCompletionSource);
50-
return taskCompletionSource.getTask();
51-
}
52-
5344
/**
5445
* Called by C++ with a token in order to complete the java task.
5546
*/
@@ -67,10 +58,4 @@ public void handleGetTokenResult(TaskCompletionSource<AppCheckToken> taskComplet
6758
*/
6859
private native void nativeGetToken(
6960
long cProvider, TaskCompletionSource<AppCheckToken> task_completion_source);
70-
71-
/**
72-
* This function is implemented in the AppCheck C++ library (app_check_android.cc).
73-
*/
74-
private native void nativeGetLimitedUseToken(
75-
long cProvider, TaskCompletionSource<AppCheckToken> task_completion_source);
7661
}

0 commit comments

Comments
 (0)