117 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| ;(function (exports) {
 | |
| 'use strict';
 | |
| 
 | |
| /* global Promise */
 | |
| var PromiseA;
 | |
| if ('undefined' !== typeof Promise) {
 | |
|   PromiseA = Promise;
 | |
| } else {
 | |
|   throw new Error("no Promise implementation defined");
 | |
| }
 | |
| 
 | |
| var common = exports.TELEBIT || require('./lib/common.js');
 | |
| 
 | |
| common.authorize = common.getToken = function getToken(state, showOtp) {
 | |
|   state.relay = state.config.relay;
 | |
| 
 | |
|   // { _otp, config: {} }
 | |
|   return common.api.token(state, {
 | |
|     error: function (err) { console.error("[Error] common.api.token handlers.error: \n", err); return PromiseA.reject(err); }
 | |
|   , directory: function (dir) {
 | |
|       /*console.log('[directory] Telebit Relay Discovered:', dir);*/
 | |
|       state._apiDirectory = dir;
 | |
|       return PromiseA.resolve();
 | |
|     }
 | |
|   , tunnelUrl: function (tunnelUrl) {
 | |
|       //console.log('[tunnelUrl] Telebit Relay Tunnel Socket:', tunnelUrl);
 | |
|       state.wss = tunnelUrl;
 | |
|       return PromiseA.resolve();
 | |
|     }
 | |
|   , requested: function (authReq, pollUrl) {
 | |
|       console.log("[requested] Pairing Requested");
 | |
|       state._otp = state._otp = authReq.otp;
 | |
| 
 | |
|       if (!state.config.token && state._can_pair) {
 | |
|         console.info("0000".replace(/0000/g, state._otp));
 | |
|         showOtp(authReq.otp, pollUrl);
 | |
|       }
 | |
| 
 | |
|       return PromiseA.resolve();
 | |
|     }
 | |
|   , connect: function (pretoken) {
 | |
|       console.log("[connect] Enabling Pairing Locally...");
 | |
|       state.config.pretoken = pretoken;
 | |
|       state._connecting = true;
 | |
| 
 | |
|       // This will only be saved to the session
 | |
|       state.config._otp = state._otp;
 | |
|       return common.reqLocalAsync({ url: '/api/config', method: 'POST', body: state.config, json: true }).then(function () {
 | |
|         console.info("waiting...");
 | |
|         return PromiseA.resolve();
 | |
|       }).catch(function (err) {
 | |
|         state._error = err;
 | |
|         console.error("Error while initializing config [connect]:");
 | |
|         console.error(err);
 | |
|         return PromiseA.reject(err);
 | |
|       });
 | |
|     }
 | |
|   , offer: function (token) {
 | |
|       //console.log("[offer] Pairing Enabled by Relay");
 | |
|       state.token = token;
 | |
|       state.config.token = token;
 | |
|       if (state._error) {
 | |
|         return;
 | |
|       }
 | |
|       state._connecting = true;
 | |
|       try {
 | |
|         //require('jsonwebtoken').decode(token);
 | |
|         token = token.split('.');
 | |
|         token[0] = token[0].replace(/_/g, '/').replace(/-/g, '+');
 | |
|         while (token[0].length % 4) { token[0] += '='; }
 | |
|         btoa(token[0]);
 | |
|         token[1] = token[1].replace(/_/g, '/').replace(/-/g, '+');
 | |
|         while (token[1].length % 4) { token[1] += '='; }
 | |
|         btoa(token[1]);
 | |
|         //console.log(require('jsonwebtoken').decode(token));
 | |
|       } catch(e) {
 | |
|         console.warn("[warning] could not decode token");
 | |
|       }
 | |
|       return common.reqLocalAsync({ url: '/api/config', method: 'POST', body: state.config, json: true }).then(function () {
 | |
|         //console.log("Pairing Enabled Locally");
 | |
|         return PromiseA.resolve();
 | |
|       }).catch(function (err) {
 | |
|         state._error = err;
 | |
|         console.error("Error while initializing config [offer]:");
 | |
|         console.error(err);
 | |
|         return PromiseA.reject(err);
 | |
|       });
 | |
|     }
 | |
|   , granted: function (/*_*/) { /*console.log("[grant] Pairing complete!");*/ return PromiseA.resolve(); }
 | |
|   , end: function () {
 | |
|       return common.reqLocalAsync({ url: '/api/enable', method: 'POST', body: [], json: true }).then(function () {
 | |
|         console.info("Success");
 | |
| 
 | |
|         // workaround for https://github.com/nodejs/node/issues/21319
 | |
|         if (state._useTty) {
 | |
|           setTimeout(function () {
 | |
|             console.info("Some fun things to try first:\n");
 | |
|             console.info("    ~/telebit http ~/public");
 | |
|             console.info("    ~/telebit tcp 5050");
 | |
|             console.info("    ~/telebit ssh auto");
 | |
|             console.info();
 | |
|             console.info("Press any key to continue...");
 | |
|             console.info();
 | |
|             process.exit(0);
 | |
|           }, 0.5 * 1000);
 | |
|           return;
 | |
|         }
 | |
|         // end workaround
 | |
| 
 | |
|         //parseCli(state);
 | |
|       });
 | |
|     }
 | |
|   });
 | |
| };
 | |
| 
 | |
| }('undefined' === typeof module ? window : module.exports));
 |