From d4bdf4ff5028e0c7709de1f0528f487910a6ecc0 Mon Sep 17 00:00:00 2001
From: Deuce <shurd@sasktel.net>
Date: Mon, 25 Jan 2021 17:11:50 -0500
Subject: [PATCH] Properly parse web hostname from sbbs.ini

Get both the webroot and web hostname from sbbs.ini rather than use
system.inet_addr.  system.inet_addr is configured in the messages
section, so it's implied that it's for email addresses.

Also, allow configuring the sysop email address with the SysopEmail
global key in the ini file.

This is a cleanup and duplicate of !82
---
 exec/letsyncrypt.js | 23 ++++++++---------------
 1 file changed, 8 insertions(+), 15 deletions(-)

diff --git a/exec/letsyncrypt.js b/exec/letsyncrypt.js
index 5f54474d14..75ebffe462 100644
--- a/exec/letsyncrypt.js
+++ b/exec/letsyncrypt.js
@@ -6,7 +6,6 @@ require("acmev2.js", "ACMEv2");
 var ks_fname = backslash(system.ctrl_dir)+"letsyncrypt.key";
 var setting_fname = backslash(system.ctrl_dir)+"letsyncrypt.ini";
 var sks_fname = backslash(system.ctrl_dir)+"ssl.cert";
-var sbbsini_fname = backslash(system.ctrl_dir)+"sbbs.ini";
 var maincnf_fname = backslash(system.ctrl_dir)+"main.cnf";
 var recycle_sem = backslash(system.ctrl_dir)+"recycle.web";
 
@@ -164,7 +163,6 @@ var revoke = false;
 var rsa;
 var sks;
 var sks_group_readable = false;
-var sbbsini = new File(sbbsini_fname);
 var settings = new File(setting_fname);
 var syspass;
 var webroot;
@@ -173,19 +171,13 @@ var usersa = true;	// TODO: Make configurable
 var keysize = 256;	// TODO: Make configurable... ECC sizes are 32, 48, and 66 (66 is not supported by Let's Encrypt)
 var waittime;
 var TOSAgreed=false;
-
-/*
- * Get the Web Root
- */
-if (!sbbsini.open("r"))
-	throw("Unable to open "+sbbsini.name);
-webroot = backslash(sbbsini.iniGetValue("Web", "RootDirectory", "../web/root"));
-sbbsini.close();
+var sbbsini = load("sbbsini.js");
+var sysop_email = "sysop@" + system.inet_addr;
 
 /*
  * Now read the settings and state.
  */
-webroots[system.inet_addr] = webroot;
+webroots[sbbsini.web.host_name] = sbbsini.web.root_dir;
 if (settings.open("r")) {
 	domain_list = settings.iniGetObject("Domains");
 	for (i in domain_list) {
@@ -202,6 +194,7 @@ if (settings.open("r")) {
 	dir_path = settings.iniGetValue(null, "Directory", dir_path);
 	TOSAgreed = settings.iniGetValue(null, "TOSAgreed", TOSAgreed);
 	sks_group_readable = settings.iniGetValue(null, "GroupReadableKeyFile", sks_group_readable);
+	sysop_email = settings.iniGetValue(null, "SysopEmail", sysop_email);
 
 	settings.close();
 }
@@ -287,10 +280,10 @@ if (renew || rekey || revoke || print_tos) {
 	if (renew || rekey || revoke) {
 		if (acme.key_id === undefined) {
 			if (TOSAgreed)
-				acme.create_new_account({termsOfServiceAgreed:TOSAgreed,contact:["mailto:sysop@"+system.inet_addr]});
+				acme.create_new_account({termsOfServiceAgreed:TOSAgreed,contact:["mailto:"+sysop_email]});
 			else {
 				try {
-					acme.create_new_account({contact:["mailto:sysop@"+system.inet_addr]});
+					acme.create_new_account({contact:["mailto:"+sysop_email]});
 				}
 				catch (e) {
 					log(LOG_ERR, "Creating account without agreeing to ToS failed.");
@@ -344,7 +337,7 @@ if (revoke) {
 
 if (renew) {
 	/*
-	 * Create the order, using system.inet_addr
+	 * Create the order, using sbbsini.web.host_name
 	 */
 	for (i in webroots)
 		identifiers.push({type:"dns",value:i});
@@ -376,7 +369,7 @@ if (renew) {
 
 	csr.subjectpublickeyinfo=rsa;
 	csr.oganizationname=system.name;
-	csr.commonname=system.inet_addr;
+	csr.commonname=sbbsini.web.host_name;
 	for (i in webroots)
 		dnsnames.push(i);
 	csr.add_extension("2.5.29.17", false, create_dnsnames(dnsnames));
-- 
GitLab