1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/rocketchat_ynh.git synced 2024-09-03 20:16:25 +02:00
rocketchat_ynh/sources/programs/server/packages/rocketchat_oauth2-server.js
2016-04-29 16:32:48 +02:00

323 lines
35 KiB
JavaScript

(function () {
/* Imports */
var Meteor = Package.meteor.Meteor;
/* Package-scope variables */
var __coffeescriptShare, OAuth2Server;
(function(){
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/rocketchat_oauth2-server/model.coffee.js //
// //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
__coffeescriptShare = typeof __coffeescriptShare === 'object' ? __coffeescriptShare : {}; var share = __coffeescriptShare;
var AccessTokens, AuthCodes, Clients, Model, RefreshTokens, debug; // 1
//
AccessTokens = void 0; // 1
//
RefreshTokens = void 0; // 1
//
Clients = void 0; // 1
//
AuthCodes = void 0; // 1
//
debug = void 0; // 1
//
this.Model = Model = (function() { // 1
function Model(config) { // 8
if (config == null) { //
config = {}; //
} //
if (config.accessTokensCollectionName == null) { //
config.accessTokensCollectionName = 'oauth_access_tokens'; //
} //
if (config.refreshTokensCollectionName == null) { //
config.refreshTokensCollectionName = 'oauth_refresh_tokens'; //
} //
if (config.clientsCollectionName == null) { //
config.clientsCollectionName = 'oauth_clients'; //
} //
if (config.authCodesCollectionName == null) { //
config.authCodesCollectionName = 'oauth_auth_codes'; //
} //
this.debug = debug = config.debug; // 9
this.AccessTokens = AccessTokens = config.accessTokensCollection || new Meteor.Collection(config.accessTokensCollectionName);
this.RefreshTokens = RefreshTokens = config.refreshTokensCollection || new Meteor.Collection(config.refreshTokensCollectionName);
this.Clients = Clients = config.clientsCollection || new Meteor.Collection(config.clientsCollectionName); // 9
this.AuthCodes = AuthCodes = config.authCodesCollection || new Meteor.Collection(config.authCodesCollectionName);
} //
//
Model.prototype.getAccessToken = Meteor.bindEnvironment(function(bearerToken, callback) { // 8
var e, token; // 23
if (debug === true) { // 23
console.log('[OAuth2Server]', 'in getAccessToken (bearerToken:', bearerToken, ')'); // 24
} //
try { // 26
token = AccessTokens.findOne({ // 27
accessToken: bearerToken // 27
}); //
return callback(null, token); //
} catch (_error) { //
e = _error; // 30
return callback(e); //
} //
}); //
//
Model.prototype.getClient = Meteor.bindEnvironment(function(clientId, clientSecret, callback) { // 8
var client, e; // 34
if (debug === true) { // 34
console.log('[OAuth2Server]', 'in getClient (clientId:', clientId, ', clientSecret:', clientSecret, ')'); // 35
} //
try { // 37
if (clientSecret == null) { // 38
client = Clients.findOne({ // 39
active: true, // 39
clientId: clientId // 39
}); //
} else { //
client = Clients.findOne({ // 41
active: true, // 41
clientId: clientId, // 41
clientSecret: clientSecret // 41
}); //
} //
return callback(null, client); //
} catch (_error) { //
e = _error; // 44
return callback(e); //
} //
}); //
//
Model.prototype.grantTypeAllowed = function(clientId, grantType, callback) { // 8
if (debug === true) { // 48
console.log('[OAuth2Server]', 'in grantTypeAllowed (clientId:', clientId, ', grantType:', grantType + ')'); // 49
} //
return callback(false, grantType === 'authorization_code'); // 51
}; //
//
Model.prototype.saveAccessToken = Meteor.bindEnvironment(function(token, clientId, expires, user, callback) { // 8
var e, tokenId; // 55
if (debug === true) { // 55
console.log('[OAuth2Server]', 'in saveAccessToken (token:', token, ', clientId:', clientId, ', user:', user, ', expires:', expires, ')');
} //
try { // 58
tokenId = AccessTokens.insert({ // 59
accessToken: token, // 60
clientId: clientId, // 60
userId: user.id, // 60
expires: expires // 60
}); //
return callback(null, tokenId); //
} catch (_error) { //
e = _error; // 67
return callback(e); //
} //
}); //
//
Model.prototype.getAuthCode = Meteor.bindEnvironment(function(authCode, callback) { // 8
var code, e; // 71
if (debug === true) { // 71
console.log('[OAuth2Server]', 'in getAuthCode (authCode: ' + authCode + ')'); // 72
} //
try { // 74
code = AuthCodes.findOne({ // 75
authCode: authCode // 75
}); //
return callback(null, code); //
} catch (_error) { //
e = _error; // 78
return callback(e); //
} //
}); //
//
Model.prototype.saveAuthCode = Meteor.bindEnvironment(function(code, clientId, expires, user, callback) { // 8
var codeId, e; // 82
if (debug === true) { // 82
console.log('[OAuth2Server]', 'in saveAuthCode (code:', code, ', clientId:', clientId, ', expires:', expires, ', user:', user, ')');
} //
try { // 85
codeId = AuthCodes.upsert({ // 86
authCode: code // 87
}, { //
authCode: code, // 89
clientId: clientId, // 89
userId: user.id, // 89
expires: expires // 89
}); //
return callback(null, codeId); //
} catch (_error) { //
e = _error; // 96
return callback(e); //
} //
}); //
//
Model.prototype.saveRefreshToken = Meteor.bindEnvironment(function(token, clientId, expires, user, callback) { // 8
var e, tokenId; // 100
if (debug === true) { // 100
console.log('[OAuth2Server]', 'in saveRefreshToken (token:', token, ', clientId:', clientId, ', user:', user, ', expires:', expires, ')');
} //
try { // 103
return tokenId = RefreshTokens.insert({ //
refreshToken: token, // 105
clientId: clientId, // 105
userId: user.id, // 105
expires: expires // 105
}, callback(null, tokenId)); //
} catch (_error) { //
e = _error; // 112
return callback(e); //
} //
}); //
//
Model.prototype.getRefreshToken = Meteor.bindEnvironment(function(refreshToken, callback) { // 8
var e, token; // 116
if (debug === true) { // 116
console.log('[OAuth2Server]', 'in getRefreshToken (refreshToken: ' + refreshToken + ')'); // 117
} //
try { // 119
token = RefreshTokens.findOne({ // 120
refreshToken: refreshToken // 120
}); //
return callback(null, token); //
} catch (_error) { //
e = _error; // 123
return callback(e); //
} //
}); //
//
return Model; //
//
})(); //
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function(){
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/rocketchat_oauth2-server/oauth.coffee.js //
// //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
__coffeescriptShare = typeof __coffeescriptShare === 'object' ? __coffeescriptShare : {}; var share = __coffeescriptShare;
var express, oauthserver; // 1
//
oauthserver = Npm.require('oauth2-server'); // 1
//
express = Npm.require('express'); // 1
//
OAuth2Server = (function() { // 1
function OAuth2Server(config) { // 9
this.config = config != null ? config : {}; // 10
this.app = express(); // 10
this.routes = express(); // 10
this.model = new Model(this.config); // 10
this.oauth = oauthserver({ // 10
model: this.model, // 17
grants: ['authorization_code', 'refresh_token'], // 17
debug: this.config.debug // 17
}); //
this.publishAuhorizedClients(); // 10
this.initRoutes(); // 10
return this; // 24
} //
//
OAuth2Server.prototype.publishAuhorizedClients = function() { // 9
return Meteor.publish('authorizedOAuth', function() { //
if (this.userId == null) { // 29
return this.ready(); // 30
} //
return Meteor.users.find({ // 32
_id: this.userId // 33
}, { //
fields: { // 35
'oauth.athorizedClients': 1 // 36
} //
}); //
return typeof user !== "undefined" && user !== null; // 38
}); //
}; //
//
OAuth2Server.prototype.initRoutes = function() { // 9
var debugMiddleware, self; // 42
self = this; // 42
debugMiddleware = function(req, res, next) { // 42
if (self.config.debug === true) { // 44
console.log('[OAuth2Server]', req.method, req.url); // 45
} //
return next(); //
}; //
this.app.all('/oauth/token', debugMiddleware, this.oauth.grant()); // 42
this.app.get('/oauth/authorize', debugMiddleware, Meteor.bindEnvironment(function(req, res, next) { // 42
var client; // 51
client = self.model.Clients.findOne({ // 51
active: true, // 51
clientId: req.query.client_id // 51
}); //
if (client == null) { // 52
return res.redirect('/oauth/error/404'); // 53
} //
if (client.redirectUri !== req.query.redirect_uri) { // 55
return res.redirect('/oauth/error/invalid_redirect_uri'); // 56
} //
return next(); //
})); //
this.app.post('/oauth/authorize', debugMiddleware, Meteor.bindEnvironment(function(req, res, next) { // 42
var user; // 61
if (req.body.token == null) { // 61
return res.sendStatus(401).send('No token'); // 62
} //
user = Meteor.users.findOne({ // 61
'services.resume.loginTokens.hashedToken': Accounts._hashLoginToken(req.body.token) // 65
}); //
if (user == null) { // 67
return res.sendStatus(401).send('Invalid token'); // 68
} //
req.user = { // 61
id: user._id // 71
}; //
return next(); //
})); //
this.app.post('/oauth/authorize', debugMiddleware, this.oauth.authCodeGrant(function(req, next) { // 42
if (req.body.allow === 'yes') { // 77
Meteor.users.update(req.user.id, { // 78
$addToSet: { // 78
'oauth.athorizedClients': this.clientId // 78
} //
}); //
} //
return next(null, req.body.allow === 'yes', req.user); //
})); //
this.app.use(this.routes); // 42
return this.app.all('/oauth/*', this.oauth.errorHandler()); //
}; //
//
return OAuth2Server; //
//
})(); //
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
/* Exports */
if (typeof Package === 'undefined') Package = {};
Package['rocketchat:oauth2-server'] = {
OAuth2Server: OAuth2Server
};
})();
//# sourceMappingURL=rocketchat_oauth2-server.js.map