From 15632cb15bcc42686e3990c6db0865764dc20869 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Fri, 24 Jul 2020 20:34:14 +0200 Subject: [PATCH] cmd/tailscale: sign-out any Google users when logging out from Tailscale Fixes tailscale/tailscale#585 Signed-off-by: Elias Naur --- .../src/main/java/com/tailscale/ipn/Peer.java | 7 +++++++ cmd/tailscale/main.go | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/android/src/main/java/com/tailscale/ipn/Peer.java b/android/src/main/java/com/tailscale/ipn/Peer.java index 984fec5..5260f07 100644 --- a/android/src/main/java/com/tailscale/ipn/Peer.java +++ b/android/src/main/java/com/tailscale/ipn/Peer.java @@ -56,6 +56,13 @@ public class Peer extends Fragment { super.onDestroy(); } + public void googleSignOut() { + GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) + .build(); + GoogleSignInClient client = GoogleSignIn.getClient(getActivity(), gso); + client.signOut(); + } + public void googleSignIn(String serverOAuthID) { GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(serverOAuthID) diff --git a/cmd/tailscale/main.go b/cmd/tailscale/main.go index dc4c407..e57ce65 100644 --- a/cmd/tailscale/main.go +++ b/cmd/tailscale/main.go @@ -606,6 +606,7 @@ func (a *App) processUIEvents(w *app.Window, events []UIEvent, peer jni.Object, a.store.WriteString(loginMethodPrefKey, loginMethodWeb) requestBackend(e) case LogoutEvent: + a.signOut(peer) requestBackend(e) case ConnectEvent: requestBackend(e) @@ -621,7 +622,22 @@ func (a *App) processUIEvents(w *app.Window, events []UIEvent, peer jni.Object, } } +func (a *App) signOut(peer jni.Object) { + if peer == 0 { + return + } + err := jni.Do(a.jvm, func(env jni.Env) error { + return a.callVoidMethod(peer, "googleSignOut", "()V") + }) + if err != nil { + fatalErr(err) + } +} + func (a *App) googleSignIn(peer jni.Object) { + if peer == 0 { + return + } err := jni.Do(a.jvm, func(env jni.Env) error { sid := jni.JavaString(env, serverOAuthID) return a.callVoidMethod(peer, "googleSignIn", "(Ljava/lang/String;)V", jni.Value(sid)) @@ -632,6 +648,9 @@ func (a *App) googleSignIn(peer jni.Object) { } func (a *App) browseToURL(peer jni.Object, url string) { + if peer == 0 { + return + } err := jni.Do(a.jvm, func(env jni.Env) error { jurl := jni.JavaString(env, url) return a.callVoidMethod(peer, "showURL", "(Ljava/lang/String;)V", jni.Value(jurl))