From b78ab31a631f611cc17e8994ef7090eb06284923 Mon Sep 17 00:00:00 2001 From: AlvinT Date: Wed, 5 Apr 2023 15:49:06 +0800 Subject: [PATCH] Moved google auth initialize methods from the load function to the initialize function for users to add scopes on the fly --- .../capacitor/GoogleAuth/GoogleAuth.java | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/android/src/main/java/com/codetrixstudio/capacitor/GoogleAuth/GoogleAuth.java b/android/src/main/java/com/codetrixstudio/capacitor/GoogleAuth/GoogleAuth.java index d700c3b..9b3dd84 100644 --- a/android/src/main/java/com/codetrixstudio/capacitor/GoogleAuth/GoogleAuth.java +++ b/android/src/main/java/com/codetrixstudio/capacitor/GoogleAuth/GoogleAuth.java @@ -51,23 +51,15 @@ public class GoogleAuth extends Plugin { private GoogleSignInClient googleSignInClient; - @Override - public void load() { - String clientId = getConfig().getString("androidClientId", - getConfig().getString("clientId", - this.getContext().getString(R.string.server_client_id))); - - boolean forceCodeForRefreshToken = getConfig().getBoolean("forceCodeForRefreshToken", false); - + public void loadSignInClient (String clientId, boolean forceCodeForRefreshToken, String[] scopeArray) { GoogleSignInOptions.Builder googleSignInBuilder = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) - .requestIdToken(clientId) - .requestEmail(); + .requestIdToken(clientId) + .requestEmail(); if (forceCodeForRefreshToken) { googleSignInBuilder.requestServerAuthCode(clientId, true); } - String[] scopeArray = getConfig().getArray("scopes", new String[] {}); Scope[] scopes = new Scope[scopeArray.length - 1]; Scope firstScope = new Scope(scopeArray[0]); for (int i = 1; i < scopeArray.length; i++) { @@ -79,6 +71,9 @@ public void load() { googleSignInClient = GoogleSignIn.getClient(this.getContext(), googleSignInOptions); } + @Override + public void load() {} + @PluginMethod() public void signIn(PluginCall call) { Intent signInIntent = googleSignInClient.getSignInIntent(); @@ -146,6 +141,31 @@ public void signOut(final PluginCall call) { @PluginMethod() public void initialize(final PluginCall call) { + // get data from config + String configClientId = getConfig().getString("androidClientId", + getConfig().getString("clientId", + this.getContext().getString(R.string.server_client_id))); + boolean configForceCodeForRefreshToken = getConfig().getBoolean("forceCodeForRefreshToken", false); + // need to get this as string so as to standardize with data from plugin call + String configScopeArray = getConfig().getString("scopes", new String()); + + // get client id from plugin call, fallback to be client id from config + String clientId = call.getData().getString("clientId", configClientId); + // get forceCodeForRefreshToken from call, fallback to be from config + boolean forceCodeForRefreshToken = call.getData().getBoolean("grantOfflineAccess", configForceCodeForRefreshToken); + // get scopes from call, fallback to be from config + String scopesStr = call.getData().getString("scopes", configScopeArray); + // replace all the symbols from parsing array as string + // leaving only scopes delimited by commas + String replacedScopesStr = scopesStr + .replaceAll("[\"\\[\\] ]", "") + // this is for scopes that are in the form of a url + .replace("\\", ""); + + // scope to be in the form of an array + String[] scopeArray = replacedScopesStr.split(","); + + loadSignInClient(clientId, forceCodeForRefreshToken, scopeArray); call.resolve(); }