Skip to content

Commit

Permalink
bug fixes for 2.6.5
Browse files Browse the repository at this point in the history
+ Added potential fixes for #34 and #39
+ Added better error handling for #43
  • Loading branch information
tobychui committed Aug 17, 2023
1 parent d42ac8a commit 70adadf
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 41 deletions.
10 changes: 7 additions & 3 deletions src/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
var noauth = flag.Bool("noauth", false, "Disable authentication for management interface")
var showver = flag.Bool("version", false, "Show version of this server")
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 ztAPIPort = flag.Int("ztport", 9993, "ZeroTier controller API port")
var acmeAutoRenewInterval = flag.Int("autorenew", 86400, "ACME auto TLS/SSL certificate renew check interval (seconds)")
Expand Down Expand Up @@ -96,9 +97,12 @@ func ShutdownSeq() {
netstatBuffers.Close()
fmt.Println("- Closing Statistic Collector")
statisticCollector.Close()
fmt.Println("- Stopping mDNS Discoverer")
//Stop the mdns service
mdnsTickerStop <- true
if mdnsTickerStop != nil {
fmt.Println("- Stopping mDNS Discoverer")
// Stop the mdns service
mdnsTickerStop <- true
}

mdnsScanner.Close()
fmt.Println("- Closing Certificates Auto Renewer")
acmeAutoRenewer.Close()
Expand Down
9 changes: 9 additions & 0 deletions src/mod/dynamicproxy/dpcore/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@ func replaceLocationHost(urlString string, rrr *ResponseRewriteRuleSet, useTLS b
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

if strings.Contains(rrr.ProxyDomain, "/") {
Expand Down
2 changes: 1 addition & 1 deletion src/mod/mdns/mdns.go
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ func (m *MDNSHost) Scan(timeout int, domainFilter string) []*NetworkHost {
return discoveredHost
}

//Get all mac address of all interfaces
// Get all mac address of all interfaces
func getMacAddr() ([]string, error) {
ifas, err := net.Interfaces()
if err != nil {
Expand Down
7 changes: 7 additions & 0 deletions src/reverseproxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -649,6 +649,13 @@ func HandleIncomingPortSet(w http.ResponseWriter, r *http.Request) {
}

//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, "/")
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
Expand Down
76 changes: 39 additions & 37 deletions src/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,47 +114,49 @@ func startupSequence() {
This discover nearby ArozOS Nodes or other services
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
go func() {
hosts := mdnsScanner.Scan(30, "")
previousmdnsScanResults = hosts
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:
if *allowMdnsScanning {
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.arozos.com",
Model: "Network Gateway",
UUID: nodeUUID,
Vendor: "imuslab.com",
BuildVersion: version,
}, "")
if err != nil {
log.Println("Unable to startup mDNS service. Disabling mDNS services")
} else {
//Start initial scanning
go func() {
hosts := mdnsScanner.Scan(30, "")
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
Expand Down
7 changes: 7 additions & 0 deletions src/web/tools/mdns.html
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,13 @@ <h4>Scan with custom domain filter</h4>
$('<th>').text('Vendor')
)
);

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
var tableBody = $('<tbody>');
Expand Down
8 changes: 8 additions & 0 deletions src/wrappers.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,11 +156,19 @@ func HandleUptimeMonitorListing(w http.ResponseWriter, r *http.Request) {

// Handle listing current registered mdns nodes
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)
utils.SendJSONResponse(w, string(js))
}

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")
var hosts []*mdns.NetworkHost
if err != nil {
Expand Down

0 comments on commit 70adadf

Please sign in to comment.