mirror of
https://github.com/YunoHost-Apps/rocketchat_ynh.git
synced 2024-09-03 20:16:25 +02:00
323 lines
35 KiB
JavaScript
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
|