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…
Reference in New Issue