From 436a59abdabf11b6938a79c30961e64beb827727 Mon Sep 17 00:00:00 2001 From: yamarkz Date: Mon, 6 Apr 2020 12:28:25 +0900 Subject: [PATCH 1/4] implement server-auth-code-interface --- .../lib/src/types.dart | 41 +++++++++++++++---- .../lib/src/utils.dart | 13 +++--- .../method_channel_google_sign_in_test.dart | 6 ++- 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/packages/google_sign_in/google_sign_in_platform_interface/lib/src/types.dart b/packages/google_sign_in/google_sign_in_platform_interface/lib/src/types.dart index d69beb38a104..bbe68b7c8fde 100644 --- a/packages/google_sign_in/google_sign_in_platform_interface/lib/src/types.dart +++ b/packages/google_sign_in/google_sign_in_platform_interface/lib/src/types.dart @@ -26,8 +26,14 @@ enum SignInOption { class GoogleSignInUserData { /// Uses the given data to construct an instance. Any of these parameters /// could be null. - GoogleSignInUserData( - {this.displayName, this.email, this.id, this.photoUrl, this.idToken}); + GoogleSignInUserData({ + this.displayName, + this.email, + this.id, + this.photoUrl, + this.idToken, + this.serverAuthCode, + }); /// The display name of the signed in user. /// @@ -62,9 +68,19 @@ class GoogleSignInUserData { /// data. String idToken; + /// A serverAuthCode that can be sent to your own server to verify + /// the authentication data. + String serverAuthCode; + @override - int get hashCode => - hashObjects([displayName, email, id, photoUrl, idToken]); + int get hashCode => hashObjects([ + displayName, + email, + id, + photoUrl, + idToken, + serverAuthCode, + ]); @override bool operator ==(dynamic other) { @@ -75,14 +91,19 @@ class GoogleSignInUserData { otherUserData.email == email && otherUserData.id == id && otherUserData.photoUrl == photoUrl && - otherUserData.idToken == idToken; + otherUserData.idToken == idToken && + otherUserData.serverAuthCode == serverAuthCode; } } /// Holds authentication data after sign in. class GoogleSignInTokenData { /// Either or both parameters may be null. - GoogleSignInTokenData({this.idToken, this.accessToken}); + GoogleSignInTokenData({ + this.idToken, + this.accessToken, + this.serverAuthCode, + }); /// An OpenID Connect ID token for the authenticated user. String idToken; @@ -90,8 +111,11 @@ class GoogleSignInTokenData { /// The OAuth2 access token used to access Google services. String accessToken; + /// Server auth code used to access Google Login + String serverAuthCode; + @override - int get hashCode => hash2(idToken, accessToken); + int get hashCode => hash3(idToken, accessToken, serverAuthCode); @override bool operator ==(dynamic other) { @@ -99,6 +123,7 @@ class GoogleSignInTokenData { if (other is! GoogleSignInTokenData) return false; final GoogleSignInTokenData otherTokenData = other; return otherTokenData.idToken == idToken && - otherTokenData.accessToken == accessToken; + otherTokenData.accessToken == accessToken && + otherTokenData.serverAuthCode == serverAuthCode; } } diff --git a/packages/google_sign_in/google_sign_in_platform_interface/lib/src/utils.dart b/packages/google_sign_in/google_sign_in_platform_interface/lib/src/utils.dart index eb60f00cba63..5518c803a9f9 100644 --- a/packages/google_sign_in/google_sign_in_platform_interface/lib/src/utils.dart +++ b/packages/google_sign_in/google_sign_in_platform_interface/lib/src/utils.dart @@ -10,11 +10,13 @@ GoogleSignInUserData getUserDataFromMap(Map data) { return null; } return GoogleSignInUserData( - displayName: data['displayName'], - email: data['email'], - id: data['id'], - photoUrl: data['photoUrl'], - idToken: data['idToken']); + displayName: data['displayName'], + email: data['email'], + id: data['id'], + photoUrl: data['photoUrl'], + idToken: data['idToken'], + serverAuthCode: data['serverAuthCode'], + ); } /// Converts token data coming from native code into the proper platform interface type. @@ -25,5 +27,6 @@ GoogleSignInTokenData getTokenDataFromMap(Map data) { return GoogleSignInTokenData( idToken: data['idToken'], accessToken: data['accessToken'], + serverAuthCode: data['serverAuthCode'], ); } diff --git a/packages/google_sign_in/google_sign_in_platform_interface/test/method_channel_google_sign_in_test.dart b/packages/google_sign_in/google_sign_in_platform_interface/test/method_channel_google_sign_in_test.dart index 6a8f73736004..5b32554282d4 100644 --- a/packages/google_sign_in/google_sign_in_platform_interface/test/method_channel_google_sign_in_test.dart +++ b/packages/google_sign_in/google_sign_in_platform_interface/test/method_channel_google_sign_in_test.dart @@ -2,22 +2,24 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; import 'package:google_sign_in_platform_interface/google_sign_in_platform_interface.dart'; import 'package:google_sign_in_platform_interface/src/types.dart'; import 'package:google_sign_in_platform_interface/src/utils.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; const Map kUserData = { "email": "john.doe@gmail.com", "id": "8162538176523816253123", "photoUrl": "https://lh5.googleusercontent.com/photo.jpg", "displayName": "John Doe", + "serverAuthCode": "789", }; const Map kTokenData = { 'idToken': '123', 'accessToken': '456', + 'serverAuthCode': '789', }; const Map kDefaultResponses = { From 874a7aa5e7ccc5ba7e9437a2fa090eff74e89f82 Mon Sep 17 00:00:00 2001 From: yamarkz Date: Mon, 6 Apr 2020 16:58:21 +0900 Subject: [PATCH 2/4] update AUTHORS --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index b3957d26e36a..75848e05ba77 100644 --- a/AUTHORS +++ b/AUTHORS @@ -53,3 +53,4 @@ Nissim Dsilva Giancarlo Rocha Ryo Miyake Théo Champion +Kazuki Yamaguchi \ No newline at end of file From c39aabaf3ba5344136961cb7e5ddaf42f84f6d2a Mon Sep 17 00:00:00 2001 From: yamarkz Date: Mon, 6 Apr 2020 16:58:49 +0900 Subject: [PATCH 3/4] update package version --- .../google_sign_in_platform_interface/CHANGELOG.md | 4 ++++ .../google_sign_in_platform_interface/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/google_sign_in/google_sign_in_platform_interface/CHANGELOG.md b/packages/google_sign_in/google_sign_in_platform_interface/CHANGELOG.md index c0627df8c1da..c342c550c85a 100644 --- a/packages/google_sign_in/google_sign_in_platform_interface/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.1 + +* Add attribute serverAuthCode. + ## 1.1.0 * Add hasRequestedScope method to determine if an Oauth scope has been granted. diff --git a/packages/google_sign_in/google_sign_in_platform_interface/pubspec.yaml b/packages/google_sign_in/google_sign_in_platform_interface/pubspec.yaml index d1f7abc291c4..248471764605 100644 --- a/packages/google_sign_in/google_sign_in_platform_interface/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in_platform_interface/pubspec.yaml @@ -3,7 +3,7 @@ description: A common platform interface for the google_sign_in plugin. homepage: https://github.com/flutter/plugins/tree/master/packages/google_sign_in/google_sign_in_platform_interface # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 1.1.0 +version: 1.1.1 dependencies: flutter: From 33cbd53d1305b1c7e99a288e113d6c490c3dc470 Mon Sep 17 00:00:00 2001 From: yamarkz Date: Tue, 7 Apr 2020 10:50:34 +0900 Subject: [PATCH 4/4] remove serverAuthCode from GoogleSigninUserData class --- .../lib/src/types.dart | 27 ++++--------------- .../lib/src/utils.dart | 12 ++++----- .../method_channel_google_sign_in_test.dart | 1 - 3 files changed, 10 insertions(+), 30 deletions(-) diff --git a/packages/google_sign_in/google_sign_in_platform_interface/lib/src/types.dart b/packages/google_sign_in/google_sign_in_platform_interface/lib/src/types.dart index bbe68b7c8fde..c60402200bdd 100644 --- a/packages/google_sign_in/google_sign_in_platform_interface/lib/src/types.dart +++ b/packages/google_sign_in/google_sign_in_platform_interface/lib/src/types.dart @@ -26,14 +26,8 @@ enum SignInOption { class GoogleSignInUserData { /// Uses the given data to construct an instance. Any of these parameters /// could be null. - GoogleSignInUserData({ - this.displayName, - this.email, - this.id, - this.photoUrl, - this.idToken, - this.serverAuthCode, - }); + GoogleSignInUserData( + {this.displayName, this.email, this.id, this.photoUrl, this.idToken}); /// The display name of the signed in user. /// @@ -68,19 +62,9 @@ class GoogleSignInUserData { /// data. String idToken; - /// A serverAuthCode that can be sent to your own server to verify - /// the authentication data. - String serverAuthCode; - @override - int get hashCode => hashObjects([ - displayName, - email, - id, - photoUrl, - idToken, - serverAuthCode, - ]); + int get hashCode => + hashObjects([displayName, email, id, photoUrl, idToken]); @override bool operator ==(dynamic other) { @@ -91,8 +75,7 @@ class GoogleSignInUserData { otherUserData.email == email && otherUserData.id == id && otherUserData.photoUrl == photoUrl && - otherUserData.idToken == idToken && - otherUserData.serverAuthCode == serverAuthCode; + otherUserData.idToken == idToken; } } diff --git a/packages/google_sign_in/google_sign_in_platform_interface/lib/src/utils.dart b/packages/google_sign_in/google_sign_in_platform_interface/lib/src/utils.dart index 5518c803a9f9..1ae828604af6 100644 --- a/packages/google_sign_in/google_sign_in_platform_interface/lib/src/utils.dart +++ b/packages/google_sign_in/google_sign_in_platform_interface/lib/src/utils.dart @@ -10,13 +10,11 @@ GoogleSignInUserData getUserDataFromMap(Map data) { return null; } return GoogleSignInUserData( - displayName: data['displayName'], - email: data['email'], - id: data['id'], - photoUrl: data['photoUrl'], - idToken: data['idToken'], - serverAuthCode: data['serverAuthCode'], - ); + displayName: data['displayName'], + email: data['email'], + id: data['id'], + photoUrl: data['photoUrl'], + idToken: data['idToken']); } /// Converts token data coming from native code into the proper platform interface type. diff --git a/packages/google_sign_in/google_sign_in_platform_interface/test/method_channel_google_sign_in_test.dart b/packages/google_sign_in/google_sign_in_platform_interface/test/method_channel_google_sign_in_test.dart index 5b32554282d4..5ac34ade1b8d 100644 --- a/packages/google_sign_in/google_sign_in_platform_interface/test/method_channel_google_sign_in_test.dart +++ b/packages/google_sign_in/google_sign_in_platform_interface/test/method_channel_google_sign_in_test.dart @@ -13,7 +13,6 @@ const Map kUserData = { "id": "8162538176523816253123", "photoUrl": "https://lh5.googleusercontent.com/photo.jpg", "displayName": "John Doe", - "serverAuthCode": "789", }; const Map kTokenData = {