diff --git a/sites/web.magentatv.de/web.magentatv.de.config.js b/sites/web.magentatv.de/web.magentatv.de.config.js index b5ecbaa2..5aefde78 100644 --- a/sites/web.magentatv.de/web.magentatv.de.config.js +++ b/sites/web.magentatv.de/web.magentatv.de.config.js @@ -2,13 +2,11 @@ const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') -const fetch = require('node-fetch') const { upperCase } = require('lodash') let X_CSRFTOKEN let COOKIE const cookiesToExtract = ['JSESSIONID', 'CSESSIONID', 'CSRFSESSION'] -const extractedCookies = {} dayjs.extend(utc) dayjs.extend(customParseFormat) @@ -165,11 +163,15 @@ function parseItems(content) { return data.playbilllist } -// Function to try to fetch COOKIE and X_CSRFTOKEN -function fetchCookieAndToken() { - return fetch( - 'https://api.prod.sngtv.magentatv.de/EPG/JSON/Authenticate?SID=firstup&T=Windows_chrome_118', - { +async function fetchCookieAndToken() { + // Only fetch the cookies and csrfToken if they are not already set + if (X_CSRFTOKEN && COOKIE) { + return + } + + try { + const response = await axios.request({ + url: 'https://api.prod.sngtv.magentatv.de/EPG/JSON/Authenticate', headers: { accept: 'application/json, text/javascript, */*; q=0.01', 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', @@ -180,43 +182,41 @@ function fetchCookieAndToken() { Referer: 'https://web.magentatv.de/', 'Referrer-Policy': 'strict-origin-when-cross-origin' }, - body: '{"terminalid":"00:00:00:00:00:00","mac":"00:00:00:00:00:00","terminaltype":"WEBTV","utcEnable":1,"timezone":"Etc/GMT0","userType":3,"terminalvendor":"Unknown"}', - method: 'POST' + params: { + SID: 'firstup', + T: 'Windows_chrome_118' + }, + method: 'POST', + data: '{"terminalid":"00:00:00:00:00:00","mac":"00:00:00:00:00:00","terminaltype":"WEBTV","utcEnable":1,"timezone":"Etc/GMT0","userType":3,"terminalvendor":"Unknown"}', + }) + + + // Extract the cookies specified in cookiesToExtract + const setCookieHeader = response.headers['set-cookie'] || [] + let extractedCookies = [] + cookiesToExtract.forEach(cookieName => { + const regex = new RegExp(`${cookieName}=(.+?)(;|$)`) + const match = setCookieHeader.find(header => regex.test(header)) + + if (match) { + const cookieString = regex.exec(match)[0] + extractedCookies.push(cookieString) + } + }) + + + // check if we recieved a csrfToken only then store the values + if (!response.data.csrfToken) { + console.log('csrfToken not found in the response.') + return } - ) - .then(response => { - // Check if the response status is OK (2xx) - if (!response.ok) { - throw new Error('HTTP request failed') - } - // Extract the set-cookie header - const setCookieHeader = response.headers.raw()['set-cookie'] + X_CSRFTOKEN = response.data.csrfToken + COOKIE = extractedCookies.join(' ') - // Extract the cookies specified in cookiesToExtract - cookiesToExtract.forEach(cookieName => { - const regex = new RegExp(`${cookieName}=(.+?)(;|$)`) - const match = setCookieHeader.find(header => regex.test(header)) - - if (match) { - const cookieValue = regex.exec(match)[1] - extractedCookies[cookieName] = cookieValue - } - }) - - return response.json() - }) - .then(data => { - if (data.csrfToken) { - X_CSRFTOKEN = data.csrfToken - COOKIE = `JSESSIONID=${extractedCookies.JSESSIONID}; CSESSIONID=${extractedCookies.CSESSIONID}; CSRFSESSION=${extractedCookies.CSRFSESSION}; JSESSIONID=${extractedCookies.JSESSIONID};` - } else { - console.log('csrfToken not found in the response.') - } - }) - .catch(error => { - console.error(error) - }) + } catch(error) { + console.error(error) + } } function setHeaders() {