44 */
55
66const express = require ( 'express' )
7- const debug = require ( '../../debug' )
8- const util = require ( '../../utils' )
9- const error = require ( '../../http-error' )
107const bodyParser = require ( 'body-parser' ) . urlencoded ( { extended : false } )
118
12- const SelectProviderRequest = require ( '../../requests/select-provider-request' )
13-
149const { 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
0 commit comments