forked from anvilresearch/connect
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patherror.js
80 lines (58 loc) · 1.55 KB
/
error.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/**
* Module dependencies
*/
var qs = require('qs');
/**
* Error Response
*/
function error (err, req, res, next) {
// 302 Redirect
if (err.statusCode === 302 && err.redirect_uri) {
var params = req.connectParams
, responseMode = '?' || '#'
, error = { error: err.error, error_description: err.error_description }
, uri = err.redirect_uri + responseMode + qs.stringify(error)
;
res.redirect(uri);
}
// 400 Bad Request
else if (err.statusCode === 400) {
res.set({
'Cache-Control': 'no-store',
'Pragma': 'no-cache'
});
res.status(400).json({
error: err.error || err.message,
error_description: err.error_description,
error_uri: err.error_uri
});
}
// 401 Unauthorized
else if (err.statusCode === 401) {
// rfc 6750 Bearer Token
// http://tools.ietf.org/html/rfc6750#section-3
res.set({
'WWW-Authenticate':
'Bearer ' +
'realm="' + err.realm + '", ' +
'error="' + err.error + '", ' +
'error_description="' + err.error_description + '"',
});
res.status(401).send('Unauthorized');
}
// 403 Forbidden
else if (err.statusCode === 403) {
res.status(403).send('Forbidden');
}
// 500 Internal Server Error
else {
var statusCode = err.statusCode || 500
, message = (err.statusCode && err.message) || 'Internal Server Error'
;
res.status(statusCode).send(message);
}
}
/**
* Exports
*/
module.exports = error;