From 6f0c1a6de1ea8bcd9e5e41ec9eb5f1013c466d41 Mon Sep 17 00:00:00 2001 From: rui Date: Tue, 13 Jun 2023 13:36:37 +0200 Subject: [PATCH] Add fix for "New Identity" extension behavior --- package.json | 2 +- src/background/main.ts | 28 +++++++++++++--------------- src/helpers/leta.ts | 8 +++++++- updates.json | 4 ++-- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index 58ed5b2d..d3c91260 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mullvad-browser-extension", "displayName": "Mullvad Browser Extension", - "version": "0.8.1", + "version": "0.8.2", "description": "Improve your Mullvad VPN experience, in your browser.", "private": true, "engines": { diff --git a/src/background/main.ts b/src/background/main.ts index 93aab49c..10b34b1f 100644 --- a/src/background/main.ts +++ b/src/background/main.ts @@ -3,10 +3,10 @@ import { onMessage } from 'webext-bridge/background'; import { addExtListeners } from '@/helpers/extensions'; import { DataAccount, - getMullvadAccount, - initLetaLogin, + backgroundLetaLogin, letaLogin, letaLogout, + dailyLogin, } from '@/helpers/leta'; // only on dev mode @@ -18,8 +18,13 @@ if (import.meta.hot) { // Add listeners on extension actions addExtListeners(); -// Mullvad Leta Auto Login on extension start -initLetaLogin(); +// Autologin to Leta on startup +backgroundLetaLogin(); + +// "New Identity" doesn't restart the extensions, so we need a workaround. +// When a new window is created, we will automatically login again. +// See: https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41833 +browser.windows.onCreated.addListener(() => backgroundLetaLogin()); // Add cookie messaging listeners onMessage('leta-login', async ({ data }) => { @@ -31,21 +36,14 @@ onMessage('leta-logout', () => { letaLogout(); }); -// Alarm to refresh Mullvad Leta auth cookie -// The cookie expires after 24h, so renewal is set for every 23h -browser.alarms.create('leta-cookie-refresh', { +// The cookie expires after 24h, so we use an alarm to relogin +// in case a user keeps the browser open for more than a day +browser.alarms.create('daily-login', { delayInMinutes: 1380, periodInMinutes: 1380, }); -const refreshCookie = async (alarm: browser.alarms.Alarm) => { - if (alarm.name === 'leta-cookie-refresh') { - const account = await getMullvadAccount(); - await letaLogin(account); - } -}; - -browser.alarms.onAlarm.addListener(refreshCookie); +browser.alarms.onAlarm.addListener(dailyLogin); // `browser.cookies` operations are only available in the background context export const setCookie = async (cookie: browser.cookies._SetDetails) => { diff --git a/src/helpers/leta.ts b/src/helpers/leta.ts index 08af98b1..d6acb9cb 100644 --- a/src/helpers/leta.ts +++ b/src/helpers/leta.ts @@ -59,7 +59,7 @@ export const letaLogout = async () => { removeAuthCookie(isFPI); }; -export const initLetaLogin = async () => { +export const backgroundLetaLogin = async () => { const mullvadAccount = await getMullvadAccount(); if (!mullvadAccount) { throw new Error('No Mullvad VPN account found in extension storage.'); @@ -67,3 +67,9 @@ export const initLetaLogin = async () => { letaLogin(mullvadAccount); } }; + +export const dailyLogin = async (alarm: browser.alarms.Alarm) => { + if (alarm.name === 'daily-login') { + await backgroundLetaLogin(); + } +}; diff --git a/updates.json b/updates.json index 7620ffad..63d03123 100644 --- a/updates.json +++ b/updates.json @@ -24,8 +24,8 @@ } }, { - "version": "0.8.0", - "update_link": "https://cdn.mullvad.net/browser-extension/0.8.0/mullvad-browser-extension-0.8.0.xpi", + "version": "0.8.2", + "update_link": "https://cdn.mullvad.net/browser-extension/0.8.2/mullvad-browser-extension-0.8.2.xpi", "applications": { "gecko": { "strict_min_version": "91.1.0" } }