Alexander Wels has uploaded a new change for review.

Change subject: webadmin: refresh REST api session
......................................................................

webadmin: refresh REST api session

- Each time a user logs into the web admin create a new
  REST api session and associated session id. This is to
  make sure the UI plugins have a REST api session id available.

Change-Id: I2d3ab397e49bc6bb4e4884228ed86fe4042f4834
Signed-off-by: Alexander Wels <[email protected]>
---
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
1 file changed, 26 insertions(+), 19 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/46/27546/1

diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
index 2605af5..7937267 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
@@ -3,7 +3,6 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.ovirt.engine.ui.common.system.ClientStorage;
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.frontend.communication.StorageCallback;
 import org.ovirt.engine.ui.frontend.utils.BaseContextPathData;
@@ -69,7 +68,6 @@
     private static final int SESSION_HEARTBEAT_MS = 1000 * 60; // 1 minute
 
     private final EventBus eventBus;
-    private final ClientStorage clientStorage;
     private final String restApiBaseUrl;
 
     private String sessionTimeout;
@@ -77,9 +75,8 @@
     private String restApiSessionId;
 
     @Inject
-    public RestApiSessionManager(EventBus eventBus, ClientStorage 
clientStorage) {
+    public RestApiSessionManager(EventBus eventBus) {
         this.eventBus = eventBus;
-        this.clientStorage = clientStorage;
         // Note that the slash at the end of the URL is not just a whim. With 
the trailing slash the browser will only
         // send authentication headers to URLs ending in api/, otherwise it 
will send them to URLs ending in /, and
         // this causes problems in other applications, for example in the 
reports application.
@@ -102,9 +99,11 @@
         }
     }
 
-    RequestBuilder createRequest() {
+    RequestBuilder createRequest(final boolean persistent) {
         RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, 
restApiBaseUrl);
-        requestBuilder.setHeader("Prefer", "persistent-auth"); //$NON-NLS-1$ 
//$NON-NLS-2$
+        if (persistent) {
+            requestBuilder.setHeader("Prefer", "persistent-auth"); 
//$NON-NLS-1$ //$NON-NLS-2$
+        }
         requestBuilder.setHeader("Session-TTL", getSessionTimeout()); 
//$NON-NLS-1$
         return requestBuilder;
     }
@@ -117,7 +116,7 @@
 
                 if (sessionId != null) {
                     // The session is still in use
-                    RequestBuilder requestBuilder = createRequest();
+                    RequestBuilder requestBuilder = createRequest(true);
 
                     // Note: the browser takes care of sending JSESSIONID 
cookie for this request automatically
                     sendRequest(requestBuilder, new RestApiCallback() {
@@ -138,23 +137,31 @@
     /**
      * Acquires new REST API session using the given credentials.
      */
-    public void acquireSession(String userNameWithDomain, String password) {
-        RequestBuilder requestBuilder = createRequest();
-        requestBuilder.setUser(userNameWithDomain);
-        requestBuilder.setPassword(password);
+    public void acquireSession(final String userNameWithDomain, final String 
password) {
+        RequestBuilder logoutRequestBuilder = createRequest(false);
+        logoutRequestBuilder.setUser(userNameWithDomain);
+        logoutRequestBuilder.setPassword(password);
 
-        sendRequest(requestBuilder, new RestApiCallback() {
+        sendRequest(logoutRequestBuilder, new RestApiCallback() {
             @Override
             protected void processResponse(Response response) {
-                // Obtain session ID from response header, as we're unable to 
access REST API
-                // JSESSIONID cookie directly (cookie set for different path 
than WebAdmin page)
-                String sessionIdFromHeader = 
response.getHeader(SESSION_ID_HEADER);
+                RequestBuilder loginRequestBuilder = createRequest(true);
+                loginRequestBuilder.setUser(userNameWithDomain);
+                loginRequestBuilder.setPassword(password);
+                sendRequest(loginRequestBuilder, new RestApiCallback() {
+                    @Override
+                    protected void processResponse(Response response) {
+                        // Obtain session ID from response header, as we're 
unable to access REST API
+                        // JSESSIONID cookie directly (cookie set for 
different path than WebAdmin page)
+                        String sessionIdFromHeader = 
response.getHeader(SESSION_ID_HEADER);
 
-                if (sessionIdFromHeader != null) {
-                    setSessionId(sessionIdFromHeader);
-                }
+                        if (sessionIdFromHeader != null) {
+                            setSessionId(sessionIdFromHeader);
+                        }
 
-                reuseSession();
+                        reuseSession();
+                    }
+                });
             }
         });
     }


-- 
To view, visit http://gerrit.ovirt.org/27546
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2d3ab397e49bc6bb4e4884228ed86fe4042f4834
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alexander Wels <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to