70 lines
1.9 KiB
JavaScript
70 lines
1.9 KiB
JavaScript
|
|
var {compose, dcopy} = require('./util')
|
|
var _config = require('./config')
|
|
var oauth1 = require('./flow/oauth1')
|
|
var oauth2 = require('./flow/oauth2')
|
|
|
|
|
|
var defaults = (config) => ({method, params, query, body, state, session}) => {
|
|
method = method.toUpperCase()
|
|
params = dcopy(params || {})
|
|
query = dcopy(query || {})
|
|
body = dcopy(body || {})
|
|
state = dcopy(state || {})
|
|
session = dcopy(params.override === 'callback' ? (session || {}) : {})
|
|
|
|
if (params.override !== 'callback') {
|
|
session.provider = params.provider
|
|
|
|
if (params.override) {
|
|
session.override = params.override
|
|
}
|
|
if (method === 'GET' && Object.keys(query).length) {
|
|
session.dynamic = query
|
|
}
|
|
else if (method === 'POST' && Object.keys(body).length) {
|
|
session.dynamic = body
|
|
}
|
|
}
|
|
|
|
var provider = _config.provider(config, session, state)
|
|
return {provider, input: {method, params, query, body, state, session}}
|
|
}
|
|
|
|
var connect = ({request}) => ({provider, input, input:{session}, output}) =>
|
|
provider.oauth === 1
|
|
? compose(
|
|
oauth1.request({request}),
|
|
({provider, input, input:{session}, output}) => (
|
|
session.request = output,
|
|
oauth1.authorize({provider, input, output})
|
|
)
|
|
)({provider, input})
|
|
|
|
: provider.oauth === 2
|
|
? (
|
|
session.state = provider.state,
|
|
session.nonce = provider.nonce,
|
|
session.code_verifier = provider.code_verifier,
|
|
oauth2.authorize({provider, input})
|
|
)
|
|
|
|
: (
|
|
output = {error: 'Grant: missing or misconfigured provider'},
|
|
{provider, input, output}
|
|
)
|
|
|
|
var callback = ({request}) => ({provider, input, output}) =>
|
|
provider.oauth === 1
|
|
? oauth1.access({request})
|
|
|
|
: provider.oauth === 2
|
|
? oauth2.access({request})
|
|
|
|
: ({provider, input, output}) => (
|
|
output = {error: 'Grant: missing session or misconfigured provider'},
|
|
{provider, input, output}
|
|
)
|
|
|
|
module.exports = {defaults, connect, callback}
|