From 6f1708bb7d12416938ac1882b94bf8043d4b442d Mon Sep 17 00:00:00 2001 From: Sicilykill <95044302+Sicilykill@users.noreply.github.com> Date: Mon, 23 Oct 2023 22:14:47 -0500 Subject: [PATCH 1/5] Update magentatv.de.config.js Added function to fetch cookie and csrfToken. The cookie and token are then set in the request. --- sites/magentatv.de/magentatv.de.config.js | 77 ++++++++++++++++++++--- 1 file changed, 70 insertions(+), 7 deletions(-) diff --git a/sites/magentatv.de/magentatv.de.config.js b/sites/magentatv.de/magentatv.de.config.js index 55ba765c..a3d1536d 100644 --- a/sites/magentatv.de/magentatv.de.config.js +++ b/sites/magentatv.de/magentatv.de.config.js @@ -2,10 +2,13 @@ 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 X_CSRFTOKEN = '6da89c6b271b8c0fabd133b2722ee9e1ddba9564010af8e3' -const COOKIE = - 'JSESSIONID=CDE7D4E5E7C05900BBEAD7DF8FB1DBB0; CSESSIONID=D36E1BF69875141F63B3240B86AFB9B7; CSRFSESSION=6da89c6b271b8c0fabd133b2722ee9e1ddba9564010af8e3; JSESSIONID=CDE7D4E5E7C05900BBEAD7DF8FB1DBB0' + +let X_CSRFTOKEN; +let COOKIE; +const cookiesToExtract = ['JSESSIONID', 'CSESSIONID', 'CSRFSESSION']; +const extractedCookies = {}; dayjs.extend(utc) dayjs.extend(customParseFormat) @@ -16,10 +19,8 @@ module.exports = { url: 'https://api.prod.sngtv.magentatv.de/EPG/JSON/PlayBillList', request: { method: 'POST', - headers: { - X_CSRFToken: X_CSRFTOKEN, - 'Content-Type': 'application/json', - Cookie: COOKIE + headers: function () { + return setHeaders(); }, data({ channel, date }) { @@ -97,6 +98,7 @@ module.exports = { } } + function parseCategory(item) { return item.genres ? item.genres @@ -126,3 +128,64 @@ 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", { + "headers": { + "accept": "application/json, text/javascript, */*; q=0.01", + "content-type": "application/x-www-form-urlencoded; charset=UTF-8", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-origin", + "x-requested-with": "XMLHttpRequest", + "Referer": "https://api.prod.sngtv.magentatv.de/EPG/", + "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\":\"America/Chicago\",\"userType\":3,\"terminalvendor\":\"Unknown\"}", + "method": "POST" }) + .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']; + + // 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); + }); +} + +function setHeaders() { + return fetchCookieAndToken() + .then(() => { + return { + X_CSRFTOKEN: X_CSRFTOKEN, + 'Content-Type': 'application/json', + Cookie: COOKIE, + }; + }); +} From 20fa9e5bc3971f4cf8e93f4ff29588f3178ffd1d Mon Sep 17 00:00:00 2001 From: Sicilykill <95044302+Sicilykill@users.noreply.github.com> Date: Tue, 24 Oct 2023 13:46:50 -0500 Subject: [PATCH 2/5] Update magentatv.de.test.js Updated headers check to support the new method of obtaining a cookie and token. Updated parse content test with new output from magentatv.de --- sites/magentatv.de/magentatv.de.test.js | 34 ++++++++++++++----------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/sites/magentatv.de/magentatv.de.test.js b/sites/magentatv.de/magentatv.de.test.js index 9fbf8bf9..30680564 100644 --- a/sites/magentatv.de/magentatv.de.test.js +++ b/sites/magentatv.de/magentatv.de.test.js @@ -22,14 +22,18 @@ it('can generate valid request method', () => { expect(request.method).toBe('POST') }) -it('can generate valid request headers', () => { - expect(request.headers).toMatchObject({ - X_CSRFToken: 'e0a032d1c9df6c3fb8c8352399d32c40ddb17ccceb5142fe', - 'Content-Type': 'application/json', - Cookie: - 'JSESSIONID=93892A98DBCCEBD83EDC4C23EBEB23B6; CSESSIONID=4A36799EF09D80539BBA8E8211FA80D3; CSRFSESSION=e0a032d1c9df6c3fb8c8352399d32c40ddb17ccceb5142fe; JSESSIONID=93892A98DBCCEBD83EDC4C23EBEB23B6' - }) -}) +it('can generate valid request headers', async () => { + const headers = await request.headers(); + + expect(headers).toHaveProperty('Cookie'); + expect(headers).toHaveProperty('X_CSRFTOKEN'); + + expect(headers.Cookie).toMatch(/JSESSIONID=[\dA-F]+;/i); + expect(headers.Cookie).toMatch(/CSESSIONID=[\dA-F]+;/i); + expect(headers.Cookie).toMatch(/CSRFSESSION=[\dA-F]+;/i); + expect(headers.Cookie).toMatch(/JSESSIONID=[\dA-F]+;/i); + expect(headers.X_CSRFTOKEN).toMatch(/[\dA-F]/i); +}); it('can generate valid request data', () => { expect(request.data({ channel, date })).toMatchObject({ @@ -51,7 +55,7 @@ it('can generate valid request data', () => { it('can parse response', () => { const content = - '{"playbilllist":[{"id":"30021745","name":"FBI: Special Crime Unit","introduce":"Nachdem ein Mann von einem Sprengstoffpaket getötet wurde, das zu ihm nach Hause geschickt wurde, versucht das Team, den Absender zu fassen und sein neuestes tödliches Paket abzufangen. Maggie hat Mühe, ihrer jüngeren Schwester zu vertrauen.","channelid":"255","starttime":"2022-03-09 01:00:00 UTC+01:00","endtime":"2022-03-09 01:45:00 UTC+01:00","genres":"Wissen,Natur und Tiere","pictures":[{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h9_af.jpg","description":"Brother\'s Keeper","imageType":"1","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h9_ae.jpg","description":"FBI","imageType":"13","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h8_af.jpg","description":"Brother\'s Keeper","imageType":"17","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h10_af.jpg","description":"FBI","imageType":"18","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]}]}]}' + '{"playbilllist":[{"id":"39328203","name":"Twenty Foot Plus","introduce":"Die besten Big-Wave-Surfer werden bei ihrer Suche nach der nächsten großen Welle begleitet.","channelid":"5027","starttime":"2023-10-23 23:58:55 UTC+00:00","endtime":"2023-10-24 00:11:05 UTC+00:00","genres":"Sport","pictures":[{"rel":"image","href":"http://ngiss.t-online.de/cm1s/media/gracenote/2/4/p24832950_e_h9_aa_2023-06-22T10_12_01.jpg","imageType":"1","mimeType":"image/jpeg","resolution":["1440","1080"]}]}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -60,13 +64,13 @@ it('can parse response', () => { expect(result).toMatchObject([ { - start: '2022-03-09T00:00:00.000Z', - stop: '2022-03-09T00:45:00.000Z', - title: 'FBI: Special Crime Unit', + start: '2023-10-23T11:58:55.000Z', + stop: '2023-10-24T00:11:05.000Z', + title: 'Twenty Foot Plus', description: - 'Nachdem ein Mann von einem Sprengstoffpaket getötet wurde, das zu ihm nach Hause geschickt wurde, versucht das Team, den Absender zu fassen und sein neuestes tödliches Paket abzufangen. Maggie hat Mühe, ihrer jüngeren Schwester zu vertrauen.', - icon: 'http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h9_af.jpg', - category: ['Wissen', 'Natur', 'Tiere'] + 'Die besten Big-Wave-Surfer werden bei ihrer Suche nach der nächsten großen Welle begleitet.', + icon: 'http://ngiss.t-online.de/cm1s/media/gracenote/2/4/p24832950_e_h9_aa_2023-06-22T10_12_01.jpg', + category: ['Sport'] } ]) }) From cba011aa3f047900e76a7d764ca791e46bf6d692 Mon Sep 17 00:00:00 2001 From: Sicilykill <95044302+Sicilykill@users.noreply.github.com> Date: Tue, 24 Oct 2023 13:48:27 -0500 Subject: [PATCH 3/5] Update magentatv.de.config.js Updating timezone for the token and session request to point to UTC. This timezone impacts how the timezone for the guide is returned from the server. --- sites/magentatv.de/magentatv.de.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/magentatv.de/magentatv.de.config.js b/sites/magentatv.de/magentatv.de.config.js index a3d1536d..ba6d0494 100644 --- a/sites/magentatv.de/magentatv.de.config.js +++ b/sites/magentatv.de/magentatv.de.config.js @@ -142,7 +142,7 @@ function fetchCookieAndToken() { "Referer": "https://api.prod.sngtv.magentatv.de/EPG/", "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\":\"America/Chicago\",\"userType\":3,\"terminalvendor\":\"Unknown\"}", + "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" }) .then(response => { // Check if the response status is OK (2xx) From b17ef42a89b9a8daff65210661eb42bf8d6661d0 Mon Sep 17 00:00:00 2001 From: Sicilykill <95044302+Sicilykill@users.noreply.github.com> Date: Tue, 24 Oct 2023 14:48:02 -0500 Subject: [PATCH 4/5] Update magentatv.de.config.js setting UTC timezone --- sites/magentatv.de/magentatv.de.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/magentatv.de/magentatv.de.config.js b/sites/magentatv.de/magentatv.de.config.js index ba6d0494..f448a65f 100644 --- a/sites/magentatv.de/magentatv.de.config.js +++ b/sites/magentatv.de/magentatv.de.config.js @@ -115,7 +115,7 @@ function parseIcon(item) { } function parseStart(item) { - return dayjs(item.starttime, 'YYYY-MM-DD HH:mm:ss') + return dayjs.utc(item.starttime, 'YYYY-MM-DD HH:mm:ss') } function parseStop(item) { From 72577a8f844679d5e39eee69be0aed8dd2e120b0 Mon Sep 17 00:00:00 2001 From: Sicilykill <95044302+Sicilykill@users.noreply.github.com> Date: Tue, 24 Oct 2023 14:59:35 -0500 Subject: [PATCH 5/5] Update magentatv.de.test.js Updated test with correct time --- sites/magentatv.de/magentatv.de.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/magentatv.de/magentatv.de.test.js b/sites/magentatv.de/magentatv.de.test.js index 30680564..06e4d612 100644 --- a/sites/magentatv.de/magentatv.de.test.js +++ b/sites/magentatv.de/magentatv.de.test.js @@ -64,7 +64,7 @@ it('can parse response', () => { expect(result).toMatchObject([ { - start: '2023-10-23T11:58:55.000Z', + start: '2023-10-23T23:58:55.000Z', stop: '2023-10-24T00:11:05.000Z', title: 'Twenty Foot Plus', description: