Skip to content

Commit 478a354

Browse files
Extract SelectProviderRequest and auth callback code to Auth Manager
1 parent a5906b8 commit 478a354

File tree

6 files changed

+10
-478
lines changed

6 files changed

+10
-478
lines changed

bin/lib/init.js

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,6 @@ module.exports = function (program) {
3030

3131
// Prompt to the user
3232
inquirer.prompt(questions)
33-
// .then((answers) => {
34-
// let store = new KVPFileStore()
35-
// return store.createCollection('clients')
36-
// .then(() => {
37-
// return answers
38-
// })
39-
// })
4033
.then((answers) => {
4134
// setting email
4235
if (answers.useEmail) {

lib/api/authn/webid-oidc.js

Lines changed: 10 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,19 @@
44
*/
55

66
const express = require('express')
7-
const debug = require('../../debug')
8-
const util = require('../../utils')
9-
const error = require('../../http-error')
107
const bodyParser = require('body-parser').urlencoded({ extended: false })
118

12-
const SelectProviderRequest = require('../../requests/select-provider-request')
13-
149
const { LoginByPasswordRequest } = require('../../requests/login-request')
1510

16-
const { LogoutRequest } = require('oidc-auth-manager').AuthHostAPI
11+
const {
12+
AuthCallbackRequest,
13+
LogoutRequest,
14+
SelectProviderRequest
15+
} = require('oidc-auth-manager').handlers
1716

1817
/**
1918
* Returns a router with OIDC Relying Party and Identity Provider middleware:
2019
*
21-
* 1. Adds a Relying Party (RP) callback handler on '/api/oidc/rp/:issuer_id'
22-
* 2. Sets up a static content handler for signin/signup apps
23-
* 3. Adds a set of Identity Provider (OP) endpoints on '/'
24-
*
25-
* Usage (in create-app.js):
26-
*
27-
* ```
28-
* app.use('/', oidcHandler.api(oidc))
29-
* ```
3020
* @method middleware
3121
*
3222
* @param oidc {OidcManager}
@@ -37,30 +27,18 @@ function middleware (oidc) {
3727
const router = express.Router('/')
3828

3929
// User-facing Authentication API
40-
router.get('/api/auth/select-provider', (req, res) => {
41-
let locals = req.app.locals
42-
let serverUri = locals.host.serverUri
43-
res.render('auth/select-provider', { serverUri })
44-
})
45-
router.post('/api/auth/select-provider', bodyParser, selectProvider)
30+
router.get('/api/auth/select-provider', SelectProviderRequest.get)
31+
router.post('/api/auth/select-provider', bodyParser, SelectProviderRequest.post)
4632

4733
router.get(['/login', '/signin'], LoginByPasswordRequest.get)
4834
router.post(['/login', '/signin'], bodyParser, LoginByPasswordRequest.post)
4935

5036
router.get('/logout', LogoutRequest.handle)
5137

52-
router.get('/goodbye', (req, res) => {
53-
res.render('auth/goodbye')
54-
})
38+
router.get('/goodbye', (req, res) => { res.render('auth/goodbye') })
5539

5640
// The relying party callback is called at the end of the OIDC signin process
57-
router.get('/api/oidc/rp/:issuer_id', (req, res, next) => {
58-
// Exchange authorization code for id token
59-
authCodeFlowCallback(oidc, req)
60-
// Redirect the user back to returnToUrl
61-
.then(() => { resumeUserFlow(req, res) })
62-
.catch(next)
63-
})
41+
router.get('/api/oidc/rp/:issuer_id', AuthCallbackRequest.get)
6442

6543
// Initialize the OIDC Identity Provider routes/api
6644
// router.get('/.well-known/openid-configuration', discover.bind(provider))
@@ -77,84 +55,4 @@ function middleware (oidc) {
7755
return router
7856
}
7957

80-
function selectProvider (req, res, next) {
81-
return SelectProviderRequest.handle(req, res)
82-
.catch(error => {
83-
error.status = error.status || 400
84-
next(error)
85-
})
86-
}
87-
88-
function authCodeFlowCallback (oidc, req) {
89-
debug.oidc('in authCodeFlowCallback()')
90-
91-
if (!req.params || !req.params.issuer_id) {
92-
return Promise.reject(error(400, 'Invalid auth response uri - missing issuer id'))
93-
}
94-
95-
let issuer = getIssuerId(req)
96-
97-
return oidc.clients.clientForIssuer(issuer)
98-
.then(client => {
99-
return validateResponse(client, req)
100-
})
101-
.then(response => {
102-
initSessionUserAuth(response, req)
103-
})
104-
.catch((err) => {
105-
debug.oidc(err)
106-
throw error(400, err)
107-
})
108-
}
109-
110-
function getIssuerId (req = {}) {
111-
return req.params && decodeURIComponent(req.params.issuer_id)
112-
}
113-
114-
function validateResponse (client, req) {
115-
let url = util.fullUrlForReq(req)
116-
return client.validateResponse(url, req.session)
117-
}
118-
119-
function initSessionUserAuth (authResponse, req) {
120-
let webId = extractWebId(authResponse)
121-
req.session.accessToken = authResponse.params.access_token
122-
req.session.refreshToken = authResponse.params.refresh_token
123-
req.session.userId = webId
124-
req.session.identified = true
125-
}
126-
127-
function extractWebId (authResponse) {
128-
return authResponse.decoded.payload.sub
129-
}
130-
131-
/**
132-
* Redirects the user back to their original requested resource, at the end
133-
* of the OIDC authentication process.
134-
* @method resumeUserFlow
135-
*/
136-
function resumeUserFlow (req, res) {
137-
debug.oidc('In resumeUserFlow handler:')
138-
139-
if (req.session.returnToUrl) {
140-
let returnToUrl = req.session.returnToUrl
141-
// if (req.session.accessToken) {
142-
// returnToUrl += '?access_token=' + req.session.accessToken
143-
// }
144-
debug.oidc(' Redirecting to ' + returnToUrl)
145-
delete req.session.returnToUrl
146-
return res.redirect(302, returnToUrl)
147-
}
148-
res.send('Resume User Flow (failed)')
149-
}
150-
151-
module.exports = {
152-
middleware,
153-
selectProvider,
154-
extractWebId,
155-
authCodeFlowCallback,
156-
getIssuerId,
157-
initSessionUserAuth,
158-
resumeUserFlow,
159-
validateResponse
160-
}
58+
module.exports.middleware = middleware

lib/debug.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,3 @@ exports.subscription = debug('solid:subscription')
1212
exports.container = debug('solid:container')
1313
exports.accounts = debug('solid:accounts')
1414
exports.ldp = debug('solid:ldp')
15-
exports.oidc = debug('solid:oidc')

0 commit comments

Comments
 (0)