diff --git a/src/oidc.js b/src/oidc.js index fb8369e98..35b4a36a3 100644 --- a/src/oidc.js +++ b/src/oidc.js @@ -270,7 +270,7 @@ function attachInteractionRoutes(routePrefix, app, provider) { try { const { uid, prompt, params, session } = await provider.interactionDetails(req, res); - debug(`interaction get uid:${uid} prompt.name:${prompt.name} client_id:${params.client_id} session:${session}`); + debug(`route interaction get uid:${uid} prompt.name:${prompt.name} client_id:${params.client_id} session:${session}`); const client = await provider.Client.find(params.client_id); @@ -278,6 +278,7 @@ function attachInteractionRoutes(routePrefix, app, provider) { case 'login': { return res.render('login', { client, + submitUrl: `${routePrefix}/interaction/${uid}/login`, uid, details: prompt.details, params, @@ -292,6 +293,7 @@ function attachInteractionRoutes(routePrefix, app, provider) { case 'consent': { return res.render('interaction', { client, + submitUrl: `${routePrefix}/interaction/${uid}/confirm`, uid, details: prompt.details, params, @@ -315,7 +317,7 @@ function attachInteractionRoutes(routePrefix, app, provider) { try { const { uid, prompt: { name } } = await provider.interactionDetails(req, res); - debug(`interaction login post uid:${uid} prompt.name:${name} login:${req.body.login}`); + debug(`route interaction login post uid:${uid} prompt.name:${name} login:${req.body.login}`); assert.equal(name, 'login'); const account = await Account.findByLogin(req.body.login); @@ -337,7 +339,7 @@ function attachInteractionRoutes(routePrefix, app, provider) { const interactionDetails = await provider.interactionDetails(req, res); const { uid, prompt: { name, details }, params, session: { accountId } } = interactionDetails; - debug(`interaction confirm post uid:${uid} prompt.name:${name} accountId:${accountId}`); + debug(`route interaction confirm post uid:${uid} prompt.name:${name} accountId:${accountId}`); assert.equal(name, 'consent'); @@ -384,7 +386,7 @@ function attachInteractionRoutes(routePrefix, app, provider) { }); app.get(routePrefix + '/interaction/:uid/abort', setNoCache, async (req, res, next) => { - debug(`interaction abort`); + debug(`route interaction abort`); try { const result = { @@ -419,6 +421,9 @@ async function getProvider(routePrefix) { return `${routePrefix}/interaction/${interaction.uid}`; } }, + features: { + devInteractions: { enabled: false } + }, clients: [{ client_id: 'foo', client_secret: 'bar', diff --git a/src/oidc_templates/interaction.ejs b/src/oidc_templates/interaction.ejs new file mode 100644 index 000000000..755bf9a40 --- /dev/null +++ b/src/oidc_templates/interaction.ejs @@ -0,0 +1,16 @@ + + + + +Consent + + + + +

Cloudron Login

+ +
+ +
+ + diff --git a/src/oidc_templates/login.ejs b/src/oidc_templates/login.ejs new file mode 100644 index 000000000..458649291 --- /dev/null +++ b/src/oidc_templates/login.ejs @@ -0,0 +1,24 @@ + + + + +Cloudron OpenID Connect Login + + + + +

Cloudron Login

+ +
+
+ + +
+
+ + +
+ +
+ + diff --git a/src/server.js b/src/server.js index 4babf9606..1fa700714 100644 --- a/src/server.js +++ b/src/server.js @@ -15,6 +15,7 @@ const assert = require('assert'), http = require('http'), middleware = require('./middleware'), oidc = require('./oidc.js'), + path = require('path'), routes = require('./routes/index.js'), safe = require('safetydance'), settings = require('./settings.js'), @@ -374,6 +375,8 @@ async function initializeExpressSync() { const oidcProvider = await oidc.getProvider(oidcPrefix); oidc.attachInteractionRoutes(oidcPrefix, app, oidcProvider); app.use(oidcPrefix, oidcProvider.callback()); + app.set('views', path.join(__dirname, 'oidc_templates')); + app.set('view engine', 'ejs'); // disable server socket "idle" timeout. we use the timeout middleware to handle timeouts on a route level // we rely on nginx for timeouts on the TCP level (see client_header_timeout)