This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-ui.git

commit 2429a734217cb70135a9c28ea394b0b5a4b5644c
Author: Alex Heneveld <[email protected]>
AuthorDate: Thu Jun 27 13:52:23 2024 +0100

    add logging and extra headers to login form
---
 ui-modules/login/app/views/main/main.controller.js | 32 ++++++++++++++++++----
 1 file changed, 26 insertions(+), 6 deletions(-)

diff --git a/ui-modules/login/app/views/main/main.controller.js 
b/ui-modules/login/app/views/main/main.controller.js
index d35c6518..a8f6d2bd 100644
--- a/ui-modules/login/app/views/main/main.controller.js
+++ b/ui-modules/login/app/views/main/main.controller.js
@@ -27,7 +27,13 @@ import './login-failed.less';
 const MODULE_NAME = 'states.login';
 
 angular.module(MODULE_NAME, [uiRouter, serverApi])
-    .config(['$stateProvider', loginStateConfig]);
+    .config(['$stateProvider', loginStateConfig])
+    .config(['$httpProvider', function($httpProvider) {
+      // Sometimes this can help prevent the auth popup from appearing,
+      // by indicating the apache and nginx that WWW-Authenticate should be 
omitted.
+      // Not necessary because Brooklyn server rewrites BASIC where necessary, 
but potentially useful.
+      $httpProvider.defaults.headers.common["X-Requested-With"] = 
'XMLHttpRequest';
+    }]);
 
 export default MODULE_NAME;
 
@@ -52,13 +58,27 @@ export function loginStateController($scope, $http, 
$window, $uibModal, brBrandI
     let loginController = this;
     loginController.error = {};
 
-    var testAuthReq = {
+    const testAuthReq = {
         method: 'HEAD',
-        url: '/v1/server/up/extended'
+        url: '/v1/server/up/extended',
+        headers: {
+          // as above (httpProvider)
+          'X-Requested-With': 'XMLHttpRequest'
+        }
     }
 
     // If the user is already logged in then redirect to home
-    $http(testAuthReq).then( () => ( $window.location.href = '/' ) );
+    // (note httpProvider call above to prevent browser popup)
+    $http(testAuthReq).then( () => {
+        if ($window.location.pathname = '/') {
+          throw new Error('Actually API request was successful, and we are 
logged in, but this page is configured to be shown as the root. A redirect will 
result in an infinite loop, so will ignore and simply show this form.');
+          // will get caught below
+        }
+        console.debug("API request successful. Either already logged in or no 
login necessary. Redirecting to main page instead of showing login form. Coming 
from: "+$window.location.href);
+        $window.location.href = '/';
+      }).catch(err => {
+        console.debug("API request unsuccessful. Not already logged in. 
Showing login form.", err);
+      });
 
     $scope.login = (user)=> {
         if (user==null) {
@@ -66,9 +86,9 @@ export function loginStateController($scope, $http, $window, 
$uibModal, brBrandI
             return;
         }
         var req = {
-            method: 'HEAD',
-            url: '/v1/server/up/extended',
+            ...testAuthReq,
             headers: {
+                ...testAuthReq.headers,
                 'Authorization': 'Basic ' + btoa(user.name +":" + 
user.password)
             }
         }

Reply via email to