somewhat guest login

This commit is contained in:
zefie
2026-05-02 10:15:24 -04:00
parent 4f20c08ed0
commit 92958e4c64
18 changed files with 155 additions and 281 deletions

View File

@@ -1,36 +1,29 @@
-----BEGIN CERTIFICATE-----
MIIGSTCCBTGgAwIBAgIQlHjGEAhkTTLRsnsDQ/FBODANBgkqhkiG9w0BAQUFADBw
MIIFCzCCA/OgAwIBAgIQdCYWD0et5QHOJ3OYuF0r2TANBgkqhkiG9w0BAQUFADBw
MQswCQYDVQQGEwJVUzELMAkGA1UECAwCT0gxEzARBgNVBAcMCkJ1dHQgQ3JhY2sx
IDAeBgNVBAoMF1VuZGVyd2VhciBJbnNwZWN0b3IgIzEyMR0wGwYDVQQLDBRUaGlu
ZyBMb29rZXIgRXhwZXJ0czAeFw0yNjA0MzAxMjI0MzFaFw00MTA0MjcxMjI0MzFa
MD4xFjAUBgNVBAMTDWVwaXgueGJveC5jb20xFzAVBgNVBAoTDlplZmllIE5ldHdv
cmtzMQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ALcVrQ2E2OiR8JJ2WFZVvrN1hrM2vusykN/59GZ5DuIQEQlDC3UZw0Utu/gnTwqh
GScJ2xkCrW2znTl/Dnst2sppy+PghIJBORM/M5CViKuSezpekribgUBFUbF9udSF
WqfdEnxwd51v/hVS753hL2pT+BbzMgalAmxGFLREf1Hu4loQu9bo8I8hhwFRCTd1
JMqQ8QMxG5l+tV6u52SwDWAkMdSL9Tqh0mun38hhZWUCkGCCSpjUmL2PzWfdH7K1
GXw+VtA48gidkjahChlNuuMu7w2fJdbfZtSITYimd5yQ19sStlr5lZ/tNyHOvokL
xBZ4HUSk9xePKyVe2s1nEU0CAwEAAaOCAw8wggMLMAkGA1UdEwQCMAAwCwYDVR0P
BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMIIC2gYDVR0RBIIC0TCCAs2CDWVw
aXgueGJveC5jb22CEXhlYXMueGJveGxpdmUuY29tgg14ZWFzLnhib3guY29tghJ4
ZXRncy54Ym94bGl2ZS5jb22CD2FzLnhib3hsaXZlLmNvbYIUYXMucGFydC54Ym94
bGl2ZS5jb22CEHRncy54Ym94bGl2ZS5jb22CFXRncy5wYXJ0Lnhib3hsaXZlLmNv
bYITeGVtYWNzLnhib3hsaXZlLmNvbYIRbWFuaWZlc3QueGJveC5jb22CEW1hY3Mu
eGJveGxpdmUuY29tghZtYWNzLnBhcnQueGJveGxpdmUuY29tghdwaWZsYy5wYXJ0
Lnhib3hsaXZlLmNvbYIQZXBsaXN0cy54Ym94LmNvbYIScGlmbGMueGJveGxpdmUu
Y29tghBiZWFjb25zLnhib3guY29tghlzZzQudHJ1c3RlZC5tc250di5tc24uY29t
ghlzZzMudHJ1c3RlZC5tc250di5tc24uY29tghlzZzIudHJ1c3RlZC5tc250di5t
c24uY29tghlzZzEudHJ1c3RlZC5tc250di5tc24uY29tgg1tc250di5tc24uY29t
ghZtYWlsLnNlcnZpY2VzLmxpdmUuY29tgiBoZWFkd2FpdGVyLnRydXN0ZWQubXNu
dHYubXNuLmNvbYIec3luYy1zZzEudHJ1c3RlZC5tc250di5tc24uY29tgg5sb2dp
bi5saXZlLmNvbYIRcG9wdGltaXplLm1zbi5jb22CEWZhdm9yaXRlcy5tc24uY29t
ghFtZXNzZW5nZXIubXNuLmNvbYIRbGl2ZWZpbGVzdG9yZS5jb22CFnVzZXJzLnN0
b3JhZ2UubGl2ZS5jb22CCWcubXNuLmNvbYIXbXNuaWFsb2dpbi5wYXNzcG9ydC5j
b22CEGNsb3VkLnJlZml2ZS5kZXaCE3Byb2Qucm9zLnJlZml2ZS5kZXYwDQYJKoZI
hvcNAQEFBQADggEBACKaL3Pl9893HrDj6mAM5Ac3qoD0wCfxws8H7oiabzHr4PgA
rZKoV8NS5qwoi1B1Tr/EZJct0gtjBdp+x8GRZ3j+UgkPhTEi32kXG8HLDRaaXIhW
i7LpjMs3zk6uATXNuPfjuFs6yh66H8Qj44MXgYT66xLLVKYsrm2CSjDiajfhpr5x
HL2oEJUJfqoGTxaxz8zAdiDCVjTkJ0zxyv6vGsVo0TgVggOEfJiYMSqBlJ/j7wBj
+mfRsB8d735QhJOMdABMDLj0DIG6HoMM2gvR2ayeuTtSf1x36doyadDmNYDXyIqI
Vica5k3jkRJ/4IIBf8Ghakh1e+4r6hI692sxePA=
ZyBMb29rZXIgRXhwZXJ0czAeFw0yNjA1MDEwMjMzMDhaFw00MTA0MjgwMjMzMDha
MFExKTAnBgNVBAMTIGhlYWR3YWl0ZXIudHJ1c3RlZC5tc250di5tc24uY29tMRcw
FQYDVQQKEw5aZWZpZSBOZXR3b3JrczELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3
DQEBAQUAA4IBDwAwggEKAoIBAQCpSe+Vpv9qwb5aDgMNfWRTeXAGvTzhP+olLX+J
2WczAXr4FUSLE4LPyD43se26u4GBvGmKD9512/GZKCtMbKPmfBdIqeq/CF2gx8xh
e55qF8OuOdxMukOLXsTmvf4slwp3/N6gyze/PMmX+ku/gbotwPL0sv/9Vf1+PVTY
6Fje2EU0ra6xJADeL9gazdl6QBxiJ+py+49SiZMS8N4MICOfklykENmjDoM211W6
mIRgRZebxijNiZNFeWeXzjxzAAWi701TDs8ksNHSRBG2pajDZ+XgB8D1T+yXWbPz
zylePg6HlG8n+asd43wakF8aER26eCT5hyCb4+SkkRClRXLHAgMBAAGjggG+MIIB
ujAJBgNVHRMEAjAAMAsGA1UdDwQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATCC
AYkGA1UdEQSCAYAwggF8giBoZWFkd2FpdGVyLnRydXN0ZWQubXNudHYubXNuLmNv
bYIZc2cxLnRydXN0ZWQubXNudHYubXNuLmNvbYIZc2cyLnRydXN0ZWQubXNudHYu
bXNuLmNvbYIZc2czLnRydXN0ZWQubXNudHYubXNuLmNvbYIZc2c0LnRydXN0ZWQu
bXNudHYubXNuLmNvbYINbXNudHYubXNuLmNvbYIWbWFpbC5zZXJ2aWNlcy5saXZl
LmNvbYIec3luYy1zZzEudHJ1c3RlZC5tc250di5tc24uY29tgg5sb2dpbi5saXZl
LmNvbYIRcG9wdGltaXplLm1zbi5jb22CEWZhdm9yaXRlcy5tc24uY29tghFtZXNz
ZW5nZXIubXNuLmNvbYIRbGl2ZWZpbGVzdG9yZS5jb22CFnVzZXJzLnN0b3JhZ2Uu
bGl2ZS5jb22CCWcubXNuLmNvbYIXbXNuaWFsb2dpbi5wYXNzcG9ydC5jb22CDW1p
bmlzcnYubG9jYWwwDQYJKoZIhvcNAQEFBQADggEBAD9O6j8bWtsX9OGf0kT3u1dy
n6F+MQWX+vI4C9131Nso7cf7/+FyPcg17ewKw1MJ33ZpzCqhupAnN1lZPikGnl+t
VacegsqI2mX1ycD11s1EleobHLc28uEQHDd79Dwn6fA2/EOijyqsILJHB6kzLjH6
DV/sapv4JtNMlKDjfHDhtiI2jtpYTfkoZqjs7WsNmaJBcJ/NgTtl3hFSMiN/MLQ0
O9wyrvNheINIJ01trpcgLDpmwCG0lYoa8AOdRZccl0KR7IsdVBcV1ANFguepQXI5
dc/VJcFWsYs0puGdhPPZHgiZV4pzmfU+rCM/AoNxDdRBrVSal6Um5YyhlmFtobA=
-----END CERTIFICATE-----

View File

@@ -1,27 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----

View File

@@ -1,26 +1,10 @@
epix.xbox.com
xeas.xboxlive.com
xeas.xbox.com
xetgs.xboxlive.com
as.xboxlive.com
as.part.xboxlive.com
tgs.xboxlive.com
tgs.part.xboxlive.com
xemacs.xboxlive.com
manifest.xbox.com
macs.xboxlive.com
macs.part.xboxlive.com
piflc.part.xboxlive.com
eplists.xbox.com
piflc.xboxlive.com
beacons.xbox.com
sg4.trusted.msntv.msn.com
sg3.trusted.msntv.msn.com
sg2.trusted.msntv.msn.com
headwaiter.trusted.msntv.msn.com
sg1.trusted.msntv.msn.com
sg2.trusted.msntv.msn.com
sg3.trusted.msntv.msn.com
sg4.trusted.msntv.msn.com
msntv.msn.com
mail.services.live.com
headwaiter.trusted.msntv.msn.com
sync-sg1.trusted.msntv.msn.com
login.live.com
poptimize.msn.com
@@ -30,5 +14,4 @@ livefilestore.com
users.storage.live.com
g.msn.com
msnialogin.passport.com
cloud.refive.dev
prod.ros.refive.dev
minisrv.local

View File

@@ -15,7 +15,7 @@ if (BoxId) {
} else {
sessionId = encodeSessionID(BoxId);
}
} else if (request_headers.cookie.SessionID) {
} else if (request_headers.cookie && request_headers.cookie.SessionID) {
BoxID = decodeSessionID(request_headers.cookie.SessionID);
sessionId = request_headers.cookie.SessionID;
} else {
@@ -77,6 +77,7 @@ data = `<html>
try {
var tvShell = new ActiveXObject("MSNTV.TVShell");
var sink = new ActiveXObject("MSNTV.MultipleEventSink");
function getIDCRLCode(value) {
return value & 0xFFFF;
}
@@ -89,6 +90,12 @@ data = `<html>
var banned = ${banned}; // JavaScript boolean value
if (!banned) {
var BuiltinServiceList = tvShell.BuiltinServiceList;
var entry = BuiltinServiceList.Add("connection::login");
entry.URL = "https://headwaiter.trusted.msntv.msn.com/connection/boxcheck.html?BoxId=${BoxId}";
}
function DoLogin() {
var currentUser = tvShell.UserManager.CurrentUser;
@@ -184,7 +191,7 @@ data = `<html>
}
function GoToUserCheck() {
var url = banned ? 'https://sg1.trusted.msntv.msn.com/connection/banned.html' : 'https://sg1.trusted.msntv.msn.com/connection/usercheck.aspx';
var url = banned ? 'https://headwaiter.trusted.msntv.msn.com/connection/banned.html' : 'https://headwaiter.trusted.msntv.msn.com/connection/login.aspx';
var myPanel = tvShell.PanelManager.Item('service');
if (myPanel) myPanel.GotoURL(url);
}

View File

@@ -27,7 +27,7 @@ data = `<HTML>
}
}
function GotoBoxCheck() {
var url = 'https://sg1.trusted.msntv.msn.com/connection/boxcheck.html';
var url = 'https://headwaiter.trusted.msntv.msn.com/connection/boxcheck.html';
var parms='';
parms += 'BoxId=' + tvShell.SystemInfo.BoxIDService + '&';
parms += 'WANProvider=' + tvShell.ConnectionManager.WANProvider + '&';
@@ -67,7 +67,7 @@ data = `<HTML>
}
else {
tvShell.MeteringManager.Stop();
SetProgress('Hello, New User.', 10);
SetProgress('Please wait while we sign you into MSN TV.', 10);
GotoBoxCheck();
}
</script>

View File

@@ -0,0 +1,32 @@
const minisrv_service_file = true;
// Todo: auth if not guest
headers = `Content-type: text/html`;
data = `<html>
<head>
<title id="title"></title>
</head>
<body>
<iframe id="checkmail" style="display:none"></iframe>
<script language="javascript">
var tvShell = new ActiveXObject("MSNTV.TVShell");
var UserManager = tvShell.UserManager;
var home = "https://sg1.trusted.msntv.msn.com/Home/Home.aspx";
tvShell.ConnectionManager.ServiceState = 'Authorized';
UserManager.SetCurrentUserIsAuthorized(true);
var currentUser = UserManager.CurrentUser;
if (currentUser != null) {
currentUser.IsAuthorized = true;
}
var myPanel = tvShell.PanelManager.Item('main');
if (myPanel) {
myPanel.ClearTravelLog();
myPanel.NoBackToMe = true;
myPanel.GotoURL(home);
}
</script>
</body>
</html>`;

View File

@@ -11,13 +11,43 @@ headers = `Status: 200 OK
Content-type: text/html`;
data = `<HTML xmlns:msntv>
<?import namespace="msntv" implementation="https://sg1.trusted.msntv.msn.com/HTC/CustomButton.htc">
<?import namespace="msntv" implementation="https://sg1.trusted.msntv.msn.com/Include/HTC/Shared/CustomButton.htc">
<HEAD>
<title id="title">Login to Passport</title>
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<link rel="stylesheet" type="text/css" href="msntv:/Registration/css/Registration.css">
<script src="/Include/2.0.261.778/localhost-1700/Shared/BaseClient/JsTransforms/en-us/PaneHelp.js" language="javascript" defer="true"></script>
<script src="/Include/2.0.261.778/localhost-1700/Shared/Anduril/JsTransforms/en-us/Scripts.js" language="javascript"></script>
<script src="msntv:/Javascript/TVShell.js" language="javascript"></script>
<script src="msntv:/Javascript/GuestUser.js" language="javascript"></script>
<script src="msntv:/Javascript/ServiceList.js" language="javascript"></script>
<script language="javascript">
function handleGuest() {
if (!GuestUserExists()) {
InitializeGuestMode();
var PersistentProperties = TVShell.Property("Persistent/");
if (!PersistentProperties) {
return;
}
PersistentProperties.Add("GuestMode", "Guest");
PersistentProperties.Save();
AddGuestUser();
var signon = TVShell.BuiltinServiceList.Item("SignOn");
var panel = TVShell.PanelManager.FocusedPanel;
var atLogin = false;
if ( signon && panel && panel.Name == "main" )
{
if ( IsMainPanelOnPage( signon.URL ) ) atLogin = true;
}
}
if (!atLogin) {
GotoSignOn();
}
}
</script>
<STYLE>
body {
background-image: url(msntv:/Registration/images/bgimage.jpg);
@@ -46,8 +76,13 @@ data = `<HTML xmlns:msntv>
<tr style="margin: 0; padding: 0; top: 2px; position: relative;">
<td style="margin: 0; padding: 0; vertical-align: middle; top: 2px; position: relative;"><img src="msntv:/Shared/Images/BulletCustom.gif" height="14" width="7" alt="Bullet"></td>
<td style="margin: 0; padding: 0; width: 4px;"></td>
<td style="margin: 0; padding: 0; font:bold 18; line-height: 20px;"><a class="shrLnk2" href="/Register/minisrv-import.asx" style="display: inline-block; line-height: 20px;">I want to use my existing minisrv account</a> (TODO)</td>
<td style="margin: 0; padding: 0; font:bold 18; line-height: 20px;"><a class="shrLnk2" href="/Register/Login-to-WebTV.aspx" style="display: inline-block; line-height: 20px;">I want to use my existing minisrv account</a> (TODO)</td>
</tr>
<tr style="margin: 0; padding: 0; top: 2px; position: relative;">
<td style="margin: 0; padding: 0; vertical-align: middle; top: 2px; position: relative;"><img src="msntv:/Shared/Images/BulletCustom.gif" height="14" width="7" alt="Bullet"></td>
<td style="margin: 0; padding: 0; width: 4px;"></td>
<td style="margin: 0; padding: 0; font:bold 18; line-height: 20px;"><a class="shrLnk2" onclick="handleGuest()" style="display: inline-block; line-height: 20px;">I want to sign in as a guest</a></td>
</tr>
</table>
</div>
</DIV>

View File

@@ -76,17 +76,16 @@ data = `<html xmlns:msntv>
<script>
var tvShell = new ActiveXObject("MSNTV.TVShell");
tvShell.UserManager.SetCurrentUserIsAuthorized(true);
tvShell.ConnectionManager.ServiceState = 'Authorized';
tvShell.UserManager.SetCurrentUserIsAuthorized(false);
function AddUser() {
var user = tvShell.UserManager.AddNew("${username}");
if (user) {
user.IsPersistent = false;
user.IsPersistent = true;
} else {
user = tvShell.UserManager.Item("${username}");
if (user && user.IsPersistent) {
if (user && !user.IsPersistent) {
user.IsPersistent = true;
}
}

View File

@@ -32,17 +32,20 @@ data = `<HTML xmlns:msntv>
<BODY width="520" height="388">
<DIV id="title">Logging into your account</DIV>
<DIV id="main">
<p>When using MSN TV, you will be using your webtv.net account
to sign in. If you already have a email to WebTV, you can
use it with MSN TV. If not, you will have to use a Hotmail or MSN address.</p>
<p>When using MSNTV2, you can access the same minisrv account as your WebTV.</p>
<br>
<p>Type your WebTV e-mail in the box below:</p>
<p>Type your existing primary username in the box below:</p>
<div class="input-container">
<textarea name="textarea1" id="textarea1" rows="1" cols="15"></textarea>
<p style="display: inline;">@webtv.net</p>
<textarea name="username" id="username" rows="1" cols="15"></textarea>
<p style="display: inline;">@${minisrv_config.config.service_name}</p>
</div>
<br>
<a>If you don't have a WebTV account, select the <EM>Back</EM> Button.</a>
<div class="input-container">
<textarea name="password" id="password" rows="1" cols="15"></textarea>
</div>
<br>
If you don't have an existing minisrv account, select the <EM>Back</EM> Button.
If you do not have a password set on your primary user account, you will need to set one up on your WebTV before you can log in here. After entering your username and password, select the <EM>Continue</EM> Button.
</DIV>
<div id="footer">
<msntv:CustomButton id="continue" label="Continue" href="/Register/ConnectionType.aspx"/>

View File

@@ -500,7 +500,7 @@
"port": 1694,
"connections": 3,
"flags": "0x00000001",
"protocol": "HTTP",
"protocol": "HTTPS",
"privileged": true,
"handler_module": "WTV-MSNTV2",
"handler_handles_port": true,

View File

@@ -1,55 +0,0 @@
'use strict';
const path = require('path');
const classPath = path.resolve(__dirname + path.sep + "includes" + path.sep + "classes" + path.sep) + path.sep; require(classPath + "Prototypes.js");
const { WTVShared } = require(classPath + "/WTVShared.js");
const wtvshared = new WTVShared(null, true);
const fs = require('fs');
function showUsage() {
console.log(" * Usage:", process.argv[0], process.argv[1], "<file to CompB64>");
process.exit(1);
}
if (process.argv) {
if (process.argv[2]) {
let reverse = false;
let file = process.argv[2];
if (file === "-d") {
file = process.argv[3];
reverse = true;
}
if (fs.existsSync(file)) {
console.log(` * Processing ${file} ...`)
if (reverse) {
const outfile = file.replace(/\.cb64\.txt/,'') + ".dec.txt";
const encodedData = fs.readFileSync(file);
const rawdata = wtvshared.unpackCompressedB64(encodedData);
try {
fs.writeFileSync(outfile, rawdata);
console.log(` * Successfully decoded into ${outfile}`)
} catch (e) {
console.error("Error processing file:", e)
process.exit(1);
}
} else {
const outfile = file + ".cb64.txt";
const rawdata = fs.readFileSync(file);
const encodedData = wtvshared.packCompressedB64(rawdata);
try {
fs.writeFileSync(outfile, encodedData);
console.log(` * Successfully encoded into ${outfile}`)
} catch (e) {
console.error("Error processing file:", e)
process.exit(1);
}
}
} else {
console.error(` * Could not find file ${file}`)
showUsage();
}
} else {
showUsage();
}
} else {
showUsage();
}

View File

@@ -1,123 +0,0 @@
// no wildcard (yet?)
const groups_to_sync = [
"webtv.users"
]
const fs = require('fs');
const path = require('path');
const crypto = require('crypto');
let classPath = __dirname + "/includes/";
const { WTVShared } = require(classPath + "WTVShared.js");
const wtvshared = new WTVShared(); // creates minisrv_config
classPath = wtvshared.getAbsolutePath(classPath, __dirname);
const minisrv_config = wtvshared.getMiniSrvConfig();
const WTVNews = require(classPath + "/WTVNews.js");
const WTVNewsServer = require(classPath + "/WTVNewsServer.js");
const data_path = wtvshared.getAbsolutePath(minisrv_config.config.SessionStore + '/minisrv_internal_nntp');
const service_name = "wtv-news";
if (!minisrv_config.services[service_name].upstream_address) {
console.error("minisrv config not configured with usenet upstream");
process.exit(1);
}
if (!minisrv_config) {
console.error("Something went wrong loading minisrv config");
process.exit(1);
}
if (!minisrv_config.config.debug_flags.quiet) console.log(" *** Successfully read minisrv configuration....");
const service_config = minisrv_config.services[service_name];
const wtvnewsserver = new WTVNewsServer(minisrv_config, minisrv_config.services['wtv-news'].local_server_port, false, null, null, false);
const wtvnews = new WTVNews(minisrv_config, service_name);
if (service_config.upstream_auth) {
wtvnews.initializeUsenet(service_config.upstream_address, service_config.upstream_port, service_config.upstream_tls || null, service_config.upstream_auth.username || null, service_config.upstream_auth.password || null);
} else {
wtvnews.initializeUsenet(service_config.upstream_address, service_config.upstream_port, service_config.upstream_tls || null);
}
function verifyMessage(group, articleNumber, article) {
const g = wtvnewsserver.getGroupPath(group);
const file = g + path.sep + articleNumber + ".newz";
if (!fs.existsSync(file)) return false;
const old_data = fs.readFileSync(file);
const new_data = JSON.stringify(article.article);
const old_data_hash = crypto.createHash('md5').update(old_data).digest("hex");
const new_data_hash = crypto.createHash('md5').update(new_data).digest("hex");
return (old_data_hash === new_data_hash);
}
function deleteMissing(group, articles) {
const g = wtvnewsserver.getGroupPath(group);
try {
fs.readdirSync(g).forEach(file => {
const articleNumber = parseInt(file.split('.')[0]);
file = g + path.sep + file;
if (!articles.find(e => (e === articleNumber))) {
console.log(" * ", group, "article", articleNumber, "deleted from upstream, removing locally")
fs.rmSync(file);
}
});
return true;
} catch (e) {
console.log(e);
return false;
}
}
wtvnews.connectUsenet().then((res) => {
if (res) {
groups_to_sync.forEach((group) => {
console.log(group);
wtvnews.selectGroup(group).then((res) => {
const range = {
start: res.group.low,
end: res.group.high
}
wtvnews.listGroup(group, null, null, range).then((res) => {
if (res.group.articleNumbers) {
const promises = [];
wtvnewsserver.createGroup(group);
const meta = wtvnewsserver.getMetadata(group);
meta.last_article_id = res.group.high;
wtvnewsserver.saveMetadata(group, meta);
//deleteMissing(group, res.group.articleNumbers)
res.group.articleNumbers.forEach((article) => {
promises.push(new Promise((resolve, reject) => {
wtvnews.getArticle(article, false).then((message) => {
res = wtvnewsserver.createArticle(group, article, message);
if (res) {
if (res === "exists") {
console.log(" * ", group, "article", article, "already exists")
} else {
console.log(" * Created", group, "article", article, res)
}
resolve(true)
} else {
console.log(" ! Failed to create file for ", group, "article", article, "with error", res);
resolve(false)
}
});
}));
})
Promise.all(promises).then(() => {
wtvnews.quitUsenet();
process.exit(0);
});
} else {
wtvnews.quitUsenet();
}
})
});
})
}
});

View File

@@ -5,8 +5,8 @@ const path = require('path');
const forge = require('node-forge');
const workspaceRoot = __dirname;
const httpsDir = path.join(workspaceRoot, 'includes', 'ServiceDeps', 'https');
const msnDir = path.join(workspaceRoot, 'includes', 'ServiceDeps', 'msntv2');
const httpsDir = path.join(workspaceRoot, '..', 'includes', 'ServiceDeps', 'https');
const msnDir = path.join(workspaceRoot, '..', 'includes', 'ServiceDeps', 'msntv2');
const domainsFile = path.join(msnDir, 'msn_domains.txt');
const defaultCaCertPath = path.join(msnDir, 'msntv2.crt');

View File

@@ -7,9 +7,9 @@ const pcap = require('pcap-parser');
const zlib = require('zlib');
// Import our WebTV classes
const WTVSec = require('./includes/classes/WTVSec.js');
const WTVShared = require('./includes/classes/WTVShared.js')['WTVShared'];
const LZPF = require('./includes/classes/LZPF.js');
const WTVSec = require('../includes/classes/WTVSec.js');
const WTVShared = require('../includes/classes/WTVShared.js')['WTVShared'];
const LZPF = require('../includes/classes/LZPF.js');
/**
* PCAP Packet Parser for WebTV/WTVP Protocol

View File

@@ -24,7 +24,7 @@
const fs = require('fs');
const path = require('path');
const WTVImage = require('./includes/classes/WTVImage');
const WTVImage = require('../includes/classes/WTVImage');
// ---------------------------------------------------------------------------
// Argument parser