52 lines
1.2 KiB
JavaScript
52 lines
1.2 KiB
JavaScript
export function getCsrfToken() {
|
|
const element = document.querySelector(`meta[name='csrf-token']`);
|
|
|
|
return element !== null ? element.content : undefined;
|
|
}
|
|
|
|
const getWaitOnUserDataHandler = ({
|
|
resolve,
|
|
reject,
|
|
safe = false,
|
|
waitTime = 20,
|
|
}) => {
|
|
let totalTimeWaiting = 0;
|
|
|
|
return function waitingOnUserData() {
|
|
if (totalTimeWaiting === 3000) {
|
|
if (!safe) {
|
|
reject(new Error("Couldn't find user data on page."));
|
|
return;
|
|
}
|
|
resolve({ user, csrfToken });
|
|
return;
|
|
|
|
}
|
|
|
|
const csrfToken = getCsrfToken(document);
|
|
const { user } = document.body.dataset;
|
|
|
|
if (user && csrfToken !== undefined) {
|
|
const currentUser = JSON.parse(user);
|
|
|
|
resolve({ currentUser, csrfToken });
|
|
return;
|
|
}
|
|
|
|
totalTimeWaiting += waitTime;
|
|
setTimeout(waitingOnUserData, waitTime);
|
|
};
|
|
};
|
|
|
|
export function getUserDataAndCsrfTokenSafely() {
|
|
return new Promise((resolve, reject) => {
|
|
const safe = true;
|
|
getWaitOnUserDataHandler({ resolve, reject, safe })();
|
|
});
|
|
}
|
|
|
|
export function getUserDataAndCsrfToken() {
|
|
return new Promise((resolve, reject) => {
|
|
getWaitOnUserDataHandler({ resolve, reject })();
|
|
});
|
|
}
|