Check OAUth session expiration

This commit is contained in:
M66B 2023-12-10 17:49:06 +01:00
parent fba5b272ce
commit f5389bef3a
1 changed files with 6 additions and 0 deletions

View File

@ -140,6 +140,7 @@ public class FragmentOAuth extends FragmentBase {
private Group grpError;
private static final String FAIREMAIL_RANDOM = "fairemail.random";
private static final String FAIREMAIL_EXPIRE = "fairemail.expire";
private static final int MAILRU_TIMEOUT = 20 * 1000; // milliseconds
@Override
@ -425,11 +426,13 @@ public class FragmentOAuth extends FragmentBase {
Uri.parse(tokenEndpoint));
int random = Math.abs(new SecureRandom().nextInt());
long expire = new Date().getTime() + 10 * 60 * 1000L;
AuthState authState = new AuthState(serviceConfig);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String key = "oauth." + provider.id + (graph ? ":graph" : "");
JSONObject jauthstate = authState.jsonSerialize();
jauthstate.put(FAIREMAIL_RANDOM, random);
jauthstate.put(FAIREMAIL_EXPIRE, expire);
prefs.edit().putString(key, jauthstate.toString()).apply();
Map<String, String> params = (oauth.parameters == null
@ -549,11 +552,14 @@ public class FragmentOAuth extends FragmentBase {
String json = prefs.getString(key, null);
JSONObject jauthstate = new JSONObject(json);
int random = jauthstate.optInt(FAIREMAIL_RANDOM, -1);
long expire = jauthstate.optLong(FAIREMAIL_EXPIRE, -1);
jauthstate.remove(FAIREMAIL_RANDOM);
prefs.edit().remove("oauth." + auth.state).apply();
if (random != returnedRandom)
throw new SecurityException("random " + random + " <> " + returnedRandom);
if (expire < new Date().getTime())
throw new SecurityException("Session expired");
final AuthState authState = AuthState.jsonDeserialize(jauthstate);