Skip to content

Commit 6b2ac32

Browse files
committed
Move the error logic out of the consumer middlewares
1 parent cd3d5a6 commit 6b2ac32

File tree

10 files changed

+185
-231
lines changed

10 files changed

+185
-231
lines changed

lib/consumer/express.js

Lines changed: 31 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ var express = require('express')
33
var qs = require('qs')
44

55
var config = require('../config')
6-
var flows = {
7-
1: require('../flow/oauth1'),
8-
2: require('../flow/oauth2'),
9-
response: require('../response')
10-
}
6+
var oauth1 = require('../flow/oauth1')
7+
var oauth2 = require('../flow/oauth2')
8+
var response = require('../response')
119

1210

1311
module.exports = function (_config) {
@@ -58,86 +56,76 @@ module.exports = function (_config) {
5856
})
5957

6058
function connect (req, res) {
61-
var grant = req.session.grant
62-
var provider = config.provider(app.config, grant)
63-
var flow = flows[provider.oauth]
59+
var session = req.session.grant
60+
var provider = config.provider(app.config, session)
6461

6562
var transport = (data) => {
6663
if (!provider.callback) {
6764
res.end(qs.stringify(data))
6865
}
6966
else if (!provider.transport || provider.transport === 'querystring') {
70-
res.redirect((provider.callback || '') + '?' + qs.stringify(data))
67+
res.redirect(`${provider.callback}?${qs.stringify(data)}`)
7168
}
7269
else if (provider.transport === 'session') {
73-
req.session.grant.response = data
74-
res.redirect(provider.callback || '')
70+
session.response = data
71+
res.redirect(provider.callback)
7572
}
7673
}
77-
var success = (url) => res.redirect(url)
78-
var error = (err) => transport({error: err.body})
7974

8075
if (/^1$/.test(provider.oauth)) {
81-
flow.request(provider)
76+
oauth1.request(provider)
8277
.then(({body}) => {
83-
grant.request = body
84-
flow.authorize(provider, body)
85-
.then(success)
86-
.catch(error)
78+
session.request = body
79+
oauth1.authorize(provider, body)
80+
.then((url) => res.redirect(url))
81+
.catch(transport)
8782
})
88-
.catch(error)
83+
.catch(transport)
8984
}
9085

9186
else if (/^2$/.test(provider.oauth)) {
92-
grant.state = provider.state
93-
flow.authorize(provider)
94-
.then(success)
95-
.catch(error)
87+
session.state = provider.state
88+
oauth2.authorize(provider)
89+
.then((url) => res.redirect(url))
90+
.catch(transport)
9691
}
9792

9893
else {
99-
error({body: 'Grant: missing or misconfigured provider'})
94+
transport({error: 'Grant: missing or misconfigured provider'})
10095
}
10196
}
10297

10398
app.get('/connect/:provider/callback', (req, res) => {
104-
var grant = req.session.grant || {}
105-
var provider = config.provider(app.config, grant)
106-
var flow = flows[provider.oauth]
99+
var session = req.session.grant
100+
var provider = config.provider(app.config, session)
107101

108102
var transport = (data) => {
109103
if (!provider.callback) {
110104
res.end(qs.stringify(data))
111105
}
112106
else if (!provider.transport || provider.transport === 'querystring') {
113-
res.redirect((provider.callback || '') + '?' + qs.stringify(data))
107+
res.redirect(`${provider.callback}?${qs.stringify(data)}`)
114108
}
115109
else if (provider.transport === 'session') {
116-
req.session.grant.response = data
117-
res.redirect(provider.callback || '')
110+
session.response = data
111+
res.redirect(provider.callback)
118112
}
119113
}
120-
var success = (data) => transport(data)
121-
var error = (err) => transport({error: err.body})
122114

123115
if (/^1$/.test(provider.oauth)) {
124-
flow.access(provider, grant.request, req.query)
125-
.then(({body}) => {
126-
success(flows.response(provider, body))
127-
})
128-
.catch(error)
116+
oauth1.access(provider, session.request, req.query)
117+
.then(({body}) => transport(response(provider, body)))
118+
.catch(transport)
129119
}
130120

131121
else if (/^2$/.test(provider.oauth)) {
132-
flow.access(provider, req.query, grant)
133-
.then(({body}) => {
134-
success(flows.response(provider, body))
135-
})
136-
.catch(error)
122+
oauth2.access(provider, req.query, session)
123+
.then(({body}) => transport(response(provider, body)))
124+
.catch(transport)
137125
}
138126

139127
else {
140-
error({body: 'Grant: missing session or misconfigured provider'})
128+
transport({error: 'Grant: missing session or misconfigured provider'})
141129
}
142130
})
143131

lib/consumer/hapi.js

Lines changed: 33 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ var urlib = require('url')
33
var qs = require('qs')
44

55
var config = require('../config')
6-
var flows = {
7-
1: require('../flow/oauth1'),
8-
2: require('../flow/oauth2'),
9-
response: require('../response')
10-
}
6+
var oauth1 = require('../flow/oauth1')
7+
var oauth2 = require('../flow/oauth2')
8+
var response = require('../response')
119

1210

1311
module.exports = function (_config) {
@@ -49,56 +47,52 @@ module.exports = function (_config) {
4947
})
5048

5149
function connect (req, res) {
52-
var grant = (req.session || req.yar).get('grant')
53-
var provider = config.provider(app.config, grant)
54-
var flow = flows[provider.oauth]
50+
var session = (req.session || req.yar).get('grant')
51+
var provider = config.provider(app.config, session)
5552

5653
var transport = (data) => {
5754
if (!provider.callback) {
5855
res(qs.stringify(data))
5956
}
6057
else if (!provider.transport || provider.transport === 'querystring') {
61-
res.redirect((provider.callback || '') + '?' + qs.stringify(data))
58+
res.redirect(`${provider.callback}?${qs.stringify(data)}`)
6259
}
6360
else if (provider.transport === 'session') {
64-
grant.response = data
65-
;(req.session || req.yar).set('grant', grant)
66-
res.redirect(provider.callback || '')
61+
session.response = data
62+
;(req.session || req.yar).set('grant', session)
63+
res.redirect(provider.callback)
6764
}
6865
}
69-
var success = (url) => res.redirect(url)
70-
var error = (err) => transport({error: err.body})
7166

7267
if (/^1$/.test(provider.oauth)) {
73-
flow.request(provider)
68+
oauth1.request(provider)
7469
.then(({body}) => {
75-
grant.request = body
76-
flow.authorize(provider, body)
77-
.then(success)
78-
.catch(error)
70+
session.request = body
71+
oauth1.authorize(provider, body)
72+
.then((url) => res.redirect(url))
73+
.catch(transport)
7974
})
80-
.catch(error)
75+
.catch(transport)
8176
}
8277

8378
else if (/^2$/.test(provider.oauth)) {
84-
grant.state = provider.state
85-
flow.authorize(provider)
86-
.then(success)
87-
.catch(error)
79+
session.state = provider.state
80+
oauth2.authorize(provider)
81+
.then((url) => res.redirect(url))
82+
.catch(transport)
8883
}
8984

9085
else {
91-
error({body: 'Grant: missing or misconfigured provider'})
86+
transport({error: 'Grant: missing or misconfigured provider'})
9287
}
9388
}
9489

9590
server.route({
9691
method: 'GET',
9792
path: '/connect/{provider}/callback',
9893
handler: (req, res) => {
99-
var grant = (req.session || req.yar).get('grant') || {}
100-
var provider = config.provider(app.config, grant)
101-
var flow = flows[provider.oauth]
94+
var session = (req.session || req.yar).get('grant') || {}
95+
var provider = config.provider(app.config, session)
10296
var query = (parseInt(server.version.split('.')[0]) >= 12)
10397
? qs.parse(urlib.parse(req.url, false).query) // #2985
10498
: req.query
@@ -108,35 +102,33 @@ module.exports = function (_config) {
108102
res(qs.stringify(data))
109103
}
110104
else if (!provider.transport || provider.transport === 'querystring') {
111-
res.redirect((provider.callback || '') + '?' + qs.stringify(data))
105+
res.redirect(`${provider.callback}?${qs.stringify(data)}`)
112106
}
113107
else if (provider.transport === 'session') {
114-
grant.response = data
115-
;(req.session || req.yar).set('grant', grant)
116-
res.redirect(provider.callback || '')
108+
session.response = data
109+
;(req.session || req.yar).set('grant', session)
110+
res.redirect(provider.callback)
117111
}
118112
}
119-
var success = (data) => transport(data)
120-
var error = (err) => transport({error: err.body})
121113

122114
if (/^1$/.test(provider.oauth)) {
123-
flow.access(provider, grant.request, query)
115+
oauth1.access(provider, session.request, query)
124116
.then(({body}) => {
125-
success(flows.response(provider, body))
117+
transport(response(provider, body))
126118
})
127-
.catch(error)
119+
.catch(transport)
128120
}
129121

130122
else if (/^2$/.test(provider.oauth)) {
131-
flow.access(provider, query, grant)
123+
oauth2.access(provider, query, session)
132124
.then(({body}) => {
133-
success(flows.response(provider, body))
125+
transport(response(provider, body))
134126
})
135-
.catch(error)
127+
.catch(transport)
136128
}
137129

138130
else {
139-
error({body: 'Grant: missing session or misconfigured provider'})
131+
transport({error: 'Grant: missing session or misconfigured provider'})
140132
}
141133
}
142134
})

0 commit comments

Comments
 (0)