From 0f6cd802aa08b153b49afb85313a925ef7ff9d37 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 13 Aug 2022 17:44:46 +0200 Subject: [PATCH] Remove old token times --- .../java/eu/faircode/email/EmailService.java | 2 +- .../main/java/eu/faircode/email/GmailState.java | 4 ++-- .../eu/faircode/email/ServiceAuthenticator.java | 16 ++++++++++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EmailService.java b/app/src/main/java/eu/faircode/email/EmailService.java index f5473c30fe..847573603a 100644 --- a/app/src/main/java/eu/faircode/email/EmailService.java +++ b/app/src/main/java/eu/faircode/email/EmailService.java @@ -438,7 +438,7 @@ public class EmailService implements AutoCloseable { } properties.put("mail." + protocol + ".forcepasswordrefresh", "true"); - authenticator = new ServiceAuthenticator(context, auth, provider, user, password, intf); + authenticator = new ServiceAuthenticator(context, auth, provider, user, password, purpose == PURPOSE_CHECK, intf); if ("imap.wp.pl".equals(host)) properties.put("mail.idledone", "false"); diff --git a/app/src/main/java/eu/faircode/email/GmailState.java b/app/src/main/java/eu/faircode/email/GmailState.java index ed0bf07eef..33323858a9 100644 --- a/app/src/main/java/eu/faircode/email/GmailState.java +++ b/app/src/main/java/eu/faircode/email/GmailState.java @@ -75,13 +75,13 @@ public class GmailState { if (needsRefresh && token != null) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - String key = "token." + id + "." + user; + String key = ServiceAuthenticator.getTokenKey(id, user); long last_refresh = prefs.getLong(key, 0); long ago = now - last_refresh; EntityLog.log(context, EntityLog.Type.Debug, "Token needs refresh" + " user=" + id + ":" + user + " ago=" + (ago / 60 / 1000L) + " min"); if (ago < ServiceAuthenticator.MIN_FORCE_REFRESH_INTERVAL) { - Log.e("Blocked token refresh id=" + id + " ago=" + (ago / 1000L)); + Log.e("Blocked token refresh id=" + id + " ago=" + (ago / 1000L) + " s"); return; } prefs.edit().putLong(key, now).apply(); diff --git a/app/src/main/java/eu/faircode/email/ServiceAuthenticator.java b/app/src/main/java/eu/faircode/email/ServiceAuthenticator.java index c4b7c013fb..987efa4ab9 100644 --- a/app/src/main/java/eu/faircode/email/ServiceAuthenticator.java +++ b/app/src/main/java/eu/faircode/email/ServiceAuthenticator.java @@ -64,6 +64,7 @@ public class ServiceAuthenticator extends Authenticator { Context context, int auth, String provider, String user, String password, + boolean check, IAuthenticated intf) { this.context = context.getApplicationContext(); this.auth = auth; @@ -71,6 +72,13 @@ public class ServiceAuthenticator extends Authenticator { this.user = user; this.password = password; this.intf = intf; + + if (check) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + String key = getTokenKey(provider, user); + prefs.edit().remove(key).apply(); + EntityLog.log(context, "Removed " + key); + } } @Override @@ -164,13 +172,13 @@ public class ServiceAuthenticator extends Authenticator { if (needsRefresh || authState.getNeedsTokenRefresh()) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - String key = "token." + id + "." + user; + String key = getTokenKey(id, user); long last_refresh = prefs.getLong(key, 0); long ago = now - last_refresh; EntityLog.log(context, EntityLog.Type.Debug, "Token needs refresh" + " user=" + id + ":" + user + " ago=" + (ago / 60 / 1000L) + " min"); if (ago < ServiceAuthenticator.MIN_FORCE_REFRESH_INTERVAL) { - Log.e("Blocked token refresh id=" + id + " ago=" + (ago / 1000L)); + Log.e("Blocked token refresh id=" + id + " ago=" + (ago / 1000L) + " s"); return; } prefs.edit().putLong(key, now).apply(); @@ -215,6 +223,10 @@ public class ServiceAuthenticator extends Authenticator { } } + static String getTokenKey(String id, String user) { + return "token." + id + "." + user; + } + static String getAuthTokenType(String type) { // https://developers.google.com/gmail/imap/xoauth2-protocol if (TYPE_GOOGLE.equals(type))