diff --git a/src/oauth2views/header.ejs b/src/oauth2views/header.ejs
index 3d9d77ed6..0b9e36a5b 100644
--- a/src/oauth2views/header.ejs
+++ b/src/oauth2views/header.ejs
@@ -26,3 +26,13 @@
+
+
+
diff --git a/src/oauth2views/login.ejs b/src/oauth2views/login.ejs
index a7b62234e..e45e3351f 100644
--- a/src/oauth2views/login.ejs
+++ b/src/oauth2views/login.ejs
@@ -7,7 +7,7 @@

-
Login to <%= applicationName %> on <%= cloudronName %>
+
Login to <%= applicationName %>
diff --git a/src/routes/oauth2.js b/src/routes/oauth2.js
index 7d433d59b..55349eb6d 100644
--- a/src/routes/oauth2.js
+++ b/src/routes/oauth2.js
@@ -148,6 +148,21 @@ session.ensureLoggedIn = function (redirectTo) {
};
};
+function renderTemplate(res, template, data) {
+ assert.strictEqual(typeof res, 'object');
+ assert.strictEqual(typeof template, 'string');
+ assert.strictEqual(typeof data, 'object');
+
+ settings.getCloudronName(function (error, cloudronName) {
+ if (error) console.error(error);
+
+ // amend details which the header expects
+ data.cloudronName = cloudronName || 'Cloudron';
+
+ res.render(template, data);
+ });
+}
+
function sendErrorPageOrRedirect(req, res, message) {
assert.strictEqual(typeof req, 'object');
assert.strictEqual(typeof res, 'object');
@@ -156,16 +171,19 @@ function sendErrorPageOrRedirect(req, res, message) {
debug('sendErrorPageOrRedirect: returnTo "%s".', req.query.returnTo, message);
if (typeof req.query.returnTo !== 'string') {
- res.render('error', {
+ renderTemplate(res, 'error', {
adminOrigin: config.adminOrigin(),
message: message
});
} else {
var u = url.parse(req.query.returnTo);
- if (!u.protocol || !u.host) return res.render('error', {
- adminOrigin: config.adminOrigin(),
- message: 'Invalid request. returnTo query is not a valid URI. ' + message
- });
+ if (!u.protocol || !u.host) {
+ renderTemplate(res, 'error', {
+ adminOrigin: config.adminOrigin(),
+ message: 'Invalid request. returnTo query is not a valid URI. ' + message
+ });
+ return;
+ }
res.redirect(util.format('%s//%s', u.protocol, u.host));
}
@@ -178,7 +196,7 @@ function sendError(req, res, message) {
assert.strictEqual(typeof res, 'object');
assert.strictEqual(typeof message, 'string');
- res.render('error', {
+ renderTemplate(res, 'error', {
adminOrigin: config.adminOrigin(),
message: message
});
@@ -191,49 +209,40 @@ function loginForm(req, res) {
var u = url.parse(req.session.returnTo, true);
if (!u.query.client_id) return sendErrorPageOrRedirect(req, res, 'Invalid login request. No client_id provided.');
- var cloudronName = '';
-
function render(applicationName, applicationLogo) {
- res.render('login', {
+ renderTemplate(res, 'login', {
adminOrigin: config.adminOrigin(),
csrf: req.csrfToken(),
- cloudronName: cloudronName,
applicationName: applicationName,
applicationLogo: applicationLogo,
error: req.query.error || null
});
}
- settings.getCloudronName(function (error, name) {
- if (error) return sendError(req, res, 'Internal Error');
+ clientdb.get(u.query.client_id, function (error, result) {
+ if (error) return sendError(req, res, 'Unknown OAuth client');
- cloudronName = name;
+ // Handle our different types of oauth clients
+ var appId = result.appId;
+ if (appId === constants.ADMIN_CLIENT_ID) {
+ return render(constants.ADMIN_NAME, '/api/v1/cloudron/avatar');
+ } else if (appId === constants.TEST_CLIENT_ID) {
+ return render(constants.TEST_NAME, '/api/v1/cloudron/avatar');
+ } else if (appId.indexOf('external-') === 0) {
+ return render('External Application', '/api/v1/cloudron/avatar');
+ } else if (appId.indexOf('addon-oauth') === 0) {
+ appId = appId.slice('addon-oauth'.length);
+ } else if (appId.indexOf('addon-simpleauth') === 0) {
+ appId = appId.slice('addon-simpleauth'.length);
+ } else if (appId.indexOf('proxy-') === 0) {
+ appId = appId.slice('proxy-'.length);
+ }
- clientdb.get(u.query.client_id, function (error, result) {
- if (error) return sendError(req, res, 'Unknown OAuth client');
+ appdb.get(appId, function (error, result) {
+ if (error) return sendErrorPageOrRedirect(req, res, 'Unknown Application for those OAuth credentials');
- // Handle our different types of oauth clients
- var appId = result.appId;
- if (appId === constants.ADMIN_CLIENT_ID) {
- return render(constants.ADMIN_NAME, '/api/v1/cloudron/avatar');
- } else if (appId === constants.TEST_CLIENT_ID) {
- return render(constants.TEST_NAME, '/api/v1/cloudron/avatar');
- } else if (appId.indexOf('external-') === 0) {
- return render('External Application', '/api/v1/cloudron/avatar');
- } else if (appId.indexOf('addon-oauth') === 0) {
- appId = appId.slice('addon-oauth'.length);
- } else if (appId.indexOf('addon-simpleauth') === 0) {
- appId = appId.slice('addon-simpleauth'.length);
- } else if (appId.indexOf('proxy-') === 0) {
- appId = appId.slice('proxy-'.length);
- }
-
- appdb.get(appId, function (error, result) {
- if (error) return sendErrorPageOrRedirect(req, res, 'Unknown Application for those OAuth credentials');
-
- var applicationName = result.location || config.fqdn();
- render(applicationName, '/api/v1/apps/' + result.id + '/icon');
- });
+ var applicationName = result.location || config.fqdn();
+ render(applicationName, '/api/v1/apps/' + result.id + '/icon');
});
});
}
@@ -261,7 +270,7 @@ function logout(req, res) {
// Form to enter email address to send a password reset request mail
// -> GET /api/v1/session/password/resetRequest.html
function passwordResetRequestSite(req, res) {
- res.render('password_reset_request', { adminOrigin: config.adminOrigin(), csrf: req.csrfToken() });
+ renderTemplate(res, 'password_reset_request', { adminOrigin: config.adminOrigin(), csrf: req.csrfToken() });
}
// This route is used for above form submission
@@ -285,7 +294,7 @@ function passwordResetRequest(req, res, next) {
// -> GET /api/v1/session/password/sent.html
function passwordSentSite(req, res) {
- res.render('password_reset_sent', { adminOrigin: config.adminOrigin() });
+ renderTemplate(res, 'password_reset_sent', { adminOrigin: config.adminOrigin() });
}
// -> GET /api/v1/session/password/setup.html
@@ -297,7 +306,12 @@ function passwordSetupSite(req, res, next) {
user.getByResetToken(req.query.reset_token, function (error, user) {
if (error) return next(new HttpError(401, 'Invalid reset_token'));
- res.render('password_setup', { adminOrigin: config.adminOrigin(), user: user, csrf: req.csrfToken(), resetToken: req.query.reset_token });
+ renderTemplate(res, 'password_setup', {
+ adminOrigin: config.adminOrigin(),
+ user: user,
+ csrf: req.csrfToken(),
+ resetToken: req.query.reset_token
+ });
});
}
@@ -310,7 +324,12 @@ function passwordResetSite(req, res, next) {
user.getByResetToken(req.query.reset_token, function (error, user) {
if (error) return next(new HttpError(401, 'Invalid reset_token'));
- res.render('password_reset', { adminOrigin: config.adminOrigin(), user: user, csrf: req.csrfToken(), resetToken: req.query.reset_token });
+ renderTemplate(res, 'password_reset', {
+ adminOrigin: config.adminOrigin(),
+ user: user,
+ csrf: req.csrfToken(),
+ resetToken: req.query.reset_token
+ });
});
}
@@ -345,7 +364,7 @@ var callback = [
session.ensureLoggedIn('/api/v1/session/login'),
function (req, res) {
debug('callback: with callback server ' + req.query.redirectURI);
- res.render('callback', { adminOrigin: config.adminOrigin(), callbackServer: req.query.redirectURI });
+ renderTemplate(res, 'callback', { adminOrigin: config.adminOrigin(), callbackServer: req.query.redirectURI });
}
];