Skip to content

Commit 4f607a5

Browse files
authored
Merge pull request #375 from maxtruxa/issue-372
Implement UnsupportedResponseTypeError
2 parents 4f50a6f + f8ba38a commit 4f607a5

File tree

3 files changed

+46
-5
lines changed

3 files changed

+46
-5
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'use strict';
2+
3+
/**
4+
* Module dependencies.
5+
*/
6+
7+
var _ = require('lodash');
8+
var OAuthError = require('./oauth-error');
9+
var util = require('util');
10+
11+
/**
12+
* Constructor.
13+
*
14+
* "The authorization server does not supported obtaining an
15+
* authorization code using this method."
16+
*
17+
* @see https://tools.ietf.org/html/rfc6749#section-4.1.2.1
18+
*/
19+
20+
function UnsupportedResponseTypeError(message, properties) {
21+
properties = _.assign({
22+
code: 400,
23+
name: 'unsupported_response_type'
24+
}, properties);
25+
26+
OAuthError.call(this, message, properties);
27+
}
28+
29+
/**
30+
* Inherit prototype.
31+
*/
32+
33+
util.inherits(UnsupportedResponseTypeError, OAuthError);
34+
35+
/**
36+
* Export constructor.
37+
*/
38+
39+
module.exports = UnsupportedResponseTypeError;

lib/handlers/authorize-handler.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ var InvalidArgumentError = require('../errors/invalid-argument-error');
1111
var InvalidClientError = require('../errors/invalid-client-error');
1212
var InvalidRequestError = require('../errors/invalid-request-error');
1313
var InvalidScopeError = require('../errors/invalid-scope-error');
14+
var UnsupportedResponseTypeError = require('../errors/unsupported-response-type-error');
1415
var OAuthError = require('../errors/oauth-error');
1516
var Promise = require('bluebird');
1617
var promisify = require('promisify-any').use(Promise);
@@ -275,7 +276,7 @@ AuthorizeHandler.prototype.getResponseType = function(request) {
275276
}
276277

277278
if (!_.has(responseTypes, responseType)) {
278-
throw new InvalidRequestError('Invalid parameter: `response_type`');
279+
throw new UnsupportedResponseTypeError('Unsupported response type: `response_type` is not supported');
279280
}
280281

281282
return responseTypes[responseType];

test/integration/handlers/authorize-handler_test.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var InvalidArgumentError = require('../../../lib/errors/invalid-argument-error')
1212
var InvalidClientError = require('../../../lib/errors/invalid-client-error');
1313
var InvalidRequestError = require('../../../lib/errors/invalid-request-error');
1414
var InvalidScopeError = require('../../../lib/errors/invalid-scope-error');
15+
var UnsupportedResponseTypeError = require('../../../lib/errors/unsupported-response-type-error');
1516
var Promise = require('bluebird');
1617
var Request = require('../../../lib/request');
1718
var Response = require('../../../lib/response');
@@ -382,7 +383,7 @@ describe('AuthorizeHandler integration', function() {
382383
return handler.handle(request, response)
383384
.then(should.fail)
384385
.catch(function() {
385-
response.get('location').should.equal('http://example.com/cb?error=invalid_request&error_description=Invalid%20parameter%3A%20%60response_type%60&state=foobar');
386+
response.get('location').should.equal('http://example.com/cb?error=unsupported_response_type&error_description=Unsupported%20response%20type%3A%20%60response_type%60%20is%20not%20supported&state=foobar');
386387
});
387388
});
388389

@@ -417,7 +418,7 @@ describe('AuthorizeHandler integration', function() {
417418
return handler.handle(request, response)
418419
.then(should.fail)
419420
.catch(function() {
420-
response.get('location').should.equal('http://example.com/cb?error=invalid_request&error_description=Invalid%20parameter%3A%20%60response_type%60&state=foobar');
421+
response.get('location').should.equal('http://example.com/cb?error=unsupported_response_type&error_description=Unsupported%20response%20type%3A%20%60response_type%60%20is%20not%20supported&state=foobar');
421422
});
422423
});
423424

@@ -998,8 +999,8 @@ describe('AuthorizeHandler integration', function() {
998999

9991000
should.fail();
10001001
} catch (e) {
1001-
e.should.be.an.instanceOf(InvalidRequestError);
1002-
e.message.should.equal('Invalid parameter: `response_type`');
1002+
e.should.be.an.instanceOf(UnsupportedResponseTypeError);
1003+
e.message.should.equal('Unsupported response type: `response_type` is not supported');
10031004
}
10041005
});
10051006

0 commit comments

Comments
 (0)