Merge pull request #224 from D-Bao/fix/safari-login-with-proton
Fix "Login with Proton" not working on Safari
This commit is contained in:
+26
-16
@@ -24,6 +24,26 @@ async function handleGetAppSettings() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function finalizeExtensionSetup(apiKey) {
|
||||||
|
if (!apiKey) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await SLStorage.set(SLStorage.SETTINGS.API_KEY, apiKey);
|
||||||
|
|
||||||
|
const currentTab = await browser.tabs.query({
|
||||||
|
active: true,
|
||||||
|
currentWindow: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const apiUrl = await SLStorage.get(SLStorage.SETTINGS.API_URL);
|
||||||
|
const url = `${apiUrl}/onboarding/final`;
|
||||||
|
await browser.tabs.update(currentTab[0].id, {
|
||||||
|
url,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async function handleExtensionSetup() {
|
async function handleExtensionSetup() {
|
||||||
const apiUrl = await SLStorage.get(SLStorage.SETTINGS.API_URL);
|
const apiUrl = await SLStorage.get(SLStorage.SETTINGS.API_URL);
|
||||||
|
|
||||||
@@ -42,21 +62,7 @@ async function handleExtensionSetup() {
|
|||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
const apiRes = await res.json();
|
const apiRes = await res.json();
|
||||||
const apiKey = apiRes.api_key;
|
const apiKey = apiRes.api_key;
|
||||||
if (apiKey) {
|
finalizeExtensionSetup(apiKey);
|
||||||
await SLStorage.set(SLStorage.SETTINGS.API_KEY, apiKey);
|
|
||||||
|
|
||||||
const currentTab = await browser.tabs.query({
|
|
||||||
active: true,
|
|
||||||
currentWindow: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
const url = `${apiUrl}/onboarding/final`;
|
|
||||||
await browser.tabs.update(currentTab[0].id, {
|
|
||||||
url,
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
console.error("Received null API Key");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
console.error("api error");
|
console.error("api error");
|
||||||
}
|
}
|
||||||
@@ -121,9 +127,13 @@ browser.runtime.onMessage.addListener(async function (request, sender) {
|
|||||||
if (!messageAllowed) return;
|
if (!messageAllowed) return;
|
||||||
|
|
||||||
if (request.tag === "EXTENSION_SETUP") {
|
if (request.tag === "EXTENSION_SETUP") {
|
||||||
return await handleExtensionSetup();
|
// On Safari the background script won't set cookies properly in API calls (see https://bugs.webkit.org/show_bug.cgi?id=260676),
|
||||||
|
// so we will return the API URL to the content script which will make the API call with cookies properly set
|
||||||
|
return process.env.MAC ? await SLStorage.get(SLStorage.SETTINGS.API_URL) : await handleExtensionSetup();
|
||||||
} else if (request.tag === "EXTENSION_INSTALLED_QUERY") {
|
} else if (request.tag === "EXTENSION_INSTALLED_QUERY") {
|
||||||
return handleExtensionInstalledQuery();
|
return handleExtensionInstalledQuery();
|
||||||
|
} else if (request.tag === "SAFARI_FINALIZE_EXTENSION_SETUP") {
|
||||||
|
return await finalizeExtensionSetup(request.data);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -260,7 +260,29 @@ if (!window._hasExecutedSlExtension) {
|
|||||||
if (event.data.tag === "PERFORM_EXTENSION_SETUP") {
|
if (event.data.tag === "PERFORM_EXTENSION_SETUP") {
|
||||||
if (!hasProcessedSetup) {
|
if (!hasProcessedSetup) {
|
||||||
hasProcessedSetup = true;
|
hasProcessedSetup = true;
|
||||||
await sendMessageToBackground("EXTENSION_SETUP");
|
const apiUrl = await sendMessageToBackground("EXTENSION_SETUP");
|
||||||
|
// if apiUrl is undefined then the Chromium/Firefox extension has already finished setup
|
||||||
|
if (!apiUrl) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// else if apiUrl is defined, we are in Safari and need to setup the Safari extension
|
||||||
|
const url = apiUrl + '/api/api_key';
|
||||||
|
const res = await fetch(url, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"X-Sl-Allowcookies": true,
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
device: "Safari extension",
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
if (res.ok) {
|
||||||
|
const apiRes = await res.json();
|
||||||
|
const apiKey = apiRes.api_key;
|
||||||
|
await sendMessageToBackground("SAFARI_FINALIZE_EXTENSION_SETUP", apiKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (event.data.tag === "EXTENSION_INSTALLED_QUERY") {
|
} else if (event.data.tag === "EXTENSION_INSTALLED_QUERY") {
|
||||||
const res = await sendMessageToBackground(
|
const res = await sendMessageToBackground(
|
||||||
|
|||||||
Reference in New Issue
Block a user