diff options
author | zxu <zxu@google.com> | 2018-02-27 14:04:39 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-27 14:04:39 -0500 |
commit | 3e7c062f3baca83fae1937bf60865be0cd18f96d (patch) | |
tree | b9816a635f0deda9601496b0d41f6b064f99d838 /Firestore/core/src/firebase/firestore/auth | |
parent | 13aeb61de4fac4c0239bcf44a98a7d3aa9203963 (diff) |
replacing Auth by C++ auth implementation (#802)
* lazy replacing FST(Firebase)CredentialsProvider by (Firebase)CredentialsProvider
* lazy replacing FSTUser by User
* adding error-code parameter to TokenListener
* actually use const user& instead of pointer; also add an error util
* add HashUser and pass into the unordered_map
* use User in test
* use c++ CredentialsProvider and subclass in test
* fix unit test
* use explicit capture in lambda instead of capture all by reference
* cache currentUser explicitly when reset sync engineer test driver
* objc object should be captured by value in lambda
* replacing Auth/FSTUser by C++ auth implementation
* address changes
* replacing FSTGetTokenResult by C++ Token implementation
* address changes
* fix unintentional change in merging
* patch the change in objc Auth up-stream
* somehow, the lambda-version of set-user-change-listener does not work... fallback to block
* address changes
* fix another const& v.s. dispatch bug
* fix more const& v.s. dispatch bug zxu123 committed
* fix a bad sync line
* address changes
* address change
* address change
* fix upstream change from merge
* fix upstream changes
* Suggested fixes for cpp/port_auth (#846)
* Get rid of MockDatastore factory
This avoids the need to statically allocate (and leak) a credentials
provider
* Use absl::make_unique
std::make_unique technically does not exist until C++14.
* #include <utility> for std::move
* Use std::future for the initial user
* fix style
Diffstat (limited to 'Firestore/core/src/firebase/firestore/auth')
3 files changed, 11 insertions, 6 deletions
diff --git a/Firestore/core/src/firebase/firestore/auth/credentials_provider.h b/Firestore/core/src/firebase/firestore/auth/credentials_provider.h index 917f8e1..b9a8a24 100644 --- a/Firestore/core/src/firebase/firestore/auth/credentials_provider.h +++ b/Firestore/core/src/firebase/firestore/auth/credentials_provider.h @@ -20,6 +20,7 @@ #include <functional> #include <string> +#include "Firestore/core/include/firebase/firestore/firestore_errors.h" #include "Firestore/core/src/firebase/firestore/auth/token.h" #include "Firestore/core/src/firebase/firestore/auth/user.h" #include "absl/strings/string_view.h" @@ -30,8 +31,10 @@ namespace auth { // `TokenErrorListener` is a listener that gets a token or an error. // token: An auth token as a string, or nullptr if error occurred. -// error: The error if one occurred, or else nullptr. -typedef std::function<void(Token token, const absl::string_view error)> +// error_code: The error code if one occurred, or else FirestoreErrorCode::Ok. +// error_msg: The error if one occurred, or else nullptr. +typedef std::function<void( + Token token, const int64_t error_code, const absl::string_view error_msg)> TokenListener; // Listener notified with a User change. diff --git a/Firestore/core/src/firebase/firestore/auth/empty_credentials_provider.cc b/Firestore/core/src/firebase/firestore/auth/empty_credentials_provider.cc index 6ee7f61..0fa70c0 100644 --- a/Firestore/core/src/firebase/firestore/auth/empty_credentials_provider.cc +++ b/Firestore/core/src/firebase/firestore/auth/empty_credentials_provider.cc @@ -26,7 +26,8 @@ void EmptyCredentialsProvider::GetToken(bool force_refresh, TokenListener completion) { UNUSED(force_refresh); if (completion) { - completion({"", User::Unauthenticated()}, ""); + // Invalid token will force the GRPC fallback to use default settings. + completion(Token::Invalid(), FirestoreErrorCode::Ok, ""); } } diff --git a/Firestore/core/src/firebase/firestore/auth/firebase_credentials_provider_apple.mm b/Firestore/core/src/firebase/firestore/auth/firebase_credentials_provider_apple.mm index fe3cb24..1babe82 100644 --- a/Firestore/core/src/firebase/firestore/auth/firebase_credentials_provider_apple.mm +++ b/Firestore/core/src/firebase/firestore/auth/firebase_credentials_provider_apple.mm @@ -53,7 +53,7 @@ FirebaseCredentialsProvider::FirebaseCredentialsProvider(FIRApp* app) NSString* user_id = user_info[FIRAuthStateDidChangeInternalNotificationUIDKey]; - User new_user(util::MakeStringView(user_id)); + User new_user = User::FromUid(user_id); if (new_user != contents->current_user) { contents->current_user = new_user; contents->user_counter++; @@ -96,11 +96,12 @@ void FirebaseCredentialsProvider::GetToken(bool force_refresh, // Cancel the request since the user changed while the request was // outstanding so the response is likely for a previous user (which // user, we can't be sure). - completion({"", User::Unauthenticated()}, + completion(Token::Invalid(), FirestoreErrorCode::Aborted, "getToken aborted due to user change."); } else { completion( - {util::MakeStringView(token), contents->current_user}, + Token{util::MakeStringView(token), contents->current_user}, + error == nil ? FirestoreErrorCode::Ok : error.code, error == nil ? "" : util::MakeStringView(error.localizedDescription)); } }; |