Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Auth deprecated methods removal #1575

Merged
merged 38 commits into from
May 3, 2024
Merged
Show file tree
Hide file tree
Changes from 37 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
b520ef5
Remove all deprecated functions and types from headers.
jonsimantov Apr 24, 2024
478afe5
Remove deprecated implementations, and move current_user logic.
jonsimantov Apr 24, 2024
fb61a71
Remove deprecated functionality from Android SDK
jonsimantov Apr 24, 2024
274e797
Remove deprecated functions and types from iOS SDK.
jonsimantov Apr 24, 2024
eb3fcfa
Remove common deprecated code and future Fns.
jonsimantov Apr 24, 2024
ac7b968
Remove deprecated tests from integration test.
jonsimantov Apr 24, 2024
94b8415
Remove all deprecated functions and such in desktop.
jonsimantov Apr 24, 2024
8b29bd7
Remove extraneous methods.
jonsimantov Apr 25, 2024
e196374
Fix more build issues.
jonsimantov Apr 25, 2024
c9d07b2
Fix integration test usage of deprecated methods.
jonsimantov Apr 26, 2024
61d584f
Add checks for invalid user to desktop impl.
jonsimantov Apr 26, 2024
369e1ea
Format code.
jonsimantov Apr 26, 2024
9cc3807
Fix Android build issues.
jonsimantov Apr 26, 2024
4dbe969
Add missing method back in.
jonsimantov Apr 26, 2024
149a4dd
Fix Doxygen warnings.
jonsimantov Apr 26, 2024
438a049
Remove deprecated call.
jonsimantov Apr 29, 2024
c49036e
Fix another bad deprecation
jonsimantov Apr 29, 2024
ec04360
Add release notes for removal
jonsimantov Apr 30, 2024
b009e32
Move UpdateEmail back to the right place.
jonsimantov Apr 30, 2024
3735ae1
Fix unit tests to refer to non-deprecated methods.
jonsimantov May 1, 2024
c1a58c1
Finish removing AuthCompletionHandle, and fix unit tests more.
jonsimantov May 1, 2024
07077a2
Merge branch 'main' into auth-deprecated-methods-removal
jonsimantov May 1, 2024
3cedb37
Format code.
jonsimantov May 1, 2024
7edb598
Fix build error.
jonsimantov May 1, 2024
0bf039e
Merge branch 'auth-deprecated-methods-removal' of https://github.com/…
jonsimantov May 1, 2024
7ff62c6
Fix more unit test issues.
jonsimantov May 1, 2024
804e2c8
Format code.
jonsimantov May 1, 2024
0586ee1
Merge branch 'main' into auth-deprecated-methods-removal
jonsimantov May 1, 2024
070290a
Fix unit test build errors.
jonsimantov May 1, 2024
2432351
Merge branch 'auth-deprecated-methods-removal' of https://github.com/…
jonsimantov May 1, 2024
39bd47f
Removed deprecated calls in unit tests.
jonsimantov May 1, 2024
a873748
Test build fixes.
jonsimantov May 1, 2024
8866064
Fix typo.
jonsimantov May 1, 2024
cd98b00
Format code.
jonsimantov May 1, 2024
ca68404
Fix a failing test.
jonsimantov May 2, 2024
599044a
Fix user test and pointer usage.
jonsimantov May 2, 2024
b300fa6
Fix tests.
jonsimantov May 2, 2024
af51ab7
Merge branch 'main' into auth-deprecated-methods-removal
jonsimantov May 2, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
893 changes: 12 additions & 881 deletions auth/integration_test/src/integration_test.cc

Large diffs are not rendered by default.

181 changes: 8 additions & 173 deletions auth/src/android/auth_android.cc
Original file line number Diff line number Diff line change
Expand Up @@ -447,26 +447,6 @@ Future<AuthResult> Auth::SignInWithCustomToken(const char* token) {
return MakeFuture(&futures, handle);
}

Future<User*> Auth::SignInWithCustomToken_DEPRECATED(const char* token) {
ReferenceCountedFutureImpl& futures = auth_data_->future_impl;
const auto handle =
futures.SafeAlloc<User*>(kAuthFn_SignInWithCustomToken_DEPRECATED);
JNIEnv* env = Env(auth_data_);

jstring j_token = env->NewStringUTF(token);
jobject pending_result = env->CallObjectMethod(
AuthImpl(auth_data_), auth::GetMethodId(auth::kSignInWithCustomToken),
j_token);
env->DeleteLocalRef(j_token);

if (!CheckAndCompleteFutureOnError(env, &futures, handle)) {
RegisterCallback(pending_result, handle, auth_data_,
ReadUserFromSignInResult);
env->DeleteLocalRef(pending_result);
}
return MakeFuture(&futures, handle);
}

Future<User> Auth::SignInWithCredential(const Credential& credential) {
ReferenceCountedFutureImpl& futures = auth_data_->future_impl;
const auto handle = futures.SafeAlloc<User>(kAuthFn_SignInWithCredential);
Expand All @@ -490,31 +470,6 @@ Future<User> Auth::SignInWithCredential(const Credential& credential) {
return MakeFuture(&futures, handle);
}

Future<User*> Auth::SignInWithCredential_DEPRECATED(
const Credential& credential) {
ReferenceCountedFutureImpl& futures = auth_data_->future_impl;
const auto handle =
futures.SafeAlloc<User*>(kAuthFn_SignInWithCredential_DEPRECATED);
JNIEnv* env = Env(auth_data_);

// If the credential itself is in an error state, don't try signing in.
if (credential.error_code_ != kAuthErrorNone) {
futures.Complete(handle, credential.error_code_,
credential.error_message_.c_str());
} else {
jobject pending_result = env->CallObjectMethod(
AuthImpl(auth_data_), auth::GetMethodId(auth::kSignInWithCredential),
CredentialFromImpl(credential.impl_));

if (!CheckAndCompleteFutureOnError(env, &futures, handle)) {
RegisterCallback(pending_result, handle, auth_data_,
ReadUserFromSignInResult);
env->DeleteLocalRef(pending_result);
}
}
return MakeFuture(&futures, handle);
}

Future<AuthResult> Auth::SignInAndRetrieveDataWithCredential(
const Credential& credential) {
ReferenceCountedFutureImpl& futures = auth_data_->future_impl;
Expand All @@ -539,41 +494,11 @@ Future<AuthResult> Auth::SignInAndRetrieveDataWithCredential(
return MakeFuture(&futures, handle);
}

Future<SignInResult> Auth::SignInAndRetrieveDataWithCredential_DEPRECATED(
const Credential& credential) {
ReferenceCountedFutureImpl& futures = auth_data_->future_impl;
const auto handle = futures.SafeAlloc<SignInResult>(
kAuthFn_SignInAndRetrieveDataWithCredential_DEPRECATED);
JNIEnv* env = Env(auth_data_);

// If the credential itself is in an error state, don't try signing in.
if (credential.error_code_ != kAuthErrorNone) {
futures.Complete(handle, credential.error_code_,
credential.error_message_.c_str());
} else {
jobject pending_result = env->CallObjectMethod(
AuthImpl(auth_data_), auth::GetMethodId(auth::kSignInWithCredential),
CredentialFromImpl(credential.impl_));

if (!CheckAndCompleteFutureOnError(env, &futures, handle)) {
RegisterCallback(pending_result, handle, auth_data_, ReadSignInResult);
env->DeleteLocalRef(pending_result);
}
}
return MakeFuture(&futures, handle);
}

Future<AuthResult> Auth::SignInWithProvider(FederatedAuthProvider* provider) {
FIREBASE_ASSERT_RETURN(Future<AuthResult>(), provider);
return provider->SignIn(auth_data_);
}

Future<SignInResult> Auth::SignInWithProvider_DEPRECATED(
FederatedAuthProvider* provider) {
FIREBASE_ASSERT_RETURN(Future<SignInResult>(), provider);
return provider->SignIn_DEPRECATED(auth_data_);
}

Future<AuthResult> Auth::SignInAnonymously() {
ReferenceCountedFutureImpl& futures = auth_data_->future_impl;
const auto handle = futures.SafeAlloc<AuthResult>(kAuthFn_SignInAnonymously);
Expand All @@ -590,24 +515,6 @@ Future<AuthResult> Auth::SignInAnonymously() {
return MakeFuture(&futures, handle);
}

Future<User*> Auth::SignInAnonymously_DEPRECATED() {
ReferenceCountedFutureImpl& futures = auth_data_->future_impl;
const auto handle =
futures.SafeAlloc<User*>(kAuthFn_SignInAnonymously_DEPRECATED);
JNIEnv* env = Env(auth_data_);

jobject pending_result = env->CallObjectMethod(
AuthImpl(auth_data_), auth::GetMethodId(auth::kSignInAnonymously));

if (!CheckAndCompleteFutureOnError(env, &futures, handle)) {
RegisterCallback(pending_result, handle, auth_data_,
ReadUserFromSignInResult);
env->DeleteLocalRef(pending_result);
}

return MakeFuture(&futures, handle);
}

Future<AuthResult> Auth::SignInWithEmailAndPassword(const char* email,
const char* password) {
ReferenceCountedFutureImpl& futures = auth_data_->future_impl;
Expand Down Expand Up @@ -640,39 +547,6 @@ Future<AuthResult> Auth::SignInWithEmailAndPassword(const char* email,
return MakeFuture(&futures, handle);
}

Future<User*> Auth::SignInWithEmailAndPassword_DEPRECATED(
const char* email, const char* password) {
ReferenceCountedFutureImpl& futures = auth_data_->future_impl;
const auto handle =
futures.SafeAlloc<User*>(kAuthFn_SignInWithEmailAndPassword_DEPRECATED);

if (!email || strlen(email) == 0 || !password || strlen(password) == 0) {
futures.Complete(handle,
(!email || strlen(email) == 0) ? kAuthErrorMissingEmail
: kAuthErrorMissingPassword,
kErrorEmptyEmailPassword);
return MakeFuture(&futures, handle);
}

JNIEnv* env = Env(auth_data_);
jstring j_email = env->NewStringUTF(email);
jstring j_password = env->NewStringUTF(password);
jobject pending_result = env->CallObjectMethod(
AuthImpl(auth_data_),
auth::GetMethodId(auth::kSignInWithEmailAndPassword), j_email,
j_password);
env->DeleteLocalRef(j_email);
env->DeleteLocalRef(j_password);

if (!CheckAndCompleteFutureOnError(env, &futures, handle)) {
RegisterCallback(pending_result, handle, auth_data_,
ReadUserFromSignInResult);
env->DeleteLocalRef(pending_result);
}

return MakeFuture(&futures, handle);
}

Future<AuthResult> Auth::CreateUserWithEmailAndPassword(const char* email,
const char* password) {
ReferenceCountedFutureImpl& futures = auth_data_->future_impl;
Expand Down Expand Up @@ -704,52 +578,11 @@ Future<AuthResult> Auth::CreateUserWithEmailAndPassword(const char* email,
return MakeFuture(&futures, handle);
}

Future<User*> Auth::CreateUserWithEmailAndPassword_DEPRECATED(
const char* email, const char* password) {
ReferenceCountedFutureImpl& futures = auth_data_->future_impl;
const auto handle = futures.SafeAlloc<User*>(
kAuthFn_CreateUserWithEmailAndPassword_DEPRECATED);

if (!email || strlen(email) == 0 || !password || strlen(password) == 0) {
futures.Complete(handle,
(!email || strlen(email) == 0) ? kAuthErrorMissingEmail
: kAuthErrorMissingPassword,
kErrorEmptyEmailPassword);
return MakeFuture(&futures, handle);
}
JNIEnv* env = Env(auth_data_);

jstring j_email = env->NewStringUTF(email);
jstring j_password = env->NewStringUTF(password);
jobject pending_result = env->CallObjectMethod(
AuthImpl(auth_data_),
auth::GetMethodId(auth::kCreateUserWithEmailAndPassword), j_email,
j_password);
env->DeleteLocalRef(j_email);
env->DeleteLocalRef(j_password);

if (!CheckAndCompleteFutureOnError(env, &futures, handle)) {
RegisterCallback(pending_result, handle, auth_data_,
ReadUserFromSignInResult);
env->DeleteLocalRef(pending_result);
}
return MakeFuture(&futures, handle);
}

User Auth::current_user() {
User* current_user = current_user_DEPRECATED();
if (current_user != nullptr) {
return *current_user;
if (!auth_data_) {
// Return an invalid user.
return User(nullptr);
}
// Return an invalid user.
return User(auth_data_);
}

// It's safe to return a direct pointer to `current_user` because that class
// holds nothing but a pointer to AuthData, which never changes.
// All User functions that require synchronization go through AuthData's mutex.
User* Auth::current_user_DEPRECATED() {
if (!auth_data_) return nullptr;
MutexLock lock(auth_data_->future_impl.mutex());

// auth_data_->current_user should be available after Auth is created because
Expand All @@ -758,9 +591,11 @@ User* Auth::current_user_DEPRECATED() {
// persistent loading. However, it is safe to access auth_data_->current_user
// here since FirebaseAuth.getCurrentUser() (Android) is called in
// InitPlatformAuth().
User* user =
auth_data_->user_impl == nullptr ? nullptr : &auth_data_->current_user;
return user;
if (auth_data_->user_impl == nullptr) {
// return an invalid user.
return User(nullptr);
}
return auth_data_->current_user;
}

std::string Auth::language_code() const {
Expand Down
61 changes: 0 additions & 61 deletions auth/src/android/common_android.cc
Original file line number Diff line number Diff line change
Expand Up @@ -510,42 +510,6 @@ void ReadAuthResult(jobject result, FutureCallbackData<AuthResult>* d,
}
}

// The `ReadFutureResultFn` for `SignIn` APIs.
// Reads the `AuthResult` in `result` and initialize the `User*` in `void_data`.
void ReadSignInResult(jobject result, FutureCallbackData<SignInResult>* d,
bool success, void* void_data) {
JNIEnv* env = Env(d->auth_data);

// Update the currently signed-in user on success.
// Note: `result` is only valid when success is true.
if (success && result != nullptr) {
// `result` is of type AuthResult.
const jobject j_user = env->CallObjectMethod(
result, authresult::GetMethodId(authresult::kGetUser));
util::CheckAndClearJniExceptions(env);

// Update our pointer to the Android FirebaseUser that we're wrapping.
// Note: Cannot call UpdateCurrentUser(d->auth_data) because the Java
// Auth class has not been updated at this point.
SetImplFromLocalRef(env, j_user, &d->auth_data->user_impl);

// Grab the additional user info too.
// Additional user info is not guaranteed to exist, so could be nullptr.
const jobject j_additional_user_info = env->CallObjectMethod(
result, authresult::GetMethodId(authresult::kGetAdditionalUserInfo));
util::CheckAndClearJniExceptions(env);

// If additional user info exists, assume that the returned data is of
// type SignInResult (as opposed to just User*).
SignInResult* sign_in_result = static_cast<SignInResult*>(void_data);

// Return a pointer to the user and gather the additional data.
sign_in_result->user = d->auth_data->auth->current_user_DEPRECATED();
ReadAdditionalUserInfo(env, j_additional_user_info, &sign_in_result->info);
env->DeleteLocalRef(j_additional_user_info);
}
}

void ReadUserFromAuthResult(jobject result, FutureCallbackData<User>* d,
bool success, void* void_data) {
JNIEnv* env = Env(d->auth_data);
Expand All @@ -568,30 +532,5 @@ void ReadUserFromAuthResult(jobject result, FutureCallbackData<User>* d,
*user_ptr = d->auth_data->auth->current_user();
}

// The `ReadFutureResultFn` for `SignIn` APIs.
// Reads the `AuthResult` in `result` and initialize the `User*` in `void_data`.
void ReadUserFromSignInResult(jobject result, FutureCallbackData<User*>* d,
bool success, void* void_data) {
JNIEnv* env = Env(d->auth_data);

// Update the currently signed-in user on success.
// Note: `result` is only valid when success is true.
if (success && result != nullptr) {
// `result` is of type AuthResult.
const jobject j_user = env->CallObjectMethod(
result, authresult::GetMethodId(authresult::kGetUser));
util::CheckAndClearJniExceptions(env);

// Update our pointer to the Android FirebaseUser that we're wrapping.
// Note: Cannot call UpdateCurrentUser(d->auth_data) because the Java
// Auth class has not been updated at this point.
SetImplFromLocalRef(env, j_user, &d->auth_data->user_impl);
}

// Return a pointer to the current user, if the current user is valid.
User** user_ptr = static_cast<User**>(void_data);
*user_ptr = d->auth_data->auth->current_user_DEPRECATED();
}

} // namespace auth
} // namespace firebase
11 changes: 0 additions & 11 deletions auth/src/android/common_android.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,22 +91,11 @@ struct FutureCallbackData {
void ReadAuthResult(jobject result, FutureCallbackData<AuthResult>* d,
bool success, void* void_data);

// The `ReadFutureResultFn` for `SignIn` APIs.
// Reads the `AuthResult` in `result` and initialize the `User*` in `void_data`.
void ReadSignInResult(jobject result, FutureCallbackData<SignInResult>* d,
bool success, void* void_data);

// The `ReadFutureResultFn` for `SignIn` APIs.
// Reads the `AuthResult` in `result` and initializes the `User` in `void_data`.
void ReadUserFromAuthResult(jobject result, FutureCallbackData<User>* d,
bool success, void* void_data);

// The `ReadFutureResultFn` for `SignIn` APIs.
// Reads the `AuthResult` in `result` and initializes the `User*` in
// `void_data`.
void ReadUserFromSignInResult(jobject result, FutureCallbackData<User*>* d,
bool success, void* void_data);

inline void ReadAdditionalUserInfo(JNIEnv* env, jobject j_additional_user_info,
AdditionalUserInfo* info) {
if (j_additional_user_info == nullptr) {
Expand Down
Loading
Loading