Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 237646e

Browse files
Merge pull request #272 from mjsalinger/conditionally-promisify
Conditionally promisify all model functions
2 parents cd1f777 + ade9b15 commit 237646e

17 files changed

+272
-71
lines changed

‎lib/grant-types/abstract-grant-type.js‎

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
var InvalidArgumentError = require('../errors/invalid-argument-error');
88
var InvalidScopeError = require('../errors/invalid-scope-error');
99
var Promise = require('bluebird');
10+
var promisify = require('promisify-any').use(Promise);
1011
var is = require('../validator/is');
1112
var tokenUtil = require('../utils/token-util');
1213

@@ -36,7 +37,7 @@ function AbstractGrantType(options) {
3637

3738
AbstractGrantType.prototype.generateAccessToken = function() {
3839
if (this.model.generateAccessToken) {
39-
return Promise.try(this.model.generateAccessToken);
40+
return promisify(this.model.generateAccessToken)();
4041
}
4142

4243
return tokenUtil.generateRandomToken();
@@ -48,7 +49,7 @@ AbstractGrantType.prototype.generateAccessToken = function() {
4849

4950
AbstractGrantType.prototype.generateRefreshToken = function() {
5051
if (this.model.generateRefreshToken) {
51-
return Promise.try(this.model.generateRefreshToken);
52+
return promisify(this.model.generateRefreshToken)();
5253
}
5354

5455
return tokenUtil.generateRandomToken();
@@ -94,14 +95,18 @@ AbstractGrantType.prototype.getScope = function(request) {
9495
* Validate requested scope.
9596
*/
9697
AbstractGrantType.prototype.validateScope = function(user, client, scope) {
97-
return Promise.try(this.model.validateScope, [user, client, scope])
98-
.then(function(scope) {
99-
if(!scope) {
100-
throw new InvalidScopeError('Invalid scope: Requested scope is invalid');
101-
}
102-
103-
return scope;
104-
});
98+
if (this.model.validateScope) {
99+
return promisify(this.model.validateScope, 3)(user, client, scope)
100+
.then(function (scope) {
101+
if (!scope) {
102+
throw new InvalidScopeError('Invalid scope: Requested scope is invalid');
103+
}
104+
105+
return scope;
106+
});
107+
} else {
108+
return scope;
109+
}
105110
};
106111

107112
/**

‎lib/grant-types/authorization-code-grant-type.js‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ var InvalidArgumentError = require('../errors/invalid-argument-error');
99
var InvalidGrantError = require('../errors/invalid-grant-error');
1010
var InvalidRequestError = require('../errors/invalid-request-error');
1111
var Promise = require('bluebird');
12+
var promisify = require('promisify-any').use(Promise);
1213
var ServerError = require('../errors/server-error');
1314
var is = require('../validator/is');
1415
var util = require('util');
@@ -87,8 +88,7 @@ AuthorizationCodeGrantType.prototype.getAuthorizationCode = function(request, cl
8788
if (!is.vschar(request.body.code)) {
8889
throw new InvalidRequestError('Invalid parameter: `code`');
8990
}
90-
91-
return Promise.try(this.model.getAuthorizationCode, request.body.code)
91+
return promisify(this.model.getAuthorizationCode, 1)(request.body.code)
9292
.then(function(code) {
9393
if (!code) {
9494
throw new InvalidGrantError('Invalid grant: authorization code is invalid');
@@ -160,7 +160,7 @@ AuthorizationCodeGrantType.prototype.getAuthorizationCode = function(request, cl
160160
*/
161161

162162
AuthorizationCodeGrantType.prototype.revokeAuthorizationCode = function(code) {
163-
return Promise.try(this.model.revokeAuthorizationCode, code)
163+
return promisify(this.model.revokeAuthorizationCode, 1)(code)
164164
.then(function(status) {
165165
if (!status) {
166166
throw new InvalidGrantError('Invalid grant: authorization code is invalid');
@@ -191,7 +191,7 @@ AuthorizationCodeGrantType.prototype.saveToken = function(user, client, authoriz
191191
scope: scope
192192
};
193193

194-
return this.model.saveToken(token, client, user);
194+
return promisify(this.model.saveToken,3)(token, client, user);
195195
});
196196
};
197197

‎lib/grant-types/client-credentials-grant-type.js‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var AbstractGrantType = require('./abstract-grant-type');
88
var InvalidArgumentError = require('../errors/invalid-argument-error');
99
var InvalidGrantError = require('../errors/invalid-grant-error');
1010
var Promise = require('bluebird');
11+
var promisify = require('promisify-any').use(Promise);
1112
var util = require('util');
1213

1314
/**
@@ -69,7 +70,7 @@ ClientCredentialsGrantType.prototype.handle = function(request, client) {
6970
*/
7071

7172
ClientCredentialsGrantType.prototype.getUserFromClient = function(client) {
72-
return Promise.try(this.model.getUserFromClient, client)
73+
return promisify(this.model.getUserFromClient, 1)(client)
7374
.then(function(user) {
7475
if (!user) {
7576
throw new InvalidGrantError('Invalid grant: user credentials are invalid');
@@ -99,7 +100,7 @@ ClientCredentialsGrantType.prototype.saveToken = function(user, client, scope) {
99100
scope: scope
100101
};
101102

102-
return this.model.saveToken(token, client, user);
103+
return promisify(this.model.saveToken,3)(token, client, user);
103104
});
104105
};
105106

‎lib/grant-types/password-grant-type.js‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ var InvalidArgumentError = require('../errors/invalid-argument-error');
99
var InvalidGrantError = require('../errors/invalid-grant-error');
1010
var InvalidRequestError = require('../errors/invalid-request-error');
1111
var Promise = require('bluebird');
12+
var promisify = require('promisify-any').use(Promise);
1213
var is = require('../validator/is');
1314
var util = require('util');
1415

@@ -87,7 +88,7 @@ PasswordGrantType.prototype.getUser = function(request) {
8788
throw new InvalidRequestError('Invalid parameter: `password`');
8889
}
8990

90-
return Promise.try(this.model.getUser, [request.body.username, request.body.password])
91+
return promisify(this.model.getUser, 2)(request.body.username, request.body.password)
9192
.then(function(user) {
9293
if (!user) {
9394
throw new InvalidGrantError('Invalid grant: user credentials are invalid');
@@ -121,7 +122,7 @@ PasswordGrantType.prototype.saveToken = function(user, client, scope) {
121122
scope: scope
122123
};
123124

124-
return this.model.saveToken(token, client, user);
125+
return promisify(this.model.saveToken,3)(token, client, user);
125126
});
126127
};
127128

‎lib/grant-types/refresh-token-grant-type.js‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ var InvalidArgumentError = require('../errors/invalid-argument-error');
99
var InvalidGrantError = require('../errors/invalid-grant-error');
1010
var InvalidRequestError = require('../errors/invalid-request-error');
1111
var Promise = require('bluebird');
12+
var promisify = require('promisify-any').use(Promise);
1213
var ServerError = require('../errors/server-error');
1314
var is = require('../validator/is');
1415
var util = require('util');
@@ -85,7 +86,7 @@ RefreshTokenGrantType.prototype.getRefreshToken = function(request, client) {
8586
throw new InvalidRequestError('Invalid parameter: `refresh_token`');
8687
}
8788

88-
return Promise.try(this.model.getRefreshToken, request.body.refresh_token)
89+
return promisify(this.model.getRefreshToken, 1)(request.body.refresh_token)
8990
.then(function(token) {
9091
if (!token) {
9192
throw new InvalidGrantError('Invalid grant: refresh token is invalid');
@@ -122,7 +123,7 @@ RefreshTokenGrantType.prototype.getRefreshToken = function(request, client) {
122123
*/
123124

124125
RefreshTokenGrantType.prototype.revokeToken = function(token) {
125-
return Promise.try(this.model.revokeToken, token)
126+
return promisify(this.model.revokeToken, 1)(token)
126127
.then(function(status) {
127128
if (!status) {
128129
throw new InvalidGrantError('Invalid grant: refresh token is invalid');
@@ -155,7 +156,13 @@ RefreshTokenGrantType.prototype.saveToken = function(user, client, scope) {
155156
scope: scope
156157
};
157158

158-
return this.model.saveToken(token, client, user);
159+
return token;
160+
})
161+
.then(function(token) {
162+
return Promise.try(promisify(this.model.saveToken, 3), [token, client, user])
163+
.then(function(savedToken) {
164+
return savedToken;
165+
});
159166
});
160167
};
161168

‎lib/handlers/authenticate-handler.js‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ var InvalidScopeError = require('../errors/invalid-scope-error');
1010
var InvalidTokenError = require('../errors/invalid-token-error');
1111
var OAuthError = require('../errors/oauth-error');
1212
var Promise = require('bluebird');
13+
var promisify = require('promisify-any').use(Promise);
1314
var Request = require('../request');
1415
var Response = require('../response');
1516
var ServerError = require('../errors/server-error');
@@ -196,7 +197,7 @@ AuthenticateHandler.prototype.getTokenFromRequestBody = function(request) {
196197
*/
197198

198199
AuthenticateHandler.prototype.getAccessToken = function(token) {
199-
return Promise.try(this.model.getAccessToken, token)
200+
return promisify(this.model.getAccessToken, 1)(token)
200201
.then(function(accessToken) {
201202
if (!accessToken) {
202203
throw new InvalidTokenError('Invalid token: access token is invalid');
@@ -231,7 +232,7 @@ AuthenticateHandler.prototype.validateAccessToken = function(accessToken) {
231232
*/
232233

233234
AuthenticateHandler.prototype.verifyScope = function(accessToken) {
234-
return Promise.try(this.model.verifyScope, [accessToken, this.scope]).then(function(scope) {
235+
return promisify(this.model.verifyScope, 2)(accessToken, this.scope).then(function(scope) {
235236
if (!scope) {
236237
throw new InvalidScopeError('Invalid scope: scope is invalid');
237238
}

‎lib/handlers/authorize-handler.js‎

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ var InvalidRequestError = require('../errors/invalid-request-error');
1313
var InvalidScopeError = require('../errors/invalid-scope-error');
1414
var OAuthError = require('../errors/oauth-error');
1515
var Promise = require('bluebird');
16+
var promisify = require('promisify-any').use(Promise);
1617
var Request = require('../request');
1718
var Response = require('../response');
1819
var ServerError = require('../errors/server-error');
@@ -113,7 +114,6 @@ AuthorizeHandler.prototype.handle = function(request, response) {
113114
if (!(e instanceof OAuthError)) {
114115
e = new ServerError(e);
115116
}
116-
117117
var redirectUri = this.buildErrorRedirectUri(uri, e);
118118

119119
this.updateResponse(response, redirectUri, state);
@@ -129,9 +129,8 @@ AuthorizeHandler.prototype.handle = function(request, response) {
129129

130130
AuthorizeHandler.prototype.generateAuthorizationCode = function() {
131131
if (this.model.generateAuthorizationCode) {
132-
return Promise.try(this.model.generateAuthorizationCode);
132+
return promisify(this.model.generateAuthorizationCode)();
133133
}
134-
135134
return tokenUtil.generateRandomToken();
136135
};
137136

@@ -143,7 +142,6 @@ AuthorizeHandler.prototype.getAuthorizationCodeLifetime = function() {
143142
var expires = new Date();
144143

145144
expires.setSeconds(expires.getSeconds() + this.authorizationCodeLifetime);
146-
147145
return expires;
148146
};
149147

@@ -167,8 +165,7 @@ AuthorizeHandler.prototype.getClient = function(request) {
167165
if (redirectUri && !is.uri(redirectUri)) {
168166
throw new InvalidRequestError('Invalid request: `redirect_uri` is not a valid URI');
169167
}
170-
171-
return Promise.try(this.model.getClient, clientId)
168+
return promisify(this.model.getClient, 2)(clientId, null)
172169
.then(function(client) {
173170
if (!client) {
174171
throw new InvalidClientError('Invalid client: client credentials are invalid');
@@ -189,7 +186,6 @@ AuthorizeHandler.prototype.getClient = function(request) {
189186
if (redirectUri && !_.contains(client.redirectUris, redirectUri)) {
190187
throw new InvalidClientError('Invalid client: `redirect_uri` does not match client value');
191188
}
192-
193189
return client;
194190
});
195191
};
@@ -234,8 +230,7 @@ AuthorizeHandler.prototype.getUser = function(request, response) {
234230
if (this.authenticateHandler instanceof AuthenticateHandler) {
235231
return this.authenticateHandler.handle(request, response).get('user');
236232
}
237-
238-
return Promise.try(this.authenticateHandler.handle, [request, response]).then(function(user) {
233+
return promisify(this.authenticateHandler.handle, 2)(request, response).then(function(user) {
239234
if (!user) {
240235
throw new ServerError('Server error: `handle()` did not return a `user` object');
241236
}
@@ -263,8 +258,7 @@ AuthorizeHandler.prototype.saveAuthorizationCode = function(authorizationCode, e
263258
redirectUri: redirectUri,
264259
scope: scope
265260
};
266-
267-
return Promise.try(this.model.saveAuthorizationCode, [code, client, user]);
261+
return promisify(this.model.saveAuthorizationCode, 3)(code, client, user);
268262
};
269263

270264
/**

‎lib/handlers/token-handler.js‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ var InvalidClientError = require('../errors/invalid-client-error');
1111
var InvalidRequestError = require('../errors/invalid-request-error');
1212
var OAuthError = require('../errors/oauth-error');
1313
var Promise = require('bluebird');
14+
var promisify = require('promisify-any').use(Promise);
1415
var Request = require('../request');
1516
var Response = require('../response');
1617
var ServerError = require('../errors/server-error');
@@ -127,7 +128,7 @@ TokenHandler.prototype.getClient = function(request, response) {
127128
throw new InvalidRequestError('Invalid parameter: `client_secret`');
128129
}
129130

130-
return Promise.try(this.model.getClient, [credentials.clientId, credentials.clientSecret])
131+
return promisify(this.model.getClient, 2)(credentials.clientId, credentials.clientSecret)
131132
.then(function(client) {
132133
if (!client) {
133134
throw new InvalidClientError('Invalid client: client is invalid');

‎package.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"bluebird": "^2.9.13",
1717
"camel-case": "^1.1.1",
1818
"lodash": "^3.3.1",
19+
"promisify-any": "2.0.1",
1920
"standard-http-error": "^1.1.0",
2021
"type-is": "^1.6.0",
2122
"validator.js": "^1.1.1"

‎test/integration/grant-types/authorization-code-grant-type_test.js‎

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,19 @@ describe('AuthorizationCodeGrantType integration', function() {
154154

155155
grantType.handle(request, client).should.be.an.instanceOf(Promise);
156156
});
157+
158+
it('should support callbacks', function() {
159+
var client = { id: 'foobar' };
160+
var model = {
161+
getAuthorizationCode: function(code, callback) { callback(null, { authorizationCode: 12345, client: { id: 'foobar' }, expiresAt: new Date(new Date() * 2), user: {} }); },
162+
revokeAuthorizationCode: function(code, callback) { callback(null, { authorizationCode: 12345, client: { id: 'foobar' }, expiresAt: new Date(new Date() / 2), user: {} }); },
163+
saveToken: function(tokenToSave, client, user, callback) { callback(null, tokenToSave); }
164+
};
165+
var grantType = new AuthorizationCodeGrantType({ accessTokenLifetime: 123, model: model });
166+
var request = new Request({ body: { code: 12345 }, headers: {}, method: {}, query: {} });
167+
168+
grantType.handle(request, client).should.be.an.instanceOf(Promise);
169+
});
157170
});
158171

159172
describe('getAuthorizationCode()', function() {
@@ -374,6 +387,20 @@ describe('AuthorizationCodeGrantType integration', function() {
374387

375388
grantType.getAuthorizationCode(request, client).should.be.an.instanceOf(Promise);
376389
});
390+
391+
it('should support callbacks', function() {
392+
var authorizationCode = { authorizationCode: 12345, client: { id: 'foobar' }, expiresAt: new Date(new Date() * 2), user: {} };
393+
var client = { id: 'foobar' };
394+
var model = {
395+
getAuthorizationCode: function(code, callback) { callback(null, authorizationCode); },
396+
revokeAuthorizationCode: function() {},
397+
saveToken: function() {}
398+
};
399+
var grantType = new AuthorizationCodeGrantType({ accessTokenLifetime: 123, model: model });
400+
var request = new Request({ body: { code: 12345 }, headers: {}, method: {}, query: {} });
401+
402+
grantType.getAuthorizationCode(request, client).should.be.an.instanceOf(Promise);
403+
});
377404
});
378405

379406
describe('validateRedirectUri()', function() {
@@ -458,6 +485,18 @@ describe('AuthorizationCodeGrantType integration', function() {
458485

459486
grantType.revokeAuthorizationCode(authorizationCode).should.be.an.instanceOf(Promise);
460487
});
488+
489+
it('should support callbacks', function() {
490+
var authorizationCode = { authorizationCode: 12345, client: {}, expiresAt: new Date(new Date() / 2), user: {} };
491+
var model = {
492+
getAuthorizationCode: function() {},
493+
revokeAuthorizationCode: function(code, callback) { callback(null, authorizationCode); },
494+
saveToken: function() {}
495+
};
496+
var grantType = new AuthorizationCodeGrantType({ accessTokenLifetime: 123, model: model });
497+
498+
grantType.revokeAuthorizationCode(authorizationCode).should.be.an.instanceOf(Promise);
499+
});
461500
});
462501

463502
describe('saveToken()', function() {
@@ -501,5 +540,17 @@ describe('AuthorizationCodeGrantType integration', function() {
501540

502541
grantType.saveToken(token).should.be.an.instanceOf(Promise);
503542
});
543+
544+
it('should support callbacks', function() {
545+
var token = {};
546+
var model = {
547+
getAuthorizationCode: function() {},
548+
revokeAuthorizationCode: function() {},
549+
saveToken: function(tokenToSave, client, user, callback) { callback(null, token); }
550+
};
551+
var grantType = new AuthorizationCodeGrantType({ accessTokenLifetime: 123, model: model });
552+
553+
grantType.saveToken(token).should.be.an.instanceOf(Promise);
554+
});
504555
});
505556
});

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /