Synchronet now requires the libarchive development package (e.g. libarchive-dev on Debian-based Linux distros, libarchive.org for more info) to build successfully.

Commit fb4c88c6 authored by Michael Long's avatar Michael Long Committed by Rob Swindell

Improvements to init fidonet. Add and update network list. Add ability to...

Improvements to init fidonet. Add and update network list. Add ability to download infopack (for manual .NA extraction). Ask for and save tic and packet passwords. Handle domains.
parent 96507cbe
Pipeline #463 canceled with stage
......@@ -153,6 +153,14 @@ DefaultRecipient =
Zones = 57
DNSSuffix =
NodeList =
[domain:cnet]
Zones = 64
DNSSuffix =
NodeList =
[domain:scinet]
Zones = 77
DNSSuffix =
NodeList =
[domain:retronet]
Zones = 80
DNSSuffix =
......@@ -173,6 +181,10 @@ DefaultRecipient =
Zones = 169
DNSSuffix =
NodeList =
[domain:devnet]
Zones = 256
DNSSuffix =
NodeList =
[domain:pinet]
Zones = 314
DNSSuffix =
......@@ -189,6 +201,10 @@ DefaultRecipient =
Zones = 432
DNSSuffix = ftn.vkradio.com
NodeList =
[domain:musicnet]
Zones = 440
DNSSuffix =
NodeList =
[domain:justanet]
Zones = 510
DNSSuffix =
......@@ -229,6 +245,10 @@ DefaultRecipient =
Zones = 900
DNSSuffix =
NodeList =
[domain:tqwnet]
Zones = 1337
DNSSuffix =
NodeLIst =
[domain:quartz]
Zones = 2547
DNSSuffix =
......
......@@ -10,6 +10,7 @@
; name = Name of the network, usually the same as the 5D domain, <= 8 chars
; desc = Short description of the network
; info = URL to information about the network
; pack = URL to info pack file
; coord = Name of the zone/network coordinator
; email = Internet email address of the zone/network coordinator
; fido = FidoNet address of the zone/network coordinator (for NetMail)
......@@ -46,11 +47,24 @@ desc = Australasia
[zone:4]
name = FidoNet
desc = Latin America (except Puerto Rico)
[zone:11]
name = WWIVnet
desc = WWIVnet
info = https://www.wwivbbs.org/docs/network/wwivnet.html
coord = Mark Hofmann
email = mark@weather-station.org
addr = 11:1/100
host = bbs.weather-station.org
port = 24555
echolist = https://raw.githubusercontent.com/wwivbbs/wwivnet/master/wwivnet/wwivnet.na
areatag_prefix = WWIV_
[zone:21]
name = fsxNet
desc = Fun, Simple and eXperimental network
info = http://fsxnet.nz/
pack = https://github.com/fsxnet/infopack/archive/master.zip
coord = Paul Hayton
email = avon@bbs.nz
addr = 21:1/100
......@@ -76,32 +90,32 @@ areatitle_prefix = AmigaNet:
[zone:40]
name = CyberNet
desc = Stock, Trading, Cybersecurity, OS, Technology, Hacking, Crypto
info = http://www.thebytexchange.com/cybernet/
info = telnet://bbs.thebytexchange.com:23
coord = Chad Adams
email = nugax@thebytexchange.com
addr = 40:1/1@cybernet
fido = 1:19/37
host = hub.cybernetbbs.net
echolist = http://thebytexchange.com/cybernet/cybernet.na
areatag_prefix = CN_
[zone:44]
name = DoRENET
desc = BBS modifications, coding, ansi/asci etc
info = https://www.dreamlandbbs.org/dorenet/
pack = https://www.dreamlandbbs.org/wp-content/uploads/2020/04/dorenet.zip
coord = Dream Master
addr = 44:100/0
fido = 1:218/530
host = bbs.dreamlandbbs.org
handles = true
echolist = DORENET.NA
areatag_prefix = DN_
areatag_prefix = DN_
areatag_exclude = netmail
[zone:46]
name = Agoranet
desc = The Official Network of ACiD Productions
info = ftp://pharcyde.org/agoranet/AGN_INFO/agoranet.zip
pack = ftp://pharcyde.org/agoranet/AGN_INFO/agoranet.zip
coord = Nicholas Boel
email = accessd@pharcyde.org
addr = 46:1/100
......@@ -129,31 +143,72 @@ areatag_prefix = CNT_
name = SciNet
desc = Active network for the BBS scene
info = https://scinet-ftn.org/
pack = https://scinet-ftn.org/sciinfo.zip
coord = Frank Linhares
email = scinet@diskshop.ca
addr = 77:1/100
fido = 1:229/101
dns = scinet-ftn.org
host = bbs.diskshop.ca
port = 24554
echolist = https://scinet-ftn.org/scinet.na
areatag_prefix =
areatitle_prefix = SciNet:
[zone:256]
name = DevNet
desc = developer oriented network
info = http://www.digitaldistortionbbs.com, Also available as QWK. See pack.
pack = ftp://digitaldistortionbbs.com/bbs/INFOPAKS/DevNet.zip
coord = Tony Langdon
email = vk3jed@vkradio.com
addr = 256:8/100
host = bridge.vkradio.com
echolist = devnet.na
areatag_prefix = DEV_
[zone:432]
name = VKRadio
desc = hobbyist radio communication oriented network
info = https://vkradio.com/vkradio.zip
info = https://vkradio.com/vkradio.zip
pack = https://vkradio.com/vkradio.zip
coord = Tony Langdon
email = vk3jed@vkradio.com
addr = 432:1/100
fido = 3:633/410
dns = ftn.vkradio.com
host = bridge.vkradio.com
echolist = https://vkradio.com/vkradio.na
areatag_prefix = VK_
[zone:440]
name = MusicNet
desc = music oriented network
info = http://www.digitaldistortionbbs.com, Also available as QWK. See pack.
pack = ftp://digitaldistortionbbs.com/bbs/INFOPAKS/MusicNet.zip
coord = Tony Langdon
email = vk3jed@vkradio.com
addr = 440:1/100
host = bridge.vkradio.com
echolist = musicnet.na
areatag_prefix = MUS_
[zone:316]
name = Whisper
desc = Family-Oriented Bulletin Board Message/File Network
info = http://www.cr1mson.org/whispernet.html
pack = http://www.cr1mson.org/uploads/1/4/5/3/14535704/whispnet.zip
coord = Jon Justvig
email = jonathanjustvig@gmail.com
addr = 316:36/1
host = vintagebbsing.com
echolist = wenmbone.na
areatag_prefix = WHISP_
[zone:618]
name = Micronet
name = Micronet
desc = laid-back, friendly and comfortable mail
info = https://minftn.net/
pack = http://minftn.net/mininfo.zip
coord = Sean Dennis
email = zc@minftn.net
fido = 1:18/200
......@@ -162,3 +217,15 @@ addr = 618:618/2
host = phoenix.bnbbbs.net
echolist = micronet.na
areatag_prefix = MIN_
[zone:1337]
name = tqwNet
desc = A network for having fun and international friendships
info = https://www.erb.pw/
pack = https://www.erb.pw/tqwinfo.zip
coord = MeaTLoTioN
email = ml@erb.pw
addr = 1337:3/100
host = hub.ca.erb.pw
echolist = tqwnet.na
areatag_prefix = TQW_
......@@ -22,7 +22,7 @@
"use strict";
const REVISION = "$Revision: 1.29 $".split(' ')[1];
const REVISION = "$Revision: 1.30 $".split(' ')[1];
require('sbbsdefs.js', 'SUB_NAME');
var netname;
var netdns;
......@@ -42,7 +42,7 @@ print("*************************************************************************
var network_list = {};
var file = new File(js.exec_dir + "init-fidonet.ini");
if (file.open("r")) {
if(file.open("r")) {
var list = file.iniGetSections("zone:", "zone");
for(var i in list)
network_list[list[i].substr(5)] = file.iniGetObject(list[i]);
......@@ -59,15 +59,15 @@ function aborted()
function exclude_strings(list, patterns, flags)
{
patterns = [].concat(patterns);
if (flags === undefined)
if(flags === undefined)
flags = 'i';
return list.reduce(function (a, c) {
var matched = patterns.some(function (e) {
if (typeof e == 'string')
if(typeof e == 'string')
e = new RegExp(e, flags);
return c.match(e);
});
if (!matched)
});
if(!matched)
a.push(c);
return a;
}, []);
......@@ -150,11 +150,13 @@ function send_app_netmail(destaddr)
body_text += "\r\n";
body_text += "My system is " + system.name + " at " + system.inet_addr + ".\r\n";
body_text += "\r\n";
body_text += "I am using Synchronet-" + system.platform + " v" + system.full_version
body_text += "I am using Synchronet-" + system.platform + " v" + system.full_version
+ " with SBBSecho and BinkIT.\r\n";
body_text += "\r\n";
body_text += "My requested AreaFix password is: '" + link.AreaFixPwd + "'\r\n";
body_text += "My requested BinkP Session password is: '" + link.SessionPwd + "'\r\n";
if(link.TicFilePwd)
body_text += "My requested TIC Password is: '" + link.TicFilePwd + "'\r\n";
body_text += "\r\n";
body_text += "I will be using 'Type-2+' (FSC-39) packets with no password.\r\n";
body_text += "Uncompressed or PKZIP-archived EchoMail bundles will work fine.\r\n";
......@@ -187,13 +189,13 @@ function lookup_network(info)
if(result)
return result;
}
var file = new File("sbbsecho.ini");
if (!file.open("r")) {
if(!file.open("r")) {
alert("Error " + file.error + " opening " + file.name);
return false;
}
if(typeof info == "number") { // zone
var dns;
var domain_list = file.iniGetSections("domain:");
......@@ -230,12 +232,56 @@ function lookup_network(info)
return result;
}
function get_linked_node(addr)
function get_domain(zone)
{
var file = new File("sbbsecho.ini");
if (!file.open("r"))
if(!file.open("r")) {
alert("Error " + file.error + " opening " + file.name);
return false;
}
var domain_list = file.iniGetSections("domain:");
if(domain_list) {
var zonemap = {};
for(var i = 0; i < domain_list.length && !result; i++) {
var section = domain_list[i];
var netname = section.substr(7)
var zones = file.iniGetValue(section, "Zones");
if(!zones)
continue;
if(typeof zones == 'number') {
if(zone == zones) {
return netname;
}
continue;
}
zones = zones.split(',');
for(var j = 0; j < zones.length; j++) {
if(zone == zones[j]) {
return netname;
}
}
}
file.close();
return result;
}
return "";
}
function get_linked_node(addr, domain)
{
var file = new File("sbbsecho.ini");
if(!file.open("r"))
return false;
var result = file.iniGetObject("node:" + addr);
var result;
if(domain) {
result = file.iniGetObject("node:" + addr + "@" + domain);
if (!result) {
result = file.iniGetObject("node:" + addr);
}
} else {
result = file.iniGetObject("node:" + addr);
}
file.close();
return result;
}
......@@ -243,14 +289,14 @@ function get_linked_node(addr)
function get_binkp_sysop()
{
var file = new File("sbbsecho.ini");
if (!file.open("r"))
if(!file.open("r"))
return false;
var result = file.iniGetValue("Binkp", "Sysop");
file.close();
return result;
}
function update_sbbsecho_ini(hub, link, echolist_fname, areamgr)
function update_sbbsecho_ini(hub, link, domain, echolist_fname, areamgr)
{
function makepath(path)
{
......@@ -295,15 +341,36 @@ function update_sbbsecho_ini(hub, link, echolist_fname, areamgr)
if(!binkp) binkp = {};
binkp.sysop = sysop;
if(!file.iniSetObject("binkp", binkp)) {
return "Error" + file.error + " writign to " + file.name;
return "Error" + file.error + " writing to " + file.name;
}
var prefnode;
var section = "node:" + fidoaddr.to_str(hub);
if(!file.iniGetObject(section)
|| confirm("Overwrite hub [" + section + "] configuration in " + file.name)) {
if(!file.iniSetObject(section, link)) {
return "Error " + file.error + " writing to " + file.name;
if(domain) {
if(file.iniGetObject(section)) {
if(confirm("Migrate " + section + " to " + section + "@" + domain)) {
if(!file.iniSetObject(section + "@" + domain, link)) {
return "Error " + file.error + " writing to " + file.name;
} else {
file.iniRemoveSection(section);
}
}
} else {
if(!file.iniGetObject(section) || confirm("Overwrite hub [" + section + "@" + domain + "] configuration in " + file.name)) {
if(!file.iniSetObject(section + "@" + domain, link)) {
return "Error " + file.error + " writing to " + file.name;
}
}
}
} else {
if(!file.iniGetObject(section) || confirm("Overwrite hub [" + section + "] configuration in " + file.name)) {
if(!file.iniSetObject(section, link)) {
return "Error " + file.error + " writing to " + file.name;
}
}
}
var section = "node:" + hub.zone + ":ALL";
if(confirm("Route all zone " + hub.zone + " netmail through your hub")) {
if(!file.iniSetObject(section,
......@@ -343,7 +410,6 @@ else if(netname) {
netzone = lookup_network(netname);
network = network_list[netzone];
}
if(!netzone) {
for(var zone in network_list) {
var desc = "";
......@@ -358,7 +424,8 @@ if(!netzone) {
email = " <" + network_list[zone].email + ">";
if(network_list[zone].fido)
email += " " + network_list[zone].fido;
print(" coordinator: " + (network_list[zone].coord || "") + email);
// removed because screen is scrolling so much with so many networks
//print(" coordinator: " + (network_list[zone].coord || "") + email);
}
}
var which;
......@@ -377,10 +444,13 @@ if(network)
else
network = {};
var domain = get_domain(netzone);
if(netzone <= 6)
netname = "FidoNet";
else {
while((!netname || netname.indexOf(' ') >= 0 || netname.length > 8
while((!netname || netname.indexOf(' ') >= 0 || netname.length > 8
|| !confirm("Network name is '" + netname + "'")) && !aborted()) {
var str = prompt("Network name (no spaces or illegal filename chars) [" + netname + "]");
if(str)
......@@ -391,7 +461,11 @@ if(netname) {
print("Network name: " + netname);
print("Network zone: " + netzone);
print("Network info: " + network.info);
print("Network coordinator: " + network.coord
print("Network domain: " + domain);
if (network.pack) {
print("Network pack: " + network.pack);
}
print("Network coordinator: " + network.coord
+ (network.email ? (" <" + network.email + ">") : "")
+ (network.fido ? (" " + network.fido) : ""));
if(network.also)
......@@ -403,7 +477,7 @@ if(netname) {
print("Reading Message Area configuration file: msgs.cnf");
var cnflib = load({}, "cnflib.js");
var msgs_cnf = cnflib.read("msgs.cnf");
if (!msgs_cnf) {
if(!msgs_cnf) {
alert("Failed to read msgs.cnf");
exit(1);
}
......@@ -432,7 +506,7 @@ while(((isNaN(hub.zone) || hub.zone < 1)
hub = fidoaddr.parse(prompt("Your hub's address (zone:net/node)"));
}
var link = get_linked_node(fidoaddr.to_str(hub));
var link = get_linked_node(fidoaddr.to_str(hub), domain);
if(!link)
link = {};
......@@ -477,9 +551,9 @@ while(!confirm("Your node address is " + fidoaddr.to_str(your)) && !aborted()) {
your.net = NaN;
your.node = NaN;
while((isNaN(your.zone) || your.zone < 1) && !aborted())
your.zone = parseInt(prompt("Your zone number (e.g. 1 for FidoNet North America)"));
your.zone = parseInt(prompt("Your zone number (e.g. " + hub.zone + ")"));
while((isNaN(your.net) || your.net < 1) && !aborted())
your.net = parseInt(prompt("Your network number (i.e. normally the same as your hub)"));
your.net = parseInt(prompt("Your network number (e.g. " + hub.net + ")"));
while((isNaN(your.node) || your.node < 1) && !aborted())
your.node = parseInt(prompt("Your node number (e.g. 9999 for temporary node)"));
while((isNaN(your.point)) && !aborted())
......@@ -502,11 +576,13 @@ while((!link.AreaFixPwd || !confirm("Your AreaFix Password is '" + link.AreaFixP
link.AreaFixPwd = prompt("Your AreaFix (a.k.a. Area Manager) Password (case in-sensitive)");
while((!link.SessionPwd || !confirm("Your BinkP Session Password is '" + link.SessionPwd + "'")) && !aborted())
link.SessionPwd = prompt("Your BinkP Session Password (case sensitive)");
while(((!link.TicFilePwd && (link.TicFilePwd !== "")) || !confirm("Your TIC File Password is '" + (link.TicFilePwd ? link.TicFilePwd : "(not set)") + "'")) && !aborted())
link.TicFilePwd = prompt("Your TIC File Password (case sensitive) (optional)");
/***********************************************/
/* SEND NODE NUMBER REQUEST NETMAIL (Internet) */
/***********************************************/
if(your.node === 9999 && network.email && network.email.indexOf('@') > 0
if(your.node === 9999 && network.email && network.email.indexOf('@') > 0
&& confirm("Send a node number application to " + network.email)) {
var result = send_app_netmail(network.email);
if(typeof result !== 'boolean') {
......@@ -517,7 +593,7 @@ if(your.node === 9999 && network.email && network.email.indexOf('@') > 0
exit(0);
if(confirm("Come back when you have your permanently-assigned node address")) {
if(confirm("Save changes to FidoNet configuration file: sbbsecho.ini")) {
var result = update_sbbsecho_ini(hub, link);
var result = update_sbbsecho_ini(hub, link, domain);
if (result != true) {
alert(result);
exit(1);
......@@ -545,12 +621,12 @@ if(!msg_area.grp[netname]
&& confirm("Create " + netname + " message group in SCFG->Message Areas")) {
print("Adding Message Group: " + netname);
msgs_cnf.grp.push( {
"name": netname,
"description": netname,
"ars": "",
"code_prefix": network.areatag_prefix === undefined
? (netname.toUpperCase() + "_") : network.areatag_prefix
});
"name": netname,
"description": netname,
"ars": "",
"code_prefix": network.areatag_prefix === undefined
? (netname.toUpperCase() + "_") : network.areatag_prefix
});
}
if(confirm("Save Changes to Message Area configuration file: msgs.cnf")) {
if(!cnflib.write("msgs.cnf", undefined, msgs_cnf)) {
......@@ -564,11 +640,12 @@ if(confirm("Save Changes to Message Area configuration file: msgs.cnf")) {
/* DOWNLOAD ECHOLIST */
/*********************/
var echolist_fname = file_getname(network.echolist);
if(network.echolist
load("http.js");
if(network.echolist
&& (network.echolist.indexOf("http://") == 0 || network.echolist.indexOf("https://") == 0)
&& confirm("Download " + netname + " EchoList: " + file_getname(network.echolist))) {
var echolist_url = network.echolist;
load("http.js");
while(!aborted()) {
while((!echolist_url || !confirm("Download from: " + echolist_url)) && !aborted()) {
echolist_url = prompt("Echolist URL");
......@@ -589,8 +666,8 @@ if(network.echolist
break;
continue;
}
if(http_request.response_code == 200) {
print("Downloaded " + echolist_url + " to " + file.name);
if(http_request.response_code == http_request.status.ok) {
print("Downloaded " + echolist_url + " to " + system.ctrl_dir + file.name);
file.write(contents);
file.close();
break;
......@@ -601,14 +678,62 @@ if(network.echolist
if(!confirm("Try again"))
break;
}
} else if (network.pack
&& (network.pack.indexOf("http://") == 0 || network.pack.indexOf("https://") == 0)
&& confirm("Download " + netname + " Info Pack: " + network.pack)) {
while(!aborted()) {
var packdlfilename = file_getname(network.pack)
var file = new File(packdlfilename);
if(!file.open("w")) {
alert("Error " + file.error + " opening " + file.name);
exit(1);
}
var http_request = new HTTPRequest();
try {
var contents = http_request.Get(network.pack);
} catch(e) {
alert(e);
file.close();
file_remove(system.ctrl_dir + file.name);
if(!confirm("Try again"))
break;
continue;
}
if(http_request.response_code == http_request.status.ok) {
print("Downloaded " + network.pack + " to " + system.ctrl_dir + file.name);
file.write(contents);
file.close();
// try to extract on linux,
if (system.exec("%@unzip -CLo " + file_getname(network.pack) + " " + echolist_fname) !== 0) {
print("Please extract " + network.echolist + " from " + file.name + " into " + system.ctrl_dir);
}
break;
}
file.close();
file_remove(file.name);
alert("Error " + http_request.response_code + " downloading " + network.pack);
if(!confirm("Try again"))
break;
}
}
while(echolist_fname && !file_getcase(echolist_fname) && !aborted()) {
alert(system.ctrl_dir + echolist_fname + " does not exist");
if(!confirm("Install " + netname + " EchoList: " + echolist_fname))
break;
prompt("Download and extract " + echolist_fname + " now... Press enter to continue");
if ((network.echolist.indexOf("http://") == -1) && (network.echolist.indexOf("https://") == -1)
&& (network.pack)) {
if (!confirm("Please extract the " + echolist_fname + " file from the pack " + file_getname(network.pack) + " into " + system.ctrl_dir + ". Continue?")) {
break;
}
} else {
if (!confirm("Please place " + echolist_fname + " into " + system.ctrl_dir + ". Continue?")) {
break;
}
}
prompt(echolist_fname + " not found. Please put file into ctrl dir and press Enter.");
}
echolist_fname = file_getcase(echolist_fname)
echolist_fname = file_getcase(system.ctrl_dir + echolist_fname)
if(echolist_fname && file_size(echolist_fname) > 0) {
if(network.areatag_exclude) {
print("Removing " + network.areatag_exclude + " from " + echolist_fname);
......@@ -628,11 +753,11 @@ if(echolist_fname && file_size(echolist_fname) > 0) {
if(!network.handles)
misc |= SUB_NAME;
system.exec(system.exec_dir + "scfg"
+ " -import=" + echolist_fname
+ " -import=" + echolist_fname
+ " -g" + netname
+ " -faddr=" + fidoaddr.to_str(your)
+ " -misc=" + misc
);
);
}
}
......@@ -640,7 +765,7 @@ if(echolist_fname && file_size(echolist_fname) > 0) {