summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2020-06-15 20:18:22 +0200
committerOskar Nyberg <oskar@mullvad.net>2020-06-24 11:23:12 +0200
commitaa750c58a4e7dddbfb8b76b4df932b3188461229 (patch)
tree21d5b03196063f437a1c9148afaa1b5d648ba1c8
parent0db07414743e8dbd5c00f810a138ff276fbf92f6 (diff)
downloadmullvadvpn-aa750c58a4e7dddbfb8b76b4df932b3188461229.tar.xz
mullvadvpn-aa750c58a4e7dddbfb8b76b4df932b3188461229.zip
Fetch account data one minute before expiry
-rw-r--r--gui/src/main/account-data-cache.ts23
1 files changed, 18 insertions, 5 deletions
diff --git a/gui/src/main/account-data-cache.ts b/gui/src/main/account-data-cache.ts
index ac829ca0f3..5c178e83a6 100644
--- a/gui/src/main/account-data-cache.ts
+++ b/gui/src/main/account-data-cache.ts
@@ -1,5 +1,6 @@
import log from 'electron-log';
import moment from 'moment';
+import { hasExpired } from '../shared/account-expiry';
import { AccountToken, IAccountData } from '../shared/daemon-rpc-types';
import consumePromise from '../shared/promise';
import { Scheduler } from '../shared/scheduler';
@@ -85,7 +86,12 @@ export default class AccountDataCache {
if (this.currentAccount === accountToken) {
this.setValue(accountData);
- this.scheduleRefetchIfExpired(accountToken, accountData);
+
+ const refetchDelay = this.calculateRefetchDelay(accountData.expiry);
+ if (refetchDelay) {
+ this.scheduleFetch(accountToken, refetchDelay);
+ }
+
this.waitStrategy.reset();
this.performingFetch = false;
}
@@ -97,10 +103,17 @@ export default class AccountDataCache {
}
}
- private scheduleRefetchIfExpired(accountToken: AccountToken, accountData: IAccountData) {
- const hasExpired = moment(accountData.expiry).isSameOrBefore(new Date());
- if (hasExpired) {
- this.scheduleFetch(accountToken, EXPIRED_ACCOUNT_REFRESH_PERIOD);
+ private calculateRefetchDelay(accountExpiry: string) {
+ const currentDate = new Date();
+ const oneMinuteBeforeExpiry = moment(accountExpiry).subtract(1, 'minute');
+ const closeToExpiry = moment(accountExpiry).isSameOrBefore(moment().add(3, 'days'));
+
+ if (hasExpired(accountExpiry)) {
+ return EXPIRED_ACCOUNT_REFRESH_PERIOD;
+ } else if (oneMinuteBeforeExpiry.isSameOrAfter(currentDate) && closeToExpiry) {
+ return oneMinuteBeforeExpiry.diff(currentDate);
+ } else {
+ return undefined;
}
}