diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/headwaiter/connection/kickstart.aspx.js b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/headwaiter/connection/kickstart.aspx.js index a3c9f53f..f5d04e71 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/headwaiter/connection/kickstart.aspx.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/headwaiter/connection/kickstart.aspx.js @@ -27,7 +27,7 @@ data = ` } } function GotoBoxCheck() { - var url = 'https://headwaiter.trusted.msntv.msn.com/connection/boxcheck.html'; + var url = 'https://sg1.trusted.msntv.msn.com/connection/GatePage.aspx?phase=BoxCheck&purpose=Authorize'; var parms=''; parms += 'BoxId=' + tvShell.SystemInfo.BoxIDService + '&'; parms += 'WANProvider=' + tvShell.ConnectionManager.WANProvider + '&'; @@ -73,4 +73,4 @@ data = ` -`; \ No newline at end of file +`; diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/headwaiter/connection/login.aspx.js b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/headwaiter/connection/login.aspx.js deleted file mode 100644 index 811b7ede..00000000 --- a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/headwaiter/connection/login.aspx.js +++ /dev/null @@ -1,32 +0,0 @@ -const minisrv_service_file = true; - -// Todo: auth if not guest - -headers = `Content-type: text/html`; - - data = ` - - - - - - - -`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/passport/RST.srf.js b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/passport/RST.srf.js new file mode 100644 index 00000000..18c2ba57 --- /dev/null +++ b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/passport/RST.srf.js @@ -0,0 +1,444 @@ +const minisrv_service_file = true; +const crypto = require('crypto'); + +// Sorry Zef :kek +// https://git.computernewb.com/yellows111/msnp-wiki/src/branch/master/docs/services/rst.md +// the RST_ cookie stuff was code that was temp until we had proper token authentication +const NS = { + SOAP: "http://schemas.xmlsoap.org/soap/envelope/", + WSSE: "http://schemas.xmlsoap.org/ws/2003/06/secext", + WSP: "http://schemas.xmlsoap.org/ws/2002/12/policy", + WSU: "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", + WSA: "http://schemas.xmlsoap.org/ws/2004/03/addressing", + WST: "http://schemas.xmlsoap.org/ws/2004/04/trust", + PSF: "http://schemas.microsoft.com/Passport/SoapServices/SOAPFault", + ENC: "http://www.w3.org/2001/04/xmlenc#", + DS: "http://www.w3.org/2000/09/xmldsig#" +}; + +function getCookie(cookieString, name) { + if (!cookieString) return null; + const match = cookieString.match(new RegExp(`(?:^|;\\s*)${name}=([^;]*)`)); + return match ? decodeURIComponent(match[1]) : null; +} + +function setCookie(name, value, options = {}) { + const cookie = `${name}=${encodeURIComponent(value)}`; + const path = options.path || '/'; + const expires = options.expires || ''; + return `${cookie}; path=${path}${expires ? `; expires=${expires}` : ''}`; +} + +function formatDateTime(dt) { + return dt.toISOString().replace(/\.\d{3}Z$/, 'Z'); +} + +function getClientIP() { + const forwarded = request_headers['x-forwarded-for']; + if (forwarded) { + const ips = forwarded.split(','); + return ips[0].trim(); + } + return request_headers['x-real-ip'] || '127.0.0.1'; +} + +function generateRandomToken(userId, appliesTo, isLegacy = false) { + const timestamp = Date.now(); + const randomPart = crypto.randomBytes(32).toString('hex'); + + if (isLegacy) { + const tokenData = `${userId}|${appliesTo}|${timestamp}|${randomPart}`; + return crypto.createHash('sha256').update(tokenData).digest('hex'); + } else { + const tokenData = { + uid: userId, + app: appliesTo, + ts: timestamp, + rand: randomPart, + ver: '1.0' + }; + return Buffer.from(JSON.stringify(tokenData)).toString('base64'); + } +} + +function extractXmlValue(xml, elementName) { + if (!xml) return null; + + const patterns = [ + new RegExp(`<${elementName}>([\\s\\S]*?)`, 'i'), + new RegExp(`([\\s\\S]*?)`, 'i'), + new RegExp(`([\\s\\S]*?)`, 'i'), + new RegExp(`([\\s\\S]*?)`, 'i') + ]; + + for (const regex of patterns) { + const match = xml.match(regex); + if (match && match[1]) { + let value = match[1].trim(); + value = value.replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&'); + return value; + } + } + return null; +} + +function extractTokenFromCipherValue(xml) { + if (!xml) return null; + + const cipherRegex = /([\s\S]*?)<\/CipherValue>/gi; + let match; + let token = null; + + while ((match = cipherRegex.exec(xml)) !== null) { + let cipherValue = match[1].trim(); + if (cipherValue && cipherValue.length > 0) { + token = cipherValue; + console.log("Found CipherValue token:", token.substring(0, 50) + "..."); + break; + } + } + + return token; +} + +function validateTokenAndGetUser(token) { + try { + let userId = null; + let email = null; + + if (request_headers.cookie) { + userId = getCookie(request_headers.cookie, 'RST_Auth'); + email = getCookie(request_headers.cookie, 'RST_Email'); + if (!email) email = getCookie(request_headers.cookie, 'rst_email'); + if (!email) email = getCookie(request_headers.cookie, 'rst_username'); + } + + if (!userId) { + userId = crypto.createHash('md5').update(token).digest('hex'); + email = `user_${userId.substring(0, 8)}@example.com`; + } + + console.log(`Token validated - UserId: ${userId}, Email: ${email}`); + return { success: true, userId, email }; + } catch (error) { + console.error("Token validation error:", error); + return { success: false, userId: null, email: null }; + } +} + +function generateErrorResponse(errorCode, errorText) { + const now = formatDateTime(new Date()); + headers = `Status: 200 OK + Content-type: text/xml; charset=utf-8`; + + return ` + + + + 1 + 0x80048800 + ${errorCode} + + NOBELLIUM 16.0.30846.6 + + + + + + + + + S:Sender + + wst:FailedAuthentication + + + + Authentication Failure + + + + ${errorCode} + + 0x80041012 + ${errorText} + + + + + + `; +} + +function generateSuccessResponse(requestBody, userId, email, firstName, lastName) { + const now = new Date(); + const tomorrow = new Date(now.getTime() + 24 * 60 * 60 * 1000); + + const createdTime = formatDateTime(now); + const expiresTime = formatDateTime(tomorrow); + + const puid = crypto.randomBytes(16).toString('hex').toUpperCase(); + const cid = crypto.randomBytes(8).toString('hex').toUpperCase(); + + const safeFirstName = firstName || email.split('@')[0] || "User"; + const safeLastName = lastName || "User"; + const clientIp = getClientIP(); + + const rstRegex = //gi; + const responses = []; + let match; + let foundRst = false; + let rstIndex = 0; + + while ((match = rstRegex.exec(requestBody)) !== null) { + foundRst = true; + const rstBlock = match[0]; + + const addressMatch = rstBlock.match(/(.*?)<\/wsa:Address>/i); + let appliesTo = addressMatch ? addressMatch[1] : "urn:passport:compact"; + + const policyMatch = rstBlock.match(/ + + + + http://Passport.NET/STS + + + ${token} + + + `; + } else { + let tokenValue = `t=${token}`; + if (needsProofToken) { + tokenValue += `&p=profile`; + } + requestedSecurityToken = ` + + ${tokenValue} + `; + } + + let responseXml = ` + + ${tokenType} + + + ${appliesTo} + + + + ${createdTime} + ${expiresTime} + + ${requestedSecurityToken} + + + + `; + + if (needsProofToken || isLegacy) { + responseXml += ` + + ${binarySecret} + `; + } + + responseXml += ` + `; + + responses.push(responseXml); + rstIndex++; + } + + if (!foundRst) { + const defaultToken = generateRandomToken(userId, "urn:passport:compact", false); + responses.push(` + + urn:passport:compact + + t=${defaultToken} + + + ${createdTime} + ${expiresTime} + + `); + } + + headers = `Status: 200 OK + Content-type: text/xml; charset=utf-8 + Set-Cookie: RST_Auth=${userId}; path=/; HttpOnly + Set-Cookie: RST_Email=${email}; path=/`; + + return ` + + + + 1 + ${puid} + 16.000.26889.00 + 3.100.2179.0 + 16.000.26208.0 + 0x48803 + 0x0 + + NOBELLIUM 16.0.30846.6 + + + + MSFT; path=/; domain=.msn.com; expires=Wed, 30-Dec-2037 16:00:00 GMT + MSFT; path=/; domain=.live.com; expires=Wed, 30-Dec-2037 16:00:00 GMT + + + MSFT + true + ${cid} + ${email} + US + 1033 + ${safeFirstName} + ${safeLastName} + 40100643 + ${clientIp} + + + ${cid} + + + + + + + ${responses.join('\n ')} + + + `; +} + + +function rstHandler() { + try { + + // Get POST data + let requestBody = ''; + if (request_headers.post_data) { + if (Buffer.isBuffer(request_headers.post_data)) { + requestBody = request_headers.post_data.toString('utf8'); + } else if (typeof request_headers.post_data === 'string') { + requestBody = request_headers.post_data; + } else if (typeof request_headers.post_data === 'object') { + requestBody = JSON.stringify(request_headers.post_data); + } + } else { + console.log("No post_data found. Available keys:", Object.keys(request_headers)); + return generateErrorResponse("0x80048820", "No POST data received"); + } + + if (!requestBody || requestBody.trim() === '') { + console.log("Empty request body"); + return generateErrorResponse("0x80048820", "Empty request body"); + } + + // Authentication + let email = extractXmlValue(requestBody, 'Username'); + let password = extractXmlValue(requestBody, 'Password'); + + let userId = null; + let userEmail = null; + let firstName = "User"; + let lastName = "User"; + + if ((!email || !password) && requestBody.includes('CipherValue')) { + console.log("No username/password found, trying token authentication..."); + const token = extractTokenFromCipherValue(requestBody); + + if (token) { + const tokenValidation = validateTokenAndGetUser(token); + if (tokenValidation.success) { + userId = tokenValidation.userId; + userEmail = tokenValidation.email; + console.log(`Token authentication successful for: ${userEmail} (${userId})`); + + if (request_headers.cookie) { + const cookieEmail = getCookie(request_headers.cookie, 'RST_Email'); + const cookieUsername = getCookie(request_headers.cookie, 'rst_username'); + if (cookieEmail) userEmail = cookieEmail; + if (cookieUsername) firstName = cookieUsername; + } + } else { + console.log("Token validation failed"); + return generateErrorResponse("0x80048821", "Invalid token"); + } + } else { + console.log("No token found in CipherValue"); + return generateErrorResponse("0x80048820", "Missing credentials/token"); + } + } + else if (email && password) { + console.log(`Extracted - Email: ${email}, Password: ${password ? '***' : 'empty'}`); + + if (email && email.indexOf('@') < 0) { + const domain = (minisrv_config && minisrv_config.config && minisrv_config.config.domain_name) || 'wtv.zefie.com'; + email = `${email}@${domain}`; + } + + userEmail = email; + firstName = email.split('@')[0]; + userId = crypto.createHash('md5').update(email).digest('hex'); + console.log(`Authentication successful for: ${userEmail} (${userId})`); + } + else { + console.log("Missing both credentials and token"); + return generateErrorResponse("0x80048820", "Missing credentials/token"); + } + + if (!userId || !userEmail) { + console.log("Failed to get user identity"); + return generateErrorResponse("0x80048821", "User identity not found"); + } + + const cookieHeaders = [ + setCookie('rst_email', userEmail, { path: '/' }), + setCookie('rst_username', firstName, { path: '/' }), + setCookie('rst_authenticated', 'true', { path: '/', expires: 'Wed, 30-Dec-2037 16:00:00 GMT' }) + ]; + + const response = generateSuccessResponse(requestBody, userId, userEmail, firstName, lastName); + + for (const cookie of cookieHeaders) { + headers += `\nSet-Cookie: ${cookie}`; + } + + return response; + + } catch (error) { + console.error("RST Handler Error:", error); + console.error("Error stack:", error.stack); + return generateErrorResponse("0x80048820", `Internal error: ${error.message}`); + } +} + +let result = rstHandler(); +if (result) { + data = result; +} diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/passport/ppsecure/clientpost.srf.js b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/passport/ppsecure/clientpost.srf.js new file mode 100644 index 00000000..904d1e36 --- /dev/null +++ b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/passport/ppsecure/clientpost.srf.js @@ -0,0 +1,13 @@ +const minisrv_service_file = true; + +// Wrong email return: +// Wrong Password return: + +// Example Client request: example@example.comexamplefalse11 + +data = `t=Disabled&p=Disabled`; // T and P cant be nulled they have to have some content in it + +headers = `200 OK +Content-Type: text/xml`; + +console.log(request_headers.query); diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Home.aspx.js b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Home.aspx.js index 50e4443a..9775e21c 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Home.aspx.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Home.aspx.js @@ -4,15 +4,15 @@ const minisrv_service_file = true; const WeatherCity = 'Your City'; const WeatherTemp = '72'; const WeatherDescription = 'Sunny'; -const WeatherIcon = '/Pages/Home/Weather/26.gif'; +const WeatherIcon = '/Home/Weather/26.gif'; // News headlines -const NewsLink1 = 'http://sg1.trusted.msntv.msn.com/Pages/Tricks/he.mp3'; -const NewsLink2 = 'http://sg1.trusted.msntv.msn.com/Pages/Tricks/pokemon-black-2.mp3'; -const NewsLink3 = 'http://sg1.trusted.msntv.msn.com/Pages/Tricks/he.mp3'; -const NewsTitle1 = 'Ryder Smells'; -const NewsTitle2 = 'Ryder Smells'; -const NewsTitle3 = 'Ryder Smells'; +const NewsLink1 = ''; +const NewsLink2 = ''; +const NewsLink3 = ''; +const NewsTitle1 = '...'; +const NewsTitle2 = '...'; +const NewsTitle3 = '...'; headers = `200 OK Content-type: text/html`; @@ -22,7 +22,7 @@ data = ` Home - + @@ -187,7 +187,7 @@ data = `
- Promotional Image + Promotional Image
diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/HTC/en-us/ScrollingDIV.htc b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/HTC/en-us/ScrollingDIV.htc new file mode 100755 index 00000000..80b8e5be --- /dev/null +++ b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/HTC/en-us/ScrollingDIV.htc @@ -0,0 +1,1095 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlFF.png b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlFF.png new file mode 100755 index 00000000..d1ce0a84 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlFF.png differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlMute.png b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlMute.png new file mode 100755 index 00000000..59b4eccb Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlMute.png differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlNext.png b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlNext.png new file mode 100755 index 00000000..94bf3dee Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlNext.png differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlPause.png b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlPause.png new file mode 100755 index 00000000..856ac233 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlPause.png differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlPlay.png b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlPlay.png new file mode 100755 index 00000000..4f079ea0 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlPlay.png differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlPrev.png b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlPrev.png new file mode 100755 index 00000000..c316e7cb Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlPrev.png differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlRew.png b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlRew.png new file mode 100755 index 00000000..c6d64fb0 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlRew.png differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlStop.png b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlStop.png new file mode 100755 index 00000000..ea35d4ae Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlStop.png differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlUnmute.png b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlUnmute.png new file mode 100755 index 00000000..eef07d6a Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Media/Assets/PanelPlayerControlUnmute.png differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Panels/Images/PanelPlayerLargeBG.jpg b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Panels/Images/PanelPlayerLargeBG.jpg new file mode 100755 index 00000000..1cda96c0 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Panels/Images/PanelPlayerLargeBG.jpg differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Panels/Images/PanelPlayerSmallLeftSide.jpg b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Panels/Images/PanelPlayerSmallLeftSide.jpg new file mode 100755 index 00000000..f77eed1c Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Panels/Images/PanelPlayerSmallLeftSide.jpg differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Panels/Images/PanelPlayerSmallMiddleStretch.jpg b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Panels/Images/PanelPlayerSmallMiddleStretch.jpg new file mode 100755 index 00000000..fbbe0cce Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Panels/Images/PanelPlayerSmallMiddleStretch.jpg differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Panels/Images/PanelPlayerSmallRightSide.jpg b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Panels/Images/PanelPlayerSmallRightSide.jpg new file mode 100755 index 00000000..ef74cbf5 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Panels/Images/PanelPlayerSmallRightSide.jpg differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Shared/Images/BulletCustom.gif b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Shared/Images/BulletCustom.gif new file mode 100755 index 00000000..129cb435 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Shared/Images/BulletCustom.gif differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Shared/Images/Icon_Help_RelatedLink.png b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Shared/Images/Icon_Help_RelatedLink.png new file mode 100755 index 00000000..076be34b Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Shared/Images/Icon_Help_RelatedLink.png differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Shared/Images/ScrollIndicatorLeftGlobal.png b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Shared/Images/ScrollIndicatorLeftGlobal.png new file mode 100755 index 00000000..58c72d56 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Shared/Images/ScrollIndicatorLeftGlobal.png differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Shared/Images/ScrollIndicatorRightGlobal.png b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Shared/Images/ScrollIndicatorRightGlobal.png new file mode 100755 index 00000000..4db3d1c2 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/Anduril/Images/en-us/_debug/Shared/Images/ScrollIndicatorRightGlobal.png differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/BaseClient/HTCTransforms/en-us/LoopingDIV.htc b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/BaseClient/HTCTransforms/en-us/LoopingDIV.htc new file mode 100755 index 00000000..d069c583 --- /dev/null +++ b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Home/Shared/BaseClient/HTCTransforms/en-us/LoopingDIV.htc @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Register/Established-Account.aspx.js b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Register/Established-Account.aspx.js index d7f53da5..35c1db93 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Register/Established-Account.aspx.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Register/Established-Account.aspx.js @@ -75,29 +75,42 @@ data = ` @@ -116,7 +129,7 @@ data = `
- +
@@ -139,9 +152,9 @@ data = `

`; -} \ No newline at end of file +} diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Register/Promotion-code.aspx.js b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Register/Promotion-code.aspx.js index 85c424b3..2edea3e9 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Register/Promotion-code.aspx.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Register/Promotion-code.aspx.js @@ -15,7 +15,7 @@ if (!password && request_headers.cookie) { if (pm) password = decodeURIComponent(pm[1]); } -if (email && email.indexOf('@') < 0) email += "@"+minisrv_config.config.service_name; +if (email && email.indexOf('@') < 0) email += "@"+minisrv_config.config.domain_name; let userAvail = false; if (email) { @@ -83,4 +83,4 @@ data = ` `; -} \ No newline at end of file +} diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Register/Register-MSN-email.aspx.js b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Register/Register-MSN-email.aspx.js index c93dd449..2dc2ae6c 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Register/Register-MSN-email.aspx.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/Register/Register-MSN-email.aspx.js @@ -51,7 +51,7 @@ data = `

Type your minisrv username:

-

@${minisrv_config.config.service_name}

+

@${minisrv_config.config.domain_name}


Next, enter a password:

diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/connection/.GatePage.aspx.js.kate-swp b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/connection/.GatePage.aspx.js.kate-swp new file mode 100644 index 00000000..3e7a17de Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/connection/.GatePage.aspx.js.kate-swp differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/connection/GatePage.aspx.js b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/connection/GatePage.aspx.js new file mode 100644 index 00000000..fd8cbd8a --- /dev/null +++ b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/connection/GatePage.aspx.js @@ -0,0 +1,706 @@ +const minisrv_service_file = true; + +// Get the phase parameter from the query string +let phase = request_headers.query.phase; +if (Array.isArray(phase)) phase = phase[0]; + +let BoxId = request_headers.query.BoxId; +if (Array.isArray(BoxId)) BoxId = BoxId[0]; +let clientIp = socket.remoteAddress; +let banned = false; +let sessionId = null; +ServiceDomain = minisrv_config.config.domain_name; + +// Use the shared MSNTV2 helper injected by WTV-MSNTV2 VM context. +if (BoxId) { + if (!BoxId || BoxId.length != 20 || !/^\d+$/.test(BoxId)) + { + console.warn("Invalid BoxId format "+BoxId+" from "+clientIp); + banned = true; + } else { + sessionId = encodeSessionID(BoxId); + } +} else if (request_headers.cookie && request_headers.cookie.SessionID) { + BoxID = decodeSessionID(request_headers.cookie.SessionID); + sessionId = request_headers.cookie.SessionID; +} else { + console.warn("No BoxId provided by client "+clientIp); + banned = true; +} + +if (!sessionId && !banned) { + banned = true; +} + +if (!session_data && BoxId) { + console.log("Missing session_data for BoxId %s", BoxId); +} + +let registered = false; +let username = ''; +let Profile_Picture +if (session_data) { + registered = session_data.isRegistered(); + if (registered) { + username = session_data.getSessionData("subscriber_username") || ''; + Profile_Picture = session_data.getSessionData('ProfilePicture') || ''; + } +} + +// Current UTC time +const now = new Date(); + +const timeData = { + hh: now.getUTCHours(), + mm: now.getUTCMinutes(), + ss: now.getUTCSeconds(), + mo: now.getUTCMonth() + 1, + dd: now.getUTCDate(), + yyyy: now.getUTCFullYear() +}; + +const timezoneMap = { + "UTC": { + standardName: "UTC", + standardOffset: 0, + daylightName: "UTC", + daylightOffset: 0 + } +}; + +const { + standardName, + standardOffset, + daylightName, + daylightOffset +} = timezoneMap["UTC"]; + +// Set session cookie on the client +if (sessionId) { + setCookie('SessionID', sessionId, { path: '/' }); +} + +// Handle different phases +switch (phase) { + case "Bootstrap": + headers = `200 OK + Content-type: text/html`; + + data = ` + + + + + + + + `; + break; + + case "BoxCheck": + + headers = `200 OK + Content-type: text/html`; + + data = ` + + + + + + + + + + + `; + break; + + case "UserCheck": + headers = `Content-type: text/html`; + + // Check if the msntv.msn.com token is correct TODO + + data = ` + + + + + + + +`; +break; + +default: +headers = `200 OK +Content-type: text/html`; + +data = ` + + + +`; +break; +} diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/headwaiter/connection/boxcheck.html.js b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/connection/boxcheck.html.js similarity index 77% rename from zefie_wtvp_minisrv/includes/ServiceVault/msntv2/headwaiter/connection/boxcheck.html.js rename to zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/connection/boxcheck.html.js index 1b201544..b1c91681 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/headwaiter/connection/boxcheck.html.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/connection/boxcheck.html.js @@ -37,6 +37,8 @@ if (session_data) { registered = session_data.isRegistered(); if (registered) { username = session_data.getSessionData("subscriber_username") || ''; + Profile_Picture = session_data.getSessionData('ProfilePicture') || ''; + } } @@ -103,23 +105,23 @@ data = ` var email = TVShell.UserManager.EMail; var wanProvider = TVShell.ConnectionManager.WANProvider; - var banned = ${banned}; // JavaScript boolean value - var registered = ${registered}; // JavaScript boolean value - var username = "${username}"; // JavaScript string value + var banned = ${banned}; + var registered = ${registered}; + var username = "${username}"; + var picture = "${Profile_Picture}"; - InitializeGuestMode(); - RemoveGuestUsers(); + InitializeGuestMode(); + RemoveGuestUsers(); if (!banned) { - TVShell.AddSecretCode(10000); // sync shit - TVShell.AddSecretCode(10001); // sync shit - TVShell.AddSecretCode(10002); // sync shit - TVShell.AddSecretCode(93288); // Service Select - TVShell.AddSecretCode(77437); // Spooky Options - TVShell.AddSecretCode(6145539); // Force Crash - var entry = TVShell.ServiceList.Add("connection::login"); - entry.URL = "https://headwaiter.trusted.msntv.msn.com/connection/login.aspx?BoxId=${BoxId}"; - TVShell.ServiceList.Save(); + // DEBUG ONLY! USE WITH CAUTION! + TVShell.AddSecretCode(10000); // Power-on for nightly update + TVShell.AddSecretCode(10001); // Power-on for nightly email check at anchor time + TVShell.AddSecretCode(10002); // Power-on for nightly email check at non-anchor time + TVShell.AddSecretCode(77437); // spooky dialing options + TVShell.AddSecretCode(93288); // Service Selection Page + TVShell.AddSecretCode(6145539); // crash the system + TVShell.AddSecretCode(3932397); // update loop test } function CheckForUser(usernameToCheck) { @@ -129,11 +131,11 @@ data = ` if (user == usernameToCheck) { return true; } - } + } return false; } - function DoLogin() { + function DoLogin() { var currentUser = TVShell.UserManager.CurrentUser; if (currentUser == null) { if (banned === true) { @@ -146,15 +148,30 @@ data = ` var user = TVShell.UserManager.AddNew(username); if (user) { user.IsPersistent = true; + user.setAttribute("GuestUser", false); + var dt = new Date(); + + TVShell.UserManager.LastLoginTime = dt.getTime() / 1000 + dt.getTimezoneOffset() * 60; + + TVShell.UserManager.OfflineAppMaxAccessDays = 20; + TVShell.UserManager.OfflineAppMaxAccessTimes = 20; + TVShell.UserManager.CurrentUser = user; + user.LargeIcon = "msntv:/SignInPics/big/"+ picture + ".png"; + user.SmallIcon = "msntv:/SignInPics/small/"+ picture + ".gif"; + TVShell.UserManager.Save(); + entry = TVShell.ServiceList.Add('connection::login'); + entry.URL = 'https://headwaiter.trusted.msntv.msn.com/connection/GatePage.aspx?phase=Bootstrap&purpose=Authorize'; + entry.Description = '${minisrv_config.config.service_name}/sg1 [${minisrv_config.config.hide_minisrv_version ? "beta" : minisrv_version_string.replace("zefie's wtv minisrv ","")}]'; + TVShell.ServiceList.Save(); } } } - SetProgress('Welcome, New User!', 100); var myPanel = TVShell.PanelManager.Item('main') if (registered === true) { var signon = TVShell.BuiltinServiceList.Item("SignOn"); var panel = TVShell.PanelManager.FocusedPanel; var atLogin = false; + TVShell.ConnectionManager.ServiceState = 'ReSignIn'; if ( signon && panel && panel.Name == "main" ) { if ( IsMainPanelOnPage( signon.URL ) ) atLogin = true; @@ -165,7 +182,7 @@ data = ` GotoSignOn(); } } else { - if (myPanel) myPanel.GotoURL('https://sg1.trusted.msntv.msn.com/register/Establish-your-MSN-TV-Account.html'); + if (myPanel) myPanel.GotoURL('https://sg1.trusted.msntv.msn.com/Register/Establish-your-MSN-TV-Account.html'); } if (myPanel) { myPanel.ClearTravelLog(); @@ -180,27 +197,23 @@ data = ` } } - if (currentUser != null) { + if (currentUser != null) { var serviceArgs = new Array(); - var ProductionArgs = new Array("msntv.msn.com", "MBI", 0, 0, + var ProductionArgs = new Array("msntv.msn.com", "MBI", 0, 0, "mail.services.live.com", "MBI", 0, 0, "livefilestore.com", "MBI", 0, 0, "messenger.msn.com", "?id=507", 0, 0, "spaces.live.com", "MBI", 0, 0 ); - var PPEArgs = new Array(); - var INTArgs = new Array(); serviceArgs[0] = ProductionArgs; - serviceArgs[1] = PPEArgs; - serviceArgs[2] = INTArgs; try { TVShell.LoginManager.IDCRLInitialize(0); TVShell.LoginManager.IDCRLLogonAndAuthToServices(serviceArgs[0]); } catch (e) { if (window.console) console.log("IDCRL error: " + e.message); } - - GoToUserCheck(); + + GoToUserCheck(); } } @@ -236,20 +249,18 @@ data = ` return null; } - function CheckBoxID() { - SetProgress("${minisrv_config.config.service_name} [${minisrv_config.config.hide_minisrv_version ? "beta" : minisrv_version_string.replace("zefie's wtv minisrv ","")}] Welcome, ${username != '' ? username : 'Guest'}!", 20); - } - function GoToUserCheck() { if (banned === true) { - var url = 'https://headwaiter.trusted.msntv.msn.com/connection/banned.html'; + var url = 'https://sg1.trusted.msntv.msn.com/connection/banned.html'; var myPanel = TVShell.PanelManager.Item('service'); if (myPanel) myPanel.GotoURL(url); } else if (registered) { - GotoSignOn(); + var url = 'https://sg1.trusted.msntv.msn.com/connection/usercheck.html'; + var myPanel = tvShell.PanelManager.Item('service'); + if (myPanel) myPanel.GotoURL(url); } } - + function SetProgress(text, percent) { if (progressPanel) { progressPanel.Document.SetProgressText(text); @@ -278,7 +289,6 @@ data = ` if (!IsServicePanel()) { DontContinue(); } else { - CheckBoxID(); DoPoptimization(); DoLogin(); @@ -287,21 +297,21 @@ data = ` } catch (e) { if (window.console) console.log("SetTimeZone error: " + e.message); } - + try { TVShell.DeviceControl.SetClock(${timeData.hh}, ${timeData.mm}, ${timeData.ss}, ${timeData.mo}, ${timeData.dd}, ${timeData.yyyy}); TVShell.DeviceControl.ClockSet = true; } catch (e) { if (window.console) console.log("SetClock error: " + e.message); } - + } } catch (e) { if (window.console) console.log("Error in boxcheck: " + e.message); - + var myPanel = TVShell ? TVShell.PanelManager.Item('main') : null; - if (myPanel) myPanel.GotoURL('https://headwaiter.trusted.msntv.msn.com/connection/error.html'); + if (myPanel) myPanel.GotoURL('https://sg1.trusted.msntv.msn.com/connection/error.html'); } -`; \ No newline at end of file +`; diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/connection/usercheck.aspx.js b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/connection/usercheck.aspx.js new file mode 100644 index 00000000..067660d7 --- /dev/null +++ b/zefie_wtvp_minisrv/includes/ServiceVault/msntv2/sg1/connection/usercheck.aspx.js @@ -0,0 +1,193 @@ +const minisrv_service_file = true; + +headers = `Content-type: text/html`; + +data = ` + + + + + + + +`;