mo' betta'
This commit is contained in:
		
							parent
							
								
									95f9ca0844
								
							
						
					
					
						commit
						179256a88e
					
				| @ -45,6 +45,7 @@ function sendMail(state, auth) { | |||||||
|     text = text.replace(new RegExp('{{' + key + '}}', 'g'), val); |     text = text.replace(new RegExp('{{' + key + '}}', 'g'), val); | ||||||
|     html = html.replace(new RegExp('{{' + key + '}}', 'g'), val); |     html = html.replace(new RegExp('{{' + key + '}}', 'g'), val); | ||||||
|   }); |   }); | ||||||
|  | 
 | ||||||
|   return requestAsync({ |   return requestAsync({ | ||||||
|     url: state.config.mailer.url |     url: state.config.mailer.url | ||||||
|   , method: 'POST' |   , method: 'POST' | ||||||
| @ -74,10 +75,12 @@ module.exports.pairRequest = function (opts) { | |||||||
|   var auth = opts.auth; |   var auth = opts.auth; | ||||||
|   var jwt = require('jsonwebtoken'); |   var jwt = require('jsonwebtoken'); | ||||||
| 
 | 
 | ||||||
|   console.log("[DEBUG] gonna send email"); |  | ||||||
|   auth.id = crypto.randomBytes(12).toString('hex'); |   auth.id = crypto.randomBytes(12).toString('hex'); | ||||||
|   auth.secret = crypto.randomBytes(12).toString('hex'); |   auth.secret = crypto.randomBytes(12).toString('hex'); | ||||||
|   //var id = crypto.randomBytes(16).toString('base64').replace(/\+/g,'-').replace(/\//g,'_').replace(/=/g,'');
 |   //var id = crypto.randomBytes(16).toString('base64').replace(/\+/g,'-').replace(/\//g,'_').replace(/=/g,'');
 | ||||||
|  | 
 | ||||||
|  |   console.log("[DEBUG] !!state", !!state); | ||||||
|  |   console.log("[DEBUG] !!auth", !!auth); | ||||||
|   return sendMail(state, auth).then(function () { |   return sendMail(state, auth).then(function () { | ||||||
|     var now = Date.now(); |     var now = Date.now(); | ||||||
|     var authnToken = { |     var authnToken = { | ||||||
| @ -118,7 +121,8 @@ module.exports.pairPin = function (opts) { | |||||||
|       throw new Error("I can't even right now - bad device pair pin"); |       throw new Error("I can't even right now - bad device pair pin"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     delete _auths[auth.id]; |     auth._paired = true; | ||||||
|  |     //delete _auths[auth.id];
 | ||||||
|     var hri = require('human-readable-ids').hri; |     var hri = require('human-readable-ids').hri; | ||||||
|     var hrname = hri.random() + '.' + state.config.sharedDomain; |     var hrname = hri.random() + '.' + state.config.sharedDomain; | ||||||
|     var authzToken = { |     var authzToken = { | ||||||
| @ -205,17 +209,37 @@ var staticApp = express(); | |||||||
| var nowww = require('nowww')(); | var nowww = require('nowww')(); | ||||||
| var CORS = require('connect-cors'); | var CORS = require('connect-cors'); | ||||||
| var bodyParser = require('body-parser'); | var bodyParser = require('body-parser'); | ||||||
|  | var urls = { | ||||||
|  |   pairState: '/api/telebit.cloud/pair_state/:id' | ||||||
|  | }; | ||||||
| staticApp.use('/', express.static(path.join(__dirname, 'admin'))); | staticApp.use('/', express.static(path.join(__dirname, 'admin'))); | ||||||
| app.use('/api', CORS({})); | app.use('/api', CORS({})); | ||||||
|  | app.use('/api', function (req, res, next) { | ||||||
|  |   next(); | ||||||
|  |   req.on('data', function (chunk) { | ||||||
|  |     console.log('chunk', chunk.toString()); | ||||||
|  |   }); | ||||||
|  |   req.on('end', function () { | ||||||
|  |     console.log('end'); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
| app.use('/api', bodyParser.json()); | app.use('/api', bodyParser.json()); | ||||||
| // From Device
 | // From Device
 | ||||||
| app.post('/api/telebit.cloud/pair_request', function (req, res) { | app.post('/api/telebit.cloud/pair_request', function (req, res) { | ||||||
|   var auth = req.body; |   var auth = req.body; | ||||||
|   module.exports.authenticate({ state: req._state, auth: auth }).then(function (tokenData) { |   console.log('[ext] pair_request (request)', req.headers); | ||||||
|  |   console.log('[ext] pair_request (request)', req.body); | ||||||
|  |   module.exports.pairRequest({ state: req._state, auth: auth }).then(function (tokenData) { | ||||||
|  |     console.log('[ext] pair_request (response)', tokenData); | ||||||
|     // res.send({ success: true, message: "pair request sent" });
 |     // res.send({ success: true, message: "pair request sent" });
 | ||||||
|  |     var stateUrl = 'https://' + req._state.config.apiDomain + urls.pairState.replace(/:id/g, tokenData.id); | ||||||
|  |     res.statusCode = 201; | ||||||
|  |     res.setHeader('Location',  stateUrl); | ||||||
|  |     res.setHeader('Link', '<' + stateUrl + '>;rel="next"'); | ||||||
|     res.send(tokenData); |     res.send(tokenData); | ||||||
|   }, function (err) { |   }, function (err) { | ||||||
|     res.send({ error: err }); |     console.error(err); | ||||||
|  |     res.send({ error: { code: err.code, message: err.toString() } }); | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
| // From Browser
 | // From Browser
 | ||||||
| @ -228,13 +252,28 @@ app.post('/api/telebit.cloud/pair_code', function (req, res) { | |||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
| // From Device (polling)
 | // From Device (polling)
 | ||||||
| app.get('/api/telebit.cloud/pair_state', function (req, res) { | app.get(urls.pairState, function (req, res) { | ||||||
|   // check if pair is complete
 |   // check if pair is complete
 | ||||||
|   // respond immediately if so
 |   // respond immediately if so
 | ||||||
|   // wait for a little bit otherwise
 |   // wait for a little bit otherwise
 | ||||||
|   // respond if/when it completes
 |   // respond if/when it completes
 | ||||||
|   // or respond after time if it does not complete
 |   // or respond after time if it does not complete
 | ||||||
|   res.send({ error: { message: "not implemented" } }); |   var auth = _auths[req.params.id]; | ||||||
|  |   if (!auth) { | ||||||
|  |     res.send({ status: 'invalid' }); | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (true === auth.paired) { | ||||||
|  |     res.send({ | ||||||
|  |       status: 'ready', access_token: _auths[req.params.id].jwt | ||||||
|  |     , grant: { domains: auth.domains || [], ports: auth.ports || [] } | ||||||
|  |     }); | ||||||
|  |   } else if (false === _auths[req.params.id].paired) { | ||||||
|  |     res.send({ status: 'failed', error: { message: "device pairing failed" } }); | ||||||
|  |   } else { | ||||||
|  |     res.send({ status: 'pending' }); | ||||||
|  |   } | ||||||
| }); | }); | ||||||
| // From Browser
 | // From Browser
 | ||||||
| app.get('/api/telebit.cloud/magic/:magic/:pin?', function (req, res) { | app.get('/api/telebit.cloud/magic/:magic/:pin?', function (req, res) { | ||||||
| @ -263,7 +302,7 @@ module.exports.webadmin = function (state, req, res) { | |||||||
|     staticApp(req, res); |     staticApp(req, res); | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|   if ('api.' + state.config.webminDomain === host) { |   if ((state.config.apiDomain || ('api.' + state.config.webminDomain )) === host) { | ||||||
|     console.log("DEBUG going to api"); |     console.log("DEBUG going to api"); | ||||||
|     req._state = state; |     req._state = state; | ||||||
|     app(req, res); |     app(req, res); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user