aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/core
diff options
context:
space:
mode:
authorGravatar zxu <zxu@google.com>2018-02-20 12:25:39 -0500
committerGravatar GitHub <noreply@github.com>2018-02-20 12:25:39 -0500
commit7a4a2ea10844afd6a58dace46854fae74399f55c (patch)
treebb6115c271d6fac490cb5720a79fcc7de21d2de9 /Firestore/core
parenta9f3f35d483f1031ef2e2860aeda921f56e1bf08 (diff)
replacing FSTGetTokenResult by C++ Token implementation (#805)
* replacing Auth/FSTUser by C++ auth implementation * address changes * replacing FSTGetTokenResult by C++ Token implementation * address changes * address changes * fix another const& v.s. dispatch bug * fix more const& v.s. dispatch bug zxu123 committed * fix * passing by value in callback
Diffstat (limited to 'Firestore/core')
-rw-r--r--Firestore/core/src/firebase/firestore/auth/credentials_provider.h4
-rw-r--r--Firestore/core/src/firebase/firestore/auth/token.cc10
-rw-r--r--Firestore/core/src/firebase/firestore/auth/token.h19
-rw-r--r--Firestore/core/src/firebase/firestore/util/string_apple.h11
-rw-r--r--Firestore/core/test/firebase/firestore/auth/credentials_provider_test.cc6
-rw-r--r--Firestore/core/test/firebase/firestore/auth/empty_credentials_provider_test.cc5
-rw-r--r--Firestore/core/test/firebase/firestore/auth/firebase_credentials_provider_test.mm5
-rw-r--r--Firestore/core/test/firebase/firestore/auth/token_test.cc8
8 files changed, 54 insertions, 14 deletions
diff --git a/Firestore/core/src/firebase/firestore/auth/credentials_provider.h b/Firestore/core/src/firebase/firestore/auth/credentials_provider.h
index 2a52c99..917f8e1 100644
--- a/Firestore/core/src/firebase/firestore/auth/credentials_provider.h
+++ b/Firestore/core/src/firebase/firestore/auth/credentials_provider.h
@@ -31,11 +31,11 @@ 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(const Token& token, const absl::string_view error)>
+typedef std::function<void(Token token, const absl::string_view error)>
TokenListener;
// Listener notified with a User change.
-typedef std::function<void(const User& user)> UserChangeListener;
+typedef std::function<void(User user)> UserChangeListener;
/**
* Provides methods for getting the uid and token for the current user and
diff --git a/Firestore/core/src/firebase/firestore/auth/token.cc b/Firestore/core/src/firebase/firestore/auth/token.cc
index 0618ddb..4ee1b69 100644
--- a/Firestore/core/src/firebase/firestore/auth/token.cc
+++ b/Firestore/core/src/firebase/firestore/auth/token.cc
@@ -21,7 +21,15 @@ namespace firestore {
namespace auth {
Token::Token(const absl::string_view token, const User& user)
- : token_(token), user_(user) {
+ : token_(token), user_(user), is_valid_(true) {
+}
+
+Token::Token() : token_(), user_(User::Unauthenticated()), is_valid_(false) {
+}
+
+const Token& Token::Invalid() {
+ static const Token kInvalidToken;
+ return kInvalidToken;
}
} // namespace auth
diff --git a/Firestore/core/src/firebase/firestore/auth/token.h b/Firestore/core/src/firebase/firestore/auth/token.h
index f3b7363..ff8d2f0 100644
--- a/Firestore/core/src/firebase/firestore/auth/token.h
+++ b/Firestore/core/src/firebase/firestore/auth/token.h
@@ -20,6 +20,7 @@
#include <string>
#include "Firestore/core/src/firebase/firestore/auth/user.h"
+#include "Firestore/core/src/firebase/firestore/util/firebase_assert.h"
#include "absl/strings/string_view.h"
namespace firebase {
@@ -45,6 +46,7 @@ class Token {
/** The actual raw token. */
const std::string& token() const {
+ FIREBASE_ASSERT(is_valid_);
return token_;
}
@@ -56,9 +58,26 @@ class Token {
return user_;
}
+ /**
+ * Whether the token is a valid one.
+ *
+ * ## Portability notes: Invalid token is the equivalent of nil in the iOS
+ * token implementation. We use value instead of pointer for Token instance in
+ * the C++ migration.
+ */
+ bool is_valid() const {
+ return is_valid_;
+ }
+
+ /** Returns an invalid token. */
+ static const Token& Invalid();
+
private:
+ Token();
+
const std::string token_;
const User user_;
+ const bool is_valid_;
};
} // namespace auth
diff --git a/Firestore/core/src/firebase/firestore/util/string_apple.h b/Firestore/core/src/firebase/firestore/util/string_apple.h
index fe2a487..3f6b814 100644
--- a/Firestore/core/src/firebase/firestore/util/string_apple.h
+++ b/Firestore/core/src/firebase/firestore/util/string_apple.h
@@ -42,7 +42,16 @@ inline NSString* WrapNSStringNoCopy(const absl::string_view str) {
return WrapNSStringNoCopy(str.data());
}
-// Creates an absl::string_view wrapper for the contents of the given NSString.
+// Translates a string_view string to the equivalent NSString by making a copy.
+inline NSString* WrapNSString(const absl::string_view str) {
+ return [[NSString alloc]
+ initWithBytes:const_cast<void*>(static_cast<const void*>(str.data()))
+ length:str.length()
+ encoding:NSUTF8StringEncoding];
+}
+
+// Creates an absl::string_view wrapper for the contents of the given
+// NSString.
inline absl::string_view MakeStringView(NSString* str) {
return absl::string_view(
[str UTF8String], [str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
diff --git a/Firestore/core/test/firebase/firestore/auth/credentials_provider_test.cc b/Firestore/core/test/firebase/firestore/auth/credentials_provider_test.cc
index 1748422..9ae71ba 100644
--- a/Firestore/core/test/firebase/firestore/auth/credentials_provider_test.cc
+++ b/Firestore/core/test/firebase/firestore/auth/credentials_provider_test.cc
@@ -25,7 +25,7 @@ namespace auth {
#define UNUSED(x) (void)(x)
TEST(CredentialsProvider, Typedef) {
- TokenListener token_listener = [](const Token& token,
+ TokenListener token_listener = [](Token token,
const absl::string_view error) {
UNUSED(token);
UNUSED(error);
@@ -37,9 +37,7 @@ TEST(CredentialsProvider, Typedef) {
EXPECT_EQ(nullptr, token_listener);
EXPECT_FALSE(token_listener);
- UserChangeListener user_change_listener = [](const User& user) {
- UNUSED(user);
- };
+ UserChangeListener user_change_listener = [](User user) { UNUSED(user); };
EXPECT_NE(nullptr, user_change_listener);
EXPECT_TRUE(user_change_listener);
diff --git a/Firestore/core/test/firebase/firestore/auth/empty_credentials_provider_test.cc b/Firestore/core/test/firebase/firestore/auth/empty_credentials_provider_test.cc
index 123f952..39012f0 100644
--- a/Firestore/core/test/firebase/firestore/auth/empty_credentials_provider_test.cc
+++ b/Firestore/core/test/firebase/firestore/auth/empty_credentials_provider_test.cc
@@ -25,8 +25,7 @@ namespace auth {
TEST(EmptyCredentialsProvider, GetToken) {
EmptyCredentialsProvider credentials_provider;
credentials_provider.GetToken(
- /*force_refresh=*/true,
- [](const Token& token, const absl::string_view error) {
+ /*force_refresh=*/true, [](Token token, const absl::string_view error) {
EXPECT_EQ("", token.token());
const User& user = token.user();
EXPECT_EQ("", user.uid());
@@ -37,7 +36,7 @@ TEST(EmptyCredentialsProvider, GetToken) {
TEST(EmptyCredentialsProvider, SetListener) {
EmptyCredentialsProvider credentials_provider;
- credentials_provider.SetUserChangeListener([](const User& user) {
+ credentials_provider.SetUserChangeListener([](User user) {
EXPECT_EQ("", user.uid());
EXPECT_FALSE(user.is_authenticated());
});
diff --git a/Firestore/core/test/firebase/firestore/auth/firebase_credentials_provider_test.mm b/Firestore/core/test/firebase/firestore/auth/firebase_credentials_provider_test.mm
index 8d2b361..e98d3d8 100644
--- a/Firestore/core/test/firebase/firestore/auth/firebase_credentials_provider_test.mm
+++ b/Firestore/core/test/firebase/firestore/auth/firebase_credentials_provider_test.mm
@@ -65,8 +65,7 @@ TEST_F(FirebaseCredentialsProviderTest, GetToken) {
FirebaseCredentialsProvider credentials_provider([FIRApp defaultApp]);
credentials_provider.GetToken(
- /*force_refresh=*/true,
- [](const Token& token, const absl::string_view error) {
+ /*force_refresh=*/true, [](Token token, const absl::string_view error) {
EXPECT_EQ("", token.token());
const User& user = token.user();
EXPECT_EQ("I'm a fake uid.", user.uid());
@@ -82,7 +81,7 @@ TEST_F(FirebaseCredentialsProviderTest, SetListener) {
}
FirebaseCredentialsProvider credentials_provider([FIRApp defaultApp]);
- credentials_provider.SetUserChangeListener([](const User& user) {
+ credentials_provider.SetUserChangeListener([](User user) {
EXPECT_EQ("I'm a fake uid.", user.uid());
EXPECT_TRUE(user.is_authenticated());
});
diff --git a/Firestore/core/test/firebase/firestore/auth/token_test.cc b/Firestore/core/test/firebase/firestore/auth/token_test.cc
index a0f2c48..8f784d6 100644
--- a/Firestore/core/test/firebase/firestore/auth/token_test.cc
+++ b/Firestore/core/test/firebase/firestore/auth/token_test.cc
@@ -26,6 +26,14 @@ TEST(Token, Getter) {
Token token("token", User("abc"));
EXPECT_EQ("token", token.token());
EXPECT_EQ(User("abc"), token.user());
+ EXPECT_TRUE(token.is_valid());
+}
+
+TEST(Token, InvalidToken) {
+ const Token& token = Token::Invalid();
+ EXPECT_ANY_THROW(token.token());
+ EXPECT_EQ(User::Unauthenticated(), token.user());
+ EXPECT_FALSE(token.is_valid());
}
} // namespace auth