Skip to content

Commit cf16008

Browse files
committed
add log with INTERNAL_ERROR
Log more exception fill logic with condition
1 parent f7eab29 commit cf16008

File tree

3 files changed

+518
-501
lines changed

3 files changed

+518
-501
lines changed

GoogleSignIn/Impl/GoogleSignInImpl.cs

+13-6
Original file line numberDiff line numberDiff line change
@@ -187,19 +187,26 @@ static void GoogleSignIn_Signout(HandleRef self)
187187
internal static IntPtr GoogleSignIn_Result(HandleRef self) => googleIdTokenCredential.GetRawObject();
188188

189189
internal static int GoogleSignIn_Status(HandleRef self) => GoogleSignInHelper.CallStatic<int>("getStatus");
190-
190+
191191
internal static string GoogleSignIn_GetServerAuthCode(HandleRef self) => authorizationResult?.Call<string>("getServerAuthCode");
192192

193193
internal static string GoogleSignIn_GetUserId(HandleRef self)
194194
{
195195
try
196196
{
197-
var idTokenPart = googleIdTokenCredential?.Call<string>("getIdToken")?.Split('.')?.ElementAtOrDefault(1);
198-
if(!(idTokenPart?.Length is int length && length > 1))
197+
string idToken = googleIdTokenCredential?.Call<string>("getIdToken");
198+
string idTokenPart = idToken?.Split('.')?.ElementAtOrDefault(1);
199+
if(!(idTokenPart?.Length > 1))
199200
return null;
200201

201-
string fill = new string('=',(4 - (idTokenPart.Length % 4)) % 4);
202-
var jobj = Newtonsoft.Json.Linq.JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(idTokenPart + fill)));
202+
// Replace URL-safe characters and fix padding
203+
idTokenPart = idTokenPart.Replace('-', '+').Replace('_', '/');
204+
int mod = idTokenPart.Length % 4;
205+
if(mod > 0)
206+
idTokenPart += new string('=',4 - mod);
207+
var idTokenFromBase64 = Convert.FromBase64String(idTokenPart);
208+
var idToken = Encoding.UTF8.GetString(idTokenFromBase64);
209+
var jobj = Newtonsoft.Json.Linq.JObject.Parse(idToken);
203210
return jobj?["sub"]?.ToString();
204211
}
205212
catch(Exception e)
@@ -293,7 +300,7 @@ internal static extern UIntPtr GoogleSignIn_GetServerAuthCode(
293300

294301
[DllImport(DllName)]
295302
internal static extern UIntPtr GoogleSignIn_GetUserId(HandleRef self, [In, Out] byte[] bytes, UIntPtr len);
296-
303+
297304
internal static string GoogleSignIn_GetServerAuthCode(HandleRef self) =>
298305
OutParamsToString((out_string, out_size) => GoogleSignIn_GetServerAuthCode(self, out_string, out_size));
299306

0 commit comments

Comments
 (0)