Browse Source

[Web] Fix U2F authentication, fixes #3468

andryyy 5 years ago
parent
commit
942ddcc212
1 changed files with 40 additions and 36 deletions
  1. 40 36
      data/web/json_api.php

+ 40 - 36
data/web/json_api.php

@@ -235,44 +235,48 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
           ));
           ));
           exit();
           exit();
         }
         }
+        switch ($category) {
+          case "u2f-registration":
+            header('Content-Type: application/javascript');
+            if (($_SESSION["mailcow_cc_role"] == "admin" || $_SESSION["mailcow_cc_role"] == "domainadmin") && $_SESSION["mailcow_cc_username"] == $object) {
+              list($req, $sigs) = $u2f->getRegisterData(get_u2f_registrations($object));
+              $_SESSION['regReq'] = json_encode($req);
+              $_SESSION['regSigs'] = json_encode($sigs);
+              echo 'var req = ' . json_encode($req) . ';';
+              echo 'var registeredKeys = ' . json_encode($sigs) . ';';
+              echo 'var appId = req.appId;';
+              echo 'var registerRequests = [{version: req.version, challenge: req.challenge}];';
+              return;
+            }
+            else {
+              return;
+            }
+          break;
+          case "u2f-authentication":
+            header('Content-Type: application/javascript');
+            if (isset($_SESSION['pending_mailcow_cc_username']) && $_SESSION['pending_mailcow_cc_username'] == $object) {
+              $auth_data = $u2f->getAuthenticateData(get_u2f_registrations($object));
+              $challenge = $auth_data[0]->challenge;
+              $appId = $auth_data[0]->appId;
+              foreach ($auth_data as $each) {
+                $key = array(); // Empty array
+                $key['version']   = $each->version;
+                $key['keyHandle'] = $each->keyHandle;
+                $registeredKey[]  = $key;
+              }
+              $_SESSION['authReq']  = json_encode($auth_data);
+              echo 'var appId = "' . $appId . '";';
+              echo 'var challenge = ' . json_encode($challenge) . ';';
+              echo 'var registeredKeys = ' . json_encode($registeredKey) . ';';
+              return;
+            }
+            else {
+              return;
+            }
+          break;
+        }
         if (!isset($_SESSION['pending_mailcow_cc_username'])) {
         if (!isset($_SESSION['pending_mailcow_cc_username'])) {
           switch ($category) {
           switch ($category) {
-            case "u2f-registration":
-              header('Content-Type: application/javascript');
-              if (($_SESSION["mailcow_cc_role"] == "admin" || $_SESSION["mailcow_cc_role"] == "domainadmin") && $_SESSION["mailcow_cc_username"] == $object) {
-                list($req, $sigs) = $u2f->getRegisterData(get_u2f_registrations($object));
-                $_SESSION['regReq'] = json_encode($req);
-                $_SESSION['regSigs'] = json_encode($sigs);
-                echo 'var req = ' . json_encode($req) . ';';
-                echo 'var registeredKeys = ' . json_encode($sigs) . ';';
-                echo 'var appId = req.appId;';
-                echo 'var registerRequests = [{version: req.version, challenge: req.challenge}];';
-              }
-              else {
-                return;
-              }
-            break;
-            case "u2f-authentication":
-              header('Content-Type: application/javascript');
-              if (isset($_SESSION['pending_mailcow_cc_username']) && $_SESSION['pending_mailcow_cc_username'] == $object) {
-                $auth_data = $u2f->getAuthenticateData(get_u2f_registrations($object));
-                $challenge = $auth_data[0]->challenge;
-                $appId = $auth_data[0]->appId;
-                foreach ($auth_data as $each) {
-                  $key = array(); // Empty array
-                  $key['version']   = $each->version;
-                  $key['keyHandle'] = $each->keyHandle;
-                  $registeredKey[]  = $key;
-                }
-                $_SESSION['authReq']  = json_encode($auth_data);
-                echo 'var appId = "' . $appId . '";';
-                echo 'var challenge = ' . json_encode($challenge) . ';';
-                echo 'var registeredKeys = ' . json_encode($registeredKey) . ';';
-              }
-              else {
-                return;
-              }
-            break;
             case "rspamd":
             case "rspamd":
               switch ($object) {
               switch ($object) {
                 case "actions":
                 case "actions":