cloudcmd/lib/server/auth.js
2014-08-21 03:08:47 -04:00

97 lines
3.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* https://github.com/prose/gatekeeper */
(function(){
'use strict';
if(!global.cloudcmd)
return console.log(
'# auth.js' + '\n' +
'# -----------' + '\n' +
'# Module is part of Cloud Commander,' + '\n' +
'# used for work with authentication.' + '\n' +
'# If you wont to see at work set auth' + '\n' +
'# parameters in config.json or environment' + '\n' +
'# and start cloudcmd.js or just do' + '\n' +
'# require(\'auth.js\').auth(code, сallback)' + '\n' +
'# http://cloudcmd.io' + '\n');
var main = global.cloudcmd.main,
DIR = './',
DIR_LIB = DIR + '../',
https = require('https'),
qs = require('querystring'),
pipe = require(DIR + 'pipe'),
Modules = main.modules,
Util = require(DIR_LIB + 'util'),
GithubAuth = {
host: 'github.com',
port: 443,
path: '/login/oauth/access_token',
method: 'POST'
};
/**
* function do authentication
* @param code
* @param callback
*/
exports.auth = function(code, callback){
code = code.replace('code=', '');
Util.log(code);
authenticate(code, function(error, token) {
var result = { 'token': token };
Util.log(error || result);
Util.exec(callback, error, result);
});
};
function authenticate(code, callback) {
var req,
storage = Util.findObjByNameInArr(Modules, 'storage'),
github = Util.findObjByNameInArr(storage, 'GitHub'),
id = github && github.key,
secret = github && github.secret,
env = process.env,
clientId = env.github_key || id,
clientSecret = env.github_secret || secret,
data = qs.stringify({
client_id : clientId,
client_secret : clientSecret,
code : code
});
Util.log(clientId, clientSecret, data);
GithubAuth.headers = { 'content-length': data.length };
req = https.request(GithubAuth, function(res) {
pipe.getBody(res, function(error, body) {
var parsed, token;
if (!error) {
parsed = qs.parse(body);
if (parsed)
token = parsed.access_token;
}
Util.exec(callback, error, token);
});
});
req.end(data);
req.on('error', function(e) {
Util.exec(callback, e.message);
});
}
})();