@@ -25,7 +25,7 @@ module.exports.oidcIssuerHeader = oidcIssuerHeader
2525 * @param corsSettings
2626 * @returns {Router } Express router
2727 */
28- function api ( corsSettings ) {
28+ function api ( corsSettings , oidcRpClient ) {
2929 const router = express . Router ( '/' )
3030
3131 if ( corsSettings ) {
@@ -36,7 +36,7 @@ function api (corsSettings) {
3636 // (req, res, next) => {
3737 // // const userServer = req.body.oidcServer
3838 // })
39- router . get ( '/rp' , rpCallback )
39+ router . get ( '/rp' , authCallback ( oidcRpClient ) , authSessionInit , rpCallback ( oidcRpClient ) )
4040 // router.get('/signout', (req, res, next) => {
4141 // req.session.userId = null
4242 // req.session.identified = false
@@ -104,6 +104,9 @@ function authSessionInit (req, res, next) {
104104 }
105105 debug . oidc ( 'authSessionInit: starting up user session, recording userId' )
106106 var webId = req . userInfo . profile
107+ if ( ! webId ) {
108+ debug . oidc ( 'Error signing in: User\'s contains no WebId in the .profile' )
109+ }
107110 req . session . userId = webId
108111 req . session . identified = true
109112 debug . oidc ( 'WebId: ' + webId )
@@ -170,11 +173,49 @@ function loadAuthClient (oidcRpClient) {
170173 }
171174}
172175
173- function rpCallback ( req , res , next ) {
174- console . log ( 'In authRp handler:' )
175- if ( req . session . returnToUrl ) {
176- console . log ( ' Redirecting to ' + req . session . returnToUrl )
177- return res . redirect ( 302 , req . session . returnToUrl )
176+ function authCallback ( oidcRpClient ) {
177+ return ( req , res , next ) => {
178+ debug . oidc ( 'in authCallback():' )
179+ const tokenOptions = {
180+ code : req . query . code
181+ }
182+ var accessToken
183+ debug . oidc ( 'code: ' + req . query . code )
184+ oidcRpClient . trustedClient . client . token ( tokenOptions )
185+ . then ( ( tokenResult ) => {
186+ const verifyOptions = {
187+ allowNoToken : true ,
188+ loadUserInfo : true
189+ }
190+ accessToken = tokenResult . access_token
191+ debug . oidc ( 'Verifying token' )
192+ return oidcRpClient . trustedClient . verifyToken ( req , accessToken , verifyOptions )
193+ } )
194+ . then ( ( ) => {
195+ return oidcRpClient . trustedClient . client . userInfo ( { token : accessToken } )
196+ } )
197+ . then ( function ( userInfo ) {
198+ req . userInfo = userInfo
199+ next ( )
200+ } )
201+ . catch ( ( err ) => {
202+ debug . oidc ( err )
203+ next ( err )
204+ } )
205+ }
206+ }
207+
208+ function rpCallback ( oidcRpClient ) {
209+ return ( req , res , next ) => {
210+ debug . oidc ( 'In authRp handler:' )
211+
212+ if ( req . session . returnToUrl ) {
213+ let returnToUrl = req . session . returnToUrl
214+ debug . oidc ( ' Redirecting to ' + returnToUrl )
215+ delete req . session . returnToUrl
216+ return res . redirect ( 302 , returnToUrl )
217+ }
218+ res . send ( 'OK' )
219+ // next()
178220 }
179- res . send ( 'OK' )
180221}
0 commit comments