diff --git a/lib/ddns/index.js b/lib/ddns/index.js index dfad146..881469c 100644 --- a/lib/ddns/index.js +++ b/lib/ddns/index.js @@ -142,8 +142,9 @@ module.exports.create = function (deps, conf) { // If we are on a public address or all ports we are listening on are forwarded to us then // we don't need the tunnel and we can set the DNS records for all our domains to our public - // address. Otherwise we need to use the tunnel to accept traffic. - if (!notLooped.length) { + // address. Otherwise we need to use the tunnel to accept traffic. Also since the tunnel will + // only be listening on ports 80 and 443 if those are forwarded to us we don't want the tunnel. + if (!notLooped.length || (loopResult.ports['80'] && loopResult.ports['443'])) { if (tunnelActive) { await disconnectTunnels(); } diff --git a/lib/ddns/loopback.js b/lib/ddns/loopback.js index 3975f97..a8face3 100644 --- a/lib/ddns/loopback.js +++ b/lib/ddns/loopback.js @@ -17,6 +17,9 @@ module.exports.create = function (deps, conf) { // Note that the error on the body will probably have a message that overwrites the default throw Object.assign(new Error('error in check IP response'), result.body.error); } + if (!result.body.address) { + throw new Error("public address resonse doesn't contain address: "+JSON.stringify(result.body)); + } return result.body.address; } async function checkPublicAddr(provider) { @@ -33,12 +36,14 @@ module.exports.create = function (deps, conf) { var reqObj = { method: 'POST' , url: deps.OAUTH3.url.normalize(host)+'/api/org.oauth3.tunnel/loopback' + , timeout: 20*1000 , json: { address: address , port: port , token: token , keyAuthorization: keyAuth , iat: Date.now() + , timeout: 18*1000 } }; @@ -47,12 +52,18 @@ module.exports.create = function (deps, conf) { result = await deps.request(reqObj); } catch (err) { delete pending[token]; - throw err; + if (conf.debug) { + console.log('error making loopback request for port ' + port + ' loopback', err.message); + } + return false; } delete pending[token]; if (!result.body) { - throw new Error('No response body in loopback request for port '+port); + if (conf.debug) { + console.log('No response body in loopback request for port '+port); + } + return false; } // If the loopback requests don't go to us then there are all kinds of ways it could // error, but none of them really provide much extra information so we don't do @@ -75,7 +86,7 @@ module.exports.create = function (deps, conf) { return checkSinglePort(directives.api, address, port); })); - if (conf.debug) { + if (conf.debug && Object.keys(pending).length) { console.log('remaining loopback tokens', pending); }