forked from coolaj86/goldilocks.js
		
	implemented storage of tunnel tokens
This commit is contained in:
		
							parent
							
								
									d9486b8297
								
							
						
					
					
						commit
						8e2e071abf
					
				@ -171,7 +171,7 @@ module.exports = function (myDeps, conf, overrideHttp) {
 | 
			
		||||
            }).then(function (result) {
 | 
			
		||||
              console.log('got a token from the tunnel server?');
 | 
			
		||||
              result.owner = session.id;
 | 
			
		||||
              deps.tunneler.add(result);
 | 
			
		||||
              return deps.tunneler.add(result);
 | 
			
		||||
            });
 | 
			
		||||
          /*
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,38 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
module.exports.create = function (deps, config) {
 | 
			
		||||
  var PromiseA = require('bluebird');
 | 
			
		||||
  var fs = PromiseA.promisifyAll(require('fs'));
 | 
			
		||||
  var stunnel = require('stunnel');
 | 
			
		||||
  var activeTunnels = {};
 | 
			
		||||
 | 
			
		||||
  var tokensPath = require('path').join(__dirname, '..', 'var', 'tokens.json');
 | 
			
		||||
  var storage = {
 | 
			
		||||
    all: function () {
 | 
			
		||||
      var tokens;
 | 
			
		||||
      try {
 | 
			
		||||
        tokens = require(tokensPath);
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        tokens = {};
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return PromiseA.resolve(Object.keys(tokens).map(function (key) {
 | 
			
		||||
        return tokens[key];
 | 
			
		||||
      }));
 | 
			
		||||
    }
 | 
			
		||||
  , save: function (result) {
 | 
			
		||||
      var tokens;
 | 
			
		||||
      try {
 | 
			
		||||
        tokens = require(tokensPath);
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        tokens = {};
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      tokens[result.jwt] = result;
 | 
			
		||||
      return fs.writeFileAsync(tokensPath, JSON.stringify(tokens), 'utf8');
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  function addToken(data) {
 | 
			
		||||
    if (!data.tunnelUrl) {
 | 
			
		||||
      var decoded;
 | 
			
		||||
@ -11,11 +40,12 @@ module.exports.create = function (deps, config) {
 | 
			
		||||
        decoded = JSON.parse(new Buffer(data.jwt.split('.')[1], 'base64').toString('ascii'));
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        console.warn('invalid web token given to tunnel manager', err);
 | 
			
		||||
        return;
 | 
			
		||||
        return PromiseA.reject(err);
 | 
			
		||||
      }
 | 
			
		||||
      if (!decoded.aud) {
 | 
			
		||||
        console.warn('tunnel manager given token with no tunnelUrl or audience');
 | 
			
		||||
        return;
 | 
			
		||||
        var err = new Error('missing tunnelUrl and audience');
 | 
			
		||||
        return PromiseA.reject(err);
 | 
			
		||||
      }
 | 
			
		||||
      data.tunnelUrl = 'wss://' + decoded.aud + '/';
 | 
			
		||||
    }
 | 
			
		||||
@ -50,8 +80,17 @@ module.exports.create = function (deps, config) {
 | 
			
		||||
      addToken({ jwt: jwt, owner: 'config' });
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
  storage.all().then(function (stored) {
 | 
			
		||||
    stored.forEach(function (result) {
 | 
			
		||||
      addToken(result);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return {
 | 
			
		||||
    add: addToken
 | 
			
		||||
    add: function (data) {
 | 
			
		||||
      return addToken(data).then(function () {
 | 
			
		||||
        return storage.save(data);
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user