Fixed the SPA authentication flow
This commit is contained in:
34
dist/chromium/content.js
vendored
34
dist/chromium/content.js
vendored
@@ -1990,20 +1990,35 @@ function createAuthContentSession({
|
||||
}
|
||||
|
||||
// Source: src/auth/current-user.js
|
||||
function createCurrentUser({ sendRuntimeMessage, appendBackgroundRequestLog, messageTypes }) {
|
||||
function createCurrentUser({ sendRuntimeMessage, appendBackgroundRequestLog, messageTypes, environment }) {
|
||||
const { setTimeout } = environment;
|
||||
let pending = null;
|
||||
let allowed = false;
|
||||
let userId = "";
|
||||
function ensure() {
|
||||
if (!pending) {
|
||||
pending = sendRuntimeMessage({ type: messageTypes.requestCurrentUser }).then(response => {
|
||||
appendBackgroundRequestLog(response?.debugRequests);
|
||||
const roles = response?.user?.roles;
|
||||
userId = response?.ok === true && typeof response.user?.id === "string" ? response.user.id : "";
|
||||
allowed = response?.ok === true && Array.isArray(roles)
|
||||
&& roles.every(role => typeof role === "string") && !roles.includes("SALES_REP");
|
||||
return allowed;
|
||||
}).catch(() => { allowed = false; return false; });
|
||||
pending = (async () => {
|
||||
let retryDelay = 1000;
|
||||
// Keep a single pending identity request until the response is usable.
|
||||
for (;;) {
|
||||
try {
|
||||
const response = await sendRuntimeMessage({ type: messageTypes.requestCurrentUser });
|
||||
appendBackgroundRequestLog(response?.debugRequests);
|
||||
const user = response?.user;
|
||||
if (response?.ok === true && typeof user?.id === "string" && user.id.trim()
|
||||
&& typeof user.name === "string" && user.name.trim()
|
||||
&& Array.isArray(user.roles) && user.roles.every(role => typeof role === "string" && role.trim())) {
|
||||
userId = user.id;
|
||||
allowed = !user.roles.includes("SALES_REP");
|
||||
return allowed;
|
||||
}
|
||||
} catch (error) {
|
||||
appendBackgroundRequestLog(error?.debugRequests);
|
||||
}
|
||||
await new Promise(resolve => setTimeout(resolve, retryDelay));
|
||||
retryDelay = Math.min(retryDelay * 2, 10000);
|
||||
}
|
||||
})();
|
||||
}
|
||||
return pending;
|
||||
}
|
||||
@@ -10056,6 +10071,7 @@ function createContentApplication(overrides = {}) {
|
||||
};
|
||||
const messageTypes = createMessageTypes();
|
||||
const currentUser = createCurrentUser({
|
||||
environment,
|
||||
messageTypes,
|
||||
sendRuntimeMessage: (...args) => platformContentMessages.sendRuntimeMessage(...args),
|
||||
appendBackgroundRequestLog: (...args) => debugContentLog.appendBackgroundRequestLog(...args)
|
||||
|
||||
Reference in New Issue
Block a user