Created
July 11, 2017 12:20
-
-
Save rquast/d6a3d24f935b0d7fdcc1013c5742f764 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * Module dependencies | |
| */ | |
| var qs = require('qs') | |
| var log = require('node-gelf')('graylog.cavy.io') | |
| log.fields.facility = 'cavy-connect' | |
| /** | |
| * Error Response | |
| */ | |
| function error (err, req, res, next) { | |
| var message | |
| var errorName = err.error || err.message || err.name | |
| var errorDescription = err.error_description || err.description || err.message | |
| log.error.a(errorName, errorDescription, req.headers) | |
| // 302 Redirect | |
| if (err.statusCode === 302 && err.redirect_uri) { | |
| var params = req.connectParams || req.query | |
| var responseMode = (params.response_mode && params.response_mode.trim()) || | |
| (params.response_type === 'code' || | |
| params.response_type === 'none') ? '?' : '#' | |
| var error = { error: errorName, error_description: errorDescription } | |
| var uri = err.redirect_uri + responseMode + qs.stringify(error) | |
| res.redirect(uri) | |
| // 400 Validation Error | |
| } else if (err.name === 'ValidationError') { | |
| res.set({ | |
| 'Cache-Control': 'no-store', | |
| 'Pragma': 'no-cache' | |
| }) | |
| res.status(400).json({ | |
| error: 'validation_error', | |
| error_description: err.message, | |
| errors: err.errors | |
| }) | |
| // 400 Bad Request | |
| } else if (err.statusCode === 400) { | |
| res.set({ | |
| 'Cache-Control': 'no-store', | |
| 'Pragma': 'no-cache' | |
| }) | |
| res.status(400).json({ | |
| error: errorName, | |
| error_description: errorDescription, | |
| 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="' + errorName + '", ' + | |
| 'error_description="' + errorDescription + '"' | |
| }) | |
| res.status(401).send('Unauthorized<br><br>' + errorDescription) | |
| // 403 Forbidden | |
| } else if (err.statusCode === 403) { | |
| message = 'Forbidden' | |
| if (req.app.get('env') === 'development') { | |
| message += '<br><br>' + errorDescription | |
| } | |
| res.status(403).send(message) | |
| // 500 Internal Server Error | |
| } else { | |
| var statusCode = err.statusCode || 500 | |
| message = (err.statusCode && err.message) || 'Internal Server Error' | |
| if (req.app.get('env') === 'development') { | |
| message += '<br><br>' + errorDescription | |
| } | |
| res.status(statusCode).send(message) | |
| } | |
| } | |
| /** | |
| * Exports | |
| */ | |
| module.exports = error |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment