Files
2026-09-15 21:56:10 +02:00

59 lines
2.4 KiB
TypeScript

import { CONFIG } from '../../src/utils/config.js';
export class FS24Auth {
private static sessionCookie: string | null = null;
private static lastLoginTime: number = 0;
public static async getCookie(forceRefresh = false): Promise<string> {
// If we already have a cookie and it's less than 12 hours old, return it
if (!forceRefresh && this.sessionCookie && Date.now() - this.lastLoginTime < 12 * 60 * 60 * 1000) {
return this.sessionCookie;
}
const username = CONFIG.FS24_USERNAME;
const password = CONFIG.FS24_PASSWORD;
const baseUrl = CONFIG.FS24_URL;
if (!username || !password) {
throw new Error('[FS24 Auth] Identifiants manquants.');
}
console.log(`[FS24] Tentative de connexion avec l'utilisateur: ${username}...`);
try {
const params = new URLSearchParams();
params.append('login_name', username);
params.append('login_password', password);
params.append('login', 'submit');
const response = await fetch(baseUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Referer': baseUrl
},
body: params.toString(),
redirect: 'manual' // Capture the set-cookie from the redirect
});
// Collect cookies from the response headers
const setCookieHeader = response.headers.get('set-cookie');
if (setCookieHeader) {
// Parse DLE / PHP session cookies
const cookies = setCookieHeader.split(',').map(c => c.split(';')[0].trim());
this.sessionCookie = cookies.join('; ');
this.lastLoginTime = Date.now();
console.log(`[FS24] ✅ Connexion réussie ! (Cookie généré)`);
return this.sessionCookie;
} else {
console.warn(`[FS24] ⚠️ Pas de header set-cookie retourné. Les identifiants sont-ils valides ?`);
throw new Error('Échec de la connexion (Pas de cookie de session).');
}
} catch (error: any) {
console.error('[FS24] ❌ Erreur lors de la connexion:', error.message);
throw error;
}
}
}