summary refs log tree commit diff
diff options
context:
space:
mode:
authorRichard van der Hoff <richard@matrix.org>2020-03-27 20:18:56 +0000
committerRichard van der Hoff <richard@matrix.org>2020-04-03 11:16:41 +0100
commit8d4cbdeaa9765ae0d87ec82b053f12ed8162f6f5 (patch)
treebc029b6edf06d41a6ff93762b2d6fbf224601f16
parentMerge tag 'v1.12.1' (diff)
downloadsynapse-8d4cbdeaa9765ae0d87ec82b053f12ed8162f6f5.tar.xz
Revert "Improve the UX of the login fallback when using SSO (#7152)"
This was incorrectly merged to `master` instead of develop.

This reverts commit 90246344e340bce3417fb330da6be9338a701c5c.
-rw-r--r--changelog.d/7152.feature1
-rw-r--r--synapse/static/client/login/index.html2
-rw-r--r--synapse/static/client/login/js/login.js51
3 files changed, 22 insertions, 32 deletions
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 @@
 <body onload="matrixLogin.onLoad()">
     <center>
         <br/>
-        <h1 id="title"></h1>
+        <h1>Log in with one of the following methods</h1>
 
         <span id="feedback" style="color: #f00"></span>
 
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<response.flows.length; i++) {
             var flow = response.flows[i];
+            if ("m.login.cas" === flow.type) {
+                matrixLogin.serverAcceptsCas = true;
+                console.log("Server accepts CAS");
+            }
             if ("m.login.sso" === flow.type) {
                 matrixLogin.serverAcceptsSso = true;
                 console.log("Server accepts SSO");
@@ -111,7 +102,7 @@ var fetch_info = function(cb) {
 matrixLogin.onLoad = function() {
     fetch_info(function() {
         if (!try_token()) {
-            show_login(false);
+            show_login();
         }
     });
 };