|
|
|
@ -24,6 +24,9 @@ import static eu.faircode.email.GmailState.TYPE_GOOGLE;
|
|
|
|
|
import android.accounts.AuthenticatorException;
|
|
|
|
|
import android.accounts.OperationCanceledException;
|
|
|
|
|
import android.content.Context;
|
|
|
|
|
import android.content.SharedPreferences;
|
|
|
|
|
|
|
|
|
|
import androidx.preference.PreferenceManager;
|
|
|
|
|
|
|
|
|
|
import net.openid.appauth.AuthState;
|
|
|
|
|
import net.openid.appauth.AuthorizationException;
|
|
|
|
@ -150,14 +153,29 @@ public class ServiceAuthenticator extends Authenticator {
|
|
|
|
|
long now = new Date().getTime();
|
|
|
|
|
Long expiration = authState.getAccessTokenExpirationTime();
|
|
|
|
|
boolean needsRefresh = (expiration != null && expiration < now);
|
|
|
|
|
if (needsRefresh)
|
|
|
|
|
authState.setNeedsTokenRefresh(true);
|
|
|
|
|
|
|
|
|
|
if (!needsRefresh && forceRefresh &&
|
|
|
|
|
expiration != null &&
|
|
|
|
|
expiration - ServiceAuthenticator.MIN_FORCE_REFRESH_INTERVAL < now)
|
|
|
|
|
needsRefresh = true;
|
|
|
|
|
|
|
|
|
|
if (needsRefresh)
|
|
|
|
|
authState.setNeedsTokenRefresh(true);
|
|
|
|
|
|
|
|
|
|
if (needsRefresh) {
|
|
|
|
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
|
|
|
|
String key = "token." + 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));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
prefs.edit().putLong(key, now).apply();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EntityLog.log(context, EntityLog.Type.Debug, "Token user=" + id + ":" + user +
|
|
|
|
|
" expiration=" + (expiration == null ? null : new Date(expiration)) +
|
|
|
|
|
" need=" + needsRefresh + "/" + authState.getNeedsTokenRefresh() +
|
|
|
|
|