diff --git a/routes/auth.js b/routes/auth.js
index fce1deb..b78b00e 100644
--- a/routes/auth.js
+++ b/routes/auth.js
@@ -7,11 +7,41 @@ app.get("/api/auth/whoami", (rreq,rres) => {
})
app.get("/api/auth/login", (rreq,rres) => {
- rres.send("Non functional endpoint")
+ rres.redirect(`${globalConfig.oidc.authorizeUrl}?client_id=${globalConfig.oidc.clientId}&response_type=code&scope=openid enstrayedapi&redirect_uri=${rreq.protocol}://${rreq.get("Host")}/api/auth/callback`)
})
app.get("/api/auth/callback", (rreq,rres) => {
- rres.send("Non functional endpoint")
+ fetch(globalConfig.oidc.tokenUrl, { // Call token endpoint at IdP using code provdided during callback
+ method: "POST",
+ headers: { "Content-Type": "application/x-www-form-urlencoded"},
+ body: `grant_type=authorization_code&code=${rreq.query.code}&redirect_uri=${rreq.protocol}://${rreq.get("Host")}/api/auth/callback&client_id=${globalConfig.oidc.clientId}&client_secret=${globalConfig.oidc.clientSecret}`
+ }).then(fetchRes1 => {
+ fetchRes1.json().then(fetchRes1 => { // Convert response to JSON then continue
+ if (fetchRes1.error) { // Fetch to token endpoint succeded but resulted in error, usually because the provided code is invalid
+ logRequest(rres,rreq,500,`Callback-Token-${fetchRes1.error}`)
+ rres.status(500).send(`An error occured during login, a token was not created.
500 Callback-Token-${fetchRes1.error}`)
+ } else { // Assumed success
+ fetch(globalConfig.oidc.userinfoUrl, { // Call userinfo endpoint at IdP using token provided during previous step
+ headers: { "Authorization": `Bearer ${fetchRes1.access_token}`}
+ }).then(fetchRes2 => {
+ if (fetchRes2.ok === false) { // Fetch to userinfo endpoint succeded but resulted in error (usually 401)
+ logRequest(rres,rreq,500,`Callback-Userinfo-${fetchRes2.status}`)
+ rres.status(500).send(`An error occured during login, a token was not created.
500 Callback-Userinfo-${fetchRes2.status}`)
+ } else {
+ fetchRes2.json().then(fetchRes2 => {
+ rres.send(fetchRes2)
+ })
+ }
+ }).catch(fetchErr2 => { // Fetch to userinfo endpoint failed for some other reason
+ logRequest(rres,rreq,500,`Callback-Fetch2-${fetchErr2}`)
+ rres.status(500).send(`An error occured during login, a token was not created.
500 Callback-Fetch2-${fetchErr2}`)
+ })
+ }
+ })
+ }).catch(fetchErr1 => { // Fetch to token endpoint failed for some other reason
+ logRequest(rres,rreq,500,`Callback-Fetch1-${fetchErr1}`)
+ rres.status(500).send(`An error occured during login, a token was not created.
500 Callback-Fetch1-${fetchErr1}`)
+ })
})
app.post("/api/auth/token", (rreq,rres) => {
diff --git a/routes/debug.js b/routes/debug.js
index c155ad5..c5c350e 100644
--- a/routes/debug.js
+++ b/routes/debug.js
@@ -12,4 +12,8 @@ app.get("/api/debugtokencheck", (rreq,rres) => {
})
})
+app.get("/api/debugurl", (rreq,rres) => {
+ rres.send(`${rreq.protocol}://${rreq.get("Host")}`)
+})
+
export { app }
\ No newline at end of file