bug fixes for 2.6.5

+ Added potential fixes for #34 and #39
+ Added better error handling for #43
This commit is contained in:
Toby Chui 2023-08-17 14:08:48 +08:00
parent d42ac8a146
commit 70adadf129
7 changed files with 78 additions and 41 deletions

View File

@ -36,6 +36,7 @@ import (
var noauth = flag.Bool("noauth", false, "Disable authentication for management interface") var noauth = flag.Bool("noauth", false, "Disable authentication for management interface")
var showver = flag.Bool("version", false, "Show version of this server") var showver = flag.Bool("version", false, "Show version of this server")
var allowSshLoopback = flag.Bool("sshlb", false, "Allow loopback web ssh connection (DANGER)") var allowSshLoopback = flag.Bool("sshlb", false, "Allow loopback web ssh connection (DANGER)")
var allowMdnsScanning = flag.Bool("mdns", true, "Enable mDNS scanner and transponder")
var ztAuthToken = flag.String("ztauth", "", "ZeroTier authtoken for the local node") var ztAuthToken = flag.String("ztauth", "", "ZeroTier authtoken for the local node")
var ztAPIPort = flag.Int("ztport", 9993, "ZeroTier controller API port") var ztAPIPort = flag.Int("ztport", 9993, "ZeroTier controller API port")
var acmeAutoRenewInterval = flag.Int("autorenew", 86400, "ACME auto TLS/SSL certificate renew check interval (seconds)") var acmeAutoRenewInterval = flag.Int("autorenew", 86400, "ACME auto TLS/SSL certificate renew check interval (seconds)")
@ -96,9 +97,12 @@ func ShutdownSeq() {
netstatBuffers.Close() netstatBuffers.Close()
fmt.Println("- Closing Statistic Collector") fmt.Println("- Closing Statistic Collector")
statisticCollector.Close() statisticCollector.Close()
fmt.Println("- Stopping mDNS Discoverer") if mdnsTickerStop != nil {
//Stop the mdns service fmt.Println("- Stopping mDNS Discoverer")
mdnsTickerStop <- true // Stop the mdns service
mdnsTickerStop <- true
}
mdnsScanner.Close() mdnsScanner.Close()
fmt.Println("- Closing Certificates Auto Renewer") fmt.Println("- Closing Certificates Auto Renewer")
acmeAutoRenewer.Close() acmeAutoRenewer.Close()

View File

@ -21,6 +21,15 @@ func replaceLocationHost(urlString string, rrr *ResponseRewriteRuleSet, useTLS b
u.Scheme = "http" u.Scheme = "http"
} }
//Issue #39: Check if it is location target match the proxying domain
//E.g. Proxy config: blog.example.com -> example.com/blog
//Check if it is actually redirecting to example.com instead of a new domain
//like news.example.com.
if rrr.ProxyDomain != u.Host {
//New location domain not matching proxy target domain.
//Do not modify location header
return urlString, nil
}
u.Host = rrr.OriginalHost u.Host = rrr.OriginalHost
if strings.Contains(rrr.ProxyDomain, "/") { if strings.Contains(rrr.ProxyDomain, "/") {

View File

@ -226,7 +226,7 @@ func (m *MDNSHost) Scan(timeout int, domainFilter string) []*NetworkHost {
return discoveredHost return discoveredHost
} }
//Get all mac address of all interfaces // Get all mac address of all interfaces
func getMacAddr() ([]string, error) { func getMacAddr() ([]string, error) {
ifas, err := net.Interfaces() ifas, err := net.Interfaces()
if err != nil { if err != nil {

View File

@ -649,6 +649,13 @@ func HandleIncomingPortSet(w http.ResponseWriter, r *http.Request) {
} }
//Check if it is identical as proxy root (recursion!) //Check if it is identical as proxy root (recursion!)
if dynamicProxyRouter.Root == nil || dynamicProxyRouter.Root.Domain == "" {
//Check if proxy root is set before checking recursive listen
//Fixing issue #43
utils.SendErrorResponse(w, "Proxy root not set")
return
}
proxyRoot := strings.TrimSuffix(dynamicProxyRouter.Root.Domain, "/") proxyRoot := strings.TrimSuffix(dynamicProxyRouter.Root.Domain, "/")
if strings.HasPrefix(proxyRoot, "localhost:"+strconv.Itoa(newIncomingPortInt)) || strings.HasPrefix(proxyRoot, "127.0.0.1:"+strconv.Itoa(newIncomingPortInt)) { if strings.HasPrefix(proxyRoot, "localhost:"+strconv.Itoa(newIncomingPortInt)) || strings.HasPrefix(proxyRoot, "127.0.0.1:"+strconv.Itoa(newIncomingPortInt)) {
//Listening port is same as proxy root //Listening port is same as proxy root

View File

@ -114,47 +114,49 @@ func startupSequence() {
This discover nearby ArozOS Nodes or other services This discover nearby ArozOS Nodes or other services
that provide mDNS discovery with domain (e.g. Synology NAS) that provide mDNS discovery with domain (e.g. Synology NAS)
*/ */
portInt, err := strconv.Atoi(strings.Split(handler.Port, ":")[1])
if err != nil {
portInt = 8000
}
mdnsScanner, err = mdns.NewMDNS(mdns.NetworkHost{
HostName: "zoraxy_" + nodeUUID,
Port: portInt,
Domain: "zoraxy.imuslab.com",
Model: "Network Gateway",
UUID: nodeUUID,
Vendor: "imuslab.com",
BuildVersion: version,
}, "")
if err != nil {
log.Println("Unable to startup mDNS service.")
log.Fatal(err)
}
//Start initial scanning if *allowMdnsScanning {
go func() { portInt, err := strconv.Atoi(strings.Split(handler.Port, ":")[1])
hosts := mdnsScanner.Scan(30, "") if err != nil {
previousmdnsScanResults = hosts portInt = 8000
log.Println("mDNS Startup scan completed") }
}() mdnsScanner, err = mdns.NewMDNS(mdns.NetworkHost{
HostName: "zoraxy_" + nodeUUID,
//Create a ticker to update mDNS results every 5 minutes Port: portInt,
ticker := time.NewTicker(15 * time.Minute) Domain: "zoraxy.arozos.com",
stopChan := make(chan bool) Model: "Network Gateway",
go func() { UUID: nodeUUID,
for { Vendor: "imuslab.com",
select { BuildVersion: version,
case <-stopChan: }, "")
ticker.Stop() if err != nil {
case <-ticker.C: log.Println("Unable to startup mDNS service. Disabling mDNS services")
} else {
//Start initial scanning
go func() {
hosts := mdnsScanner.Scan(30, "") hosts := mdnsScanner.Scan(30, "")
previousmdnsScanResults = hosts previousmdnsScanResults = hosts
log.Println("mDNS scan result updated") log.Println("mDNS Startup scan completed")
} }()
//Create a ticker to update mDNS results every 5 minutes
ticker := time.NewTicker(15 * time.Minute)
stopChan := make(chan bool)
go func() {
for {
select {
case <-stopChan:
ticker.Stop()
case <-ticker.C:
hosts := mdnsScanner.Scan(30, "")
previousmdnsScanResults = hosts
log.Println("mDNS scan result updated")
}
}
}()
mdnsTickerStop = stopChan
} }
}() }
mdnsTickerStop = stopChan
/* /*
Global Area Network Global Area Network

View File

@ -97,6 +97,13 @@
) )
); );
if (data.error != undefined){
$('#mdns-hosts').html(`<table class="ui celled unstackable table"><tbody></tbody></table>`);
$('#mdns-hosts').find("tbody").append(`<tr><td colspan="5"><i class="ui red circle times icon"></i> ${data.error}</td></tr>`);
$("#discover").addClass("disabled");
return;
}
// Create table body // Create table body
var tableBody = $('<tbody>'); var tableBody = $('<tbody>');
for (var i = 0; i < data.length; i++) { for (var i = 0; i < data.length; i++) {

View File

@ -156,11 +156,19 @@ func HandleUptimeMonitorListing(w http.ResponseWriter, r *http.Request) {
// Handle listing current registered mdns nodes // Handle listing current registered mdns nodes
func HandleMdnsListing(w http.ResponseWriter, r *http.Request) { func HandleMdnsListing(w http.ResponseWriter, r *http.Request) {
if mdnsScanner == nil {
utils.SendErrorResponse(w, "mDNS scanner is disabled on this host")
return
}
js, _ := json.Marshal(previousmdnsScanResults) js, _ := json.Marshal(previousmdnsScanResults)
utils.SendJSONResponse(w, string(js)) utils.SendJSONResponse(w, string(js))
} }
func HandleMdnsScanning(w http.ResponseWriter, r *http.Request) { func HandleMdnsScanning(w http.ResponseWriter, r *http.Request) {
if mdnsScanner == nil {
utils.SendErrorResponse(w, "mDNS scanner is disabled on this host")
return
}
domain, err := utils.PostPara(r, "domain") domain, err := utils.PostPara(r, "domain")
var hosts []*mdns.NetworkHost var hosts []*mdns.NetworkHost
if err != nil { if err != nil {