From 8930a528bc4ab224453b8b0bab85815a0fa86aff Mon Sep 17 00:00:00 2001 From: tigerbot Date: Mon, 25 Sep 2017 18:06:48 -0600 Subject: [PATCH] moved some things related to DDNS into separate folder --- lib/app.js | 21 +------------ lib/{ddns.js => ddns/index.js} | 31 +++++++++----------- lib/{ => ddns}/loopback.js | 14 ++++----- lib/modules/http.js | 2 +- lib/worker.js | 13 ++++++-- packages/apis/com.daplie.goldilocks/index.js | 23 --------------- 6 files changed, 34 insertions(+), 70 deletions(-) rename lib/{ddns.js => ddns/index.js} (78%) rename lib/{ => ddns}/loopback.js (88%) diff --git a/lib/app.js b/lib/app.js index f633712..356f0da 100644 --- a/lib/app.js +++ b/lib/app.js @@ -15,25 +15,6 @@ module.exports = function (myDeps, conf, overrideHttp) { //var server; var goldilocksApis; var app; - var request; - - function createGoldilocksApis() { - var PromiseA = require('bluebird'); - var OAUTH3 = require('../packages/assets/org.oauth3'); - require('../packages/assets/org.oauth3/oauth3.domains.js'); - require('../packages/assets/org.oauth3/oauth3.dns.js'); - require('../packages/assets/org.oauth3/oauth3.tunnel.js'); - OAUTH3._hooks = require('../packages/assets/org.oauth3/oauth3.node.storage.js'); - - request = request || PromiseA.promisify(require('request')); - - myDeps.PromiseA = PromiseA; - myDeps.OAUTH3 = OAUTH3; - myDeps.recase = require('recase').create({}); - myDeps.request = request; - - return require('../packages/apis/com.daplie.goldilocks').create(myDeps, conf); - } app = express(); @@ -116,7 +97,7 @@ module.exports = function (myDeps, conf, overrideHttp) { function _goldApis(req, res, next) { if (!goldilocksApis) { - goldilocksApis = createGoldilocksApis(); + goldilocksApis = require('../packages/apis/com.daplie.goldilocks').create(myDeps, conf); } if (typeof goldilocksApis[req.params.name] === 'function') { diff --git a/lib/ddns.js b/lib/ddns/index.js similarity index 78% rename from lib/ddns.js rename to lib/ddns/index.js index 6985e2a..2637233 100644 --- a/lib/ddns.js +++ b/lib/ddns/index.js @@ -1,11 +1,7 @@ 'use strict'; module.exports.create = function (deps, conf) { - var PromiseA = deps.PromiseA; - var request = PromiseA.promisify(require('request')); - var OAUTH3 = require('../packages/assets/org.oauth3'); - require('../packages/assets/org.oauth3/oauth3.dns.js'); - OAUTH3._hooks = require('../packages/assets/org.oauth3/oauth3.node.storage.js'); + var loopback = require('./loopback').create(deps, conf); function dnsType(addr) { if (/^\d+\.\d+\.\d+\.\d+$/.test(addr)) { @@ -36,10 +32,10 @@ module.exports.create = function (deps, conf) { async function setDeviceAddress(addr) { var session = await getSession(); - var directives = await OAUTH3.discover(session.token.aud); + var directives = await deps.OAUTH3.discover(session.token.aud); // Set the address of the device to our public address. - await request({ + await deps.request({ url: directives.api+'/api/com.daplie.domains/acl/devices/' + conf.device.hostname , method: 'POST' , headers: { @@ -56,7 +52,7 @@ module.exports.create = function (deps, conf) { // Then update all of the records attached to our hostname, first removing the old records // to remove the reference to the old address, then creating new records for the same domains // using our new address. - var allDns = OAUTH3.api(directives.api, {session: session, api: 'dns.list'}); + var allDns = deps.OAUTH3.api(directives.api, {session: session, api: 'dns.list'}); var ourDomains = allDns.filter(function (record) { return record.device === conf.device.hostname; }).map(function (record) { @@ -73,8 +69,8 @@ module.exports.create = function (deps, conf) { , session: session , device: conf.device.hostname }; - await PromiseA.all(ourDomains.map(function (record) { - return OAUTH3.api(directives.api, Object.assign({}, common, record)); + await deps.PromiseA.all(ourDomains.map(function (record) { + return deps.OAUTH3.api(directives.api, Object.assign({}, common, record)); })); common = { @@ -84,16 +80,16 @@ module.exports.create = function (deps, conf) { , ip: addr , ttl: 300 }; - await PromiseA.all(ourDomains.map(function (record) { - return OAUTH3.api(directives.api, Object.assign({}, common, record)); + await deps.PromiseA.all(ourDomains.map(function (record) { + return deps.OAUTH3.api(directives.api, Object.assign({}, common, record)); })); } async function getDeviceAddresses() { var session = await getSession(); - var directives = await OAUTH3.discover(session.token.aud); + var directives = await deps.OAUTH3.discover(session.token.aud); - var result = await request({ + var result = await deps.request({ url: directives.api+'/api/org.oauth3.dns/acl/devices' , method: 'GET' , headers: { @@ -123,8 +119,8 @@ module.exports.create = function (deps, conf) { } var session = await getSession(); - var directives = await OAUTH3.discover(session.token.aud); - var addr = await deps.loopback.checkPublicAddr(directives.api); + var directives = await deps.OAUTH3.discover(session.token.aud); + var addr = await loopback.checkPublicAddr(directives.api); if (publicAddress === addr) { return; @@ -142,7 +138,8 @@ module.exports.create = function (deps, conf) { setInterval(recheckPubAddr, 5*60*1000); return { - setDeviceAddress: setDeviceAddress + loopbackServer: loopback.server + , setDeviceAddress: setDeviceAddress , getDeviceAddresses: getDeviceAddresses , recheckPubAddr: recheckPubAddr }; diff --git a/lib/loopback.js b/lib/ddns/loopback.js similarity index 88% rename from lib/loopback.js rename to lib/ddns/loopback.js index 6b4c389..2f7772d 100644 --- a/lib/loopback.js +++ b/lib/ddns/loopback.js @@ -1,12 +1,10 @@ 'use strict'; module.exports.create = function (deps, conf) { - var PromiseA = require('bluebird'); - var request = PromiseA.promisify(require('request')); var pending = {}; async function checkPublicAddr(host) { - var result = await request({ + var result = await deps.request({ method: 'GET' , url: host+'/api/org.oauth3.tunnel/checkip' , json: true @@ -42,7 +40,7 @@ module.exports.create = function (deps, conf) { var result; try { - result = await request(reqObj); + result = await deps.request(reqObj); } catch (err) { delete pending[token]; throw err; @@ -64,10 +62,12 @@ module.exports.create = function (deps, conf) { async function loopback(provider) { var directives = await deps.OAUTH3.discover(provider); var address = await checkPublicAddr(directives.api); - console.log('checking to see if', address, 'gets back to us'); + if (conf.debug) { + console.log('checking to see if', address, 'gets back to us'); + } - var ports = require('./servers').listeners.tcp.list(); - var values = await PromiseA.all(ports.map(function (port) { + var ports = require('../servers').listeners.tcp.list(); + var values = await deps.PromiseA.all(ports.map(function (port) { return checkSinglePort(directives.api, address, port); })); diff --git a/lib/modules/http.js b/lib/modules/http.js index 636b6bc..3b94d46 100644 --- a/lib/modules/http.js +++ b/lib/modules/http.js @@ -178,7 +178,7 @@ module.exports.create = function (deps, conf, greenlockMiddleware) { if (headers.url.indexOf('/.well-known/cloud-challenge/') !== 0) { return false; } - return emitConnection(deps.loopback.server, conn, opts); + return emitConnection(deps.ddns.loopbackServer, conn, opts); } var httpsRedirectServer; diff --git a/lib/worker.js b/lib/worker.js index 56991bc..44f4507 100644 --- a/lib/worker.js +++ b/lib/worker.js @@ -19,10 +19,20 @@ function update(conf) { } function create(conf) { + var PromiseA = require('bluebird'); + var OAUTH3 = require('../packages/assets/org.oauth3'); + require('../packages/assets/org.oauth3/oauth3.domains.js'); + require('../packages/assets/org.oauth3/oauth3.dns.js'); + require('../packages/assets/org.oauth3/oauth3.tunnel.js'); + OAUTH3._hooks = require('../packages/assets/org.oauth3/oauth3.node.storage.js'); + config = conf; var deps = { messenger: process - , PromiseA: require('bluebird') + , PromiseA: PromiseA + , OAUTH3: OAUTH3 + , request: PromiseA.promisify(require('request')) + , recase: require('recase').create({}) // Note that if a custom createConnections is used it will be called with different // sets of custom options based on what is actually being proxied. Most notably the // HTTP proxying connection creation is not something we currently control. @@ -31,7 +41,6 @@ function create(conf) { deps.storage = require('./storage').create(deps, conf); deps.proxy = require('./proxy-conn').create(deps, conf); deps.socks5 = require('./socks5-server').create(deps, conf); - deps.loopback = require('./loopback').create(deps, conf); deps.ddns = require('./ddns').create(deps, conf); require('./goldilocks.js').create(deps, conf); diff --git a/packages/apis/com.daplie.goldilocks/index.js b/packages/apis/com.daplie.goldilocks/index.js index 3c3e54c..8dfbd00 100644 --- a/packages/apis/com.daplie.goldilocks/index.js +++ b/packages/apis/com.daplie.goldilocks/index.js @@ -315,29 +315,6 @@ module.exports.create = function (deps, conf) { }); }); } - , loopback: function (req, res) { - if (handleCors(req, res, 'GET')) { - return; - } - isAuthorized(req, res, function () { - var prom; - var query = require('querystring').parse(require('url').parse(req.url).query); - if (query.provider) { - prom = deps.loopback(query.provider); - } else { - prom = deps.storage.owners.get(req.userId).then(function (session) { - return deps.loopback(session.token.aud); - }); - } - - res.setHeader('Content-Type', 'application/json'); - prom.then(function (result) { - res.end(JSON.stringify(result)); - }, function (err) { - res.end(JSON.stringify({error: {message: err.message, code: err.code}})); - }); - }); - } , paywall_check: function (req, res) { if (handleCors(req, res, 'GET')) { return;