aktueller stand
This commit is contained in:
@@ -55,15 +55,43 @@ client.interceptors.response.use(
|
||||
}
|
||||
);
|
||||
|
||||
const CSRF_COOKIE_NAMES = ['CSRF_TOKEN', 'CSRF-TOKEN', 'XSRF-TOKEN', 'XSRF_TOKEN'];
|
||||
|
||||
function extractCookieValue(cookies = [], name) {
|
||||
if (!Array.isArray(cookies) || !name) {
|
||||
return null;
|
||||
}
|
||||
const prefix = `${name}=`;
|
||||
const match = cookies.find((cookie) => cookie.startsWith(prefix));
|
||||
if (!match) {
|
||||
return null;
|
||||
}
|
||||
return match.split(';')[0].slice(prefix.length);
|
||||
}
|
||||
|
||||
function extractCsrfToken(cookies = []) {
|
||||
if (!Array.isArray(cookies)) {
|
||||
for (const name of CSRF_COOKIE_NAMES) {
|
||||
const value = extractCookieValue(cookies, name);
|
||||
if (value) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function extractCsrfTokenFromCookieHeader(cookieHeader = '') {
|
||||
if (!cookieHeader) {
|
||||
return null;
|
||||
}
|
||||
const tokenCookie = cookies.find((cookie) => cookie.startsWith('CSRF_TOKEN='));
|
||||
if (!tokenCookie) {
|
||||
return null;
|
||||
const pairs = cookieHeader.split(';').map((part) => part.trim());
|
||||
for (const name of CSRF_COOKIE_NAMES) {
|
||||
const prefix = `${name}=`;
|
||||
const match = pairs.find((pair) => pair.startsWith(prefix));
|
||||
if (match) {
|
||||
return match.slice(prefix.length);
|
||||
}
|
||||
}
|
||||
return tokenCookie.split(';')[0].split('=')[1];
|
||||
return null;
|
||||
}
|
||||
|
||||
function serializeCookies(cookies = []) {
|
||||
@@ -78,8 +106,10 @@ function buildHeaders(cookieHeader, csrfToken) {
|
||||
if (cookieHeader) {
|
||||
headers.cookie = cookieHeader;
|
||||
}
|
||||
if (csrfToken) {
|
||||
headers['x-csrf-token'] = csrfToken;
|
||||
const token = csrfToken || extractCsrfTokenFromCookieHeader(cookieHeader);
|
||||
if (token) {
|
||||
headers['x-csrf-token'] = token;
|
||||
headers['x-xsrf-token'] = token;
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
@@ -135,25 +165,13 @@ async function login(email, password) {
|
||||
};
|
||||
}
|
||||
|
||||
async function checkSession(cookieHeader, profileId) {
|
||||
if (!cookieHeader) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
await client.get(`/api/wall/foodsaver/${profileId}?limit=1`, {
|
||||
headers: buildHeaders(cookieHeader)
|
||||
});
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchProfile(cookieHeader) {
|
||||
async function fetchProfile(cookieHeader, { throwOnError = false } = {}) {
|
||||
try {
|
||||
return await getCurrentUserDetails(cookieHeader);
|
||||
} catch (error) {
|
||||
if (throwOnError) {
|
||||
throw error;
|
||||
}
|
||||
console.warn('Profil konnte nicht geladen werden:', error.message);
|
||||
return null;
|
||||
}
|
||||
@@ -296,7 +314,6 @@ async function bookSlot(storeId, utcDate, profileId, session) {
|
||||
|
||||
module.exports = {
|
||||
login,
|
||||
checkSession,
|
||||
fetchProfile,
|
||||
fetchStores,
|
||||
fetchPickups,
|
||||
|
||||
Reference in New Issue
Block a user