forked from coolaj86/goldilocks.js
		
	moved some things related to DDNS into separate folder
This commit is contained in:
		
							parent
							
								
									cfcc1acb8c
								
							
						
					
					
						commit
						8930a528bc
					
				
							
								
								
									
										21
									
								
								lib/app.js
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								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') {
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
  };
 | 
			
		||||
@ -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);
 | 
			
		||||
    }));
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user