diff --git a/changelog.d/7152.feature b/changelog.d/7152.feature
deleted file mode 100644
index fafa79c7e7..0000000000
--- a/changelog.d/7152.feature
+++ /dev/null
@@ -1 +0,0 @@
-Improve the support for SSO authentication on the login fallback page.
diff --git a/synapse/static/client/login/index.html b/synapse/static/client/login/index.html
index 712b0e3980..bcb6bc6bb7 100644
--- a/synapse/static/client/login/index.html
+++ b/synapse/static/client/login/index.html
@@ -9,7 +9,7 @@
-
+ Log in with one of the following methods
diff --git a/synapse/static/client/login/js/login.js b/synapse/static/client/login/js/login.js
index debe464371..276c271bbe 100644
--- a/synapse/static/client/login/js/login.js
+++ b/synapse/static/client/login/js/login.js
@@ -1,41 +1,37 @@
window.matrixLogin = {
endpoint: location.origin + "/_matrix/client/r0/login",
serverAcceptsPassword: false,
+ serverAcceptsCas: false,
serverAcceptsSso: false,
};
-var title_pre_auth = "Log in with one of the following methods";
-var title_post_auth = "Logging in...";
-
var submitPassword = function(user, pwd) {
console.log("Logging in with password...");
- set_title(title_post_auth);
var data = {
type: "m.login.password",
user: user,
password: pwd,
};
$.post(matrixLogin.endpoint, JSON.stringify(data), function(response) {
+ show_login();
matrixLogin.onLogin(response);
}).error(errorFunc);
};
var submitToken = function(loginToken) {
console.log("Logging in with login token...");
- set_title(title_post_auth);
var data = {
type: "m.login.token",
token: loginToken
};
$.post(matrixLogin.endpoint, JSON.stringify(data), function(response) {
+ show_login();
matrixLogin.onLogin(response);
}).error(errorFunc);
};
var errorFunc = function(err) {
- // We want to show the error to the user rather than redirecting immediately to the
- // SSO portal (if SSO is the only login option), so we inhibit the redirect.
- show_login(true);
+ show_login();
if (err.responseJSON && err.responseJSON.error) {
setFeedbackString(err.responseJSON.error + " (" + err.responseJSON.errcode + ")");
@@ -49,33 +45,26 @@ var setFeedbackString = function(text) {
$("#feedback").text(text);
};
-var show_login = function(inhibit_redirect) {
+var show_login = function() {
+ $("#loading").hide();
+
var this_page = window.location.origin + window.location.pathname;
$("#sso_redirect_url").val(this_page);
- // If inhibit_redirect is false, and SSO is the only supported login method, we can
- // redirect straight to the SSO page
- if (matrixLogin.serverAcceptsSso) {
- if (!inhibit_redirect && !matrixLogin.serverAcceptsPassword) {
- $("#sso_form").submit();
- return;
- }
-
- // Otherwise, show the SSO form
- $("#sso_form").show();
- }
-
if (matrixLogin.serverAcceptsPassword) {
$("#password_flow").show();
}
- if (!matrixLogin.serverAcceptsPassword && !matrixLogin.serverAcceptsSso) {
- $("#no_login_types").show();
+ if (matrixLogin.serverAcceptsSso) {
+ $("#sso_flow").show();
+ } else if (matrixLogin.serverAcceptsCas) {
+ $("#sso_form").attr("action", "/_matrix/client/r0/login/cas/redirect");
+ $("#sso_flow").show();
}
- set_title(title_pre_auth);
-
- $("#loading").hide();
+ if (!matrixLogin.serverAcceptsPassword && !matrixLogin.serverAcceptsCas && !matrixLogin.serverAcceptsSso) {
+ $("#no_login_types").show();
+ }
};
var show_spinner = function() {
@@ -85,15 +74,17 @@ var show_spinner = function() {
$("#loading").show();
};
-var set_title = function(title) {
- $("#title").text(title);
-};
var fetch_info = function(cb) {
$.get(matrixLogin.endpoint, function(response) {
var serverAcceptsPassword = false;
+ var serverAcceptsCas = false;
for (var i=0; i