You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/11/16 18:29:13 UTC

[3/6] brooklyn-server git commit: logout rest code tidy - behaves nicer if no user

logout rest code tidy - behaves nicer if no user

previously `curl /v1/logout` would throw 500 server error


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/a7ce5b65
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/a7ce5b65
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/a7ce5b65

Branch: refs/heads/master
Commit: a7ce5b6542533ce49a3eb492d719f6575e2a9837
Parents: 30a2d85
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Sun Nov 13 13:34:12 2016 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Sun Nov 13 09:39:52 2016 -0700

----------------------------------------------------------------------
 .../brooklyn/rest/resources/LogoutResource.java | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/a7ce5b65/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/LogoutResource.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/LogoutResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/LogoutResource.java
index 66ce968..d24b8d3 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/LogoutResource.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/LogoutResource.java
@@ -30,23 +30,35 @@ import javax.ws.rs.core.UriInfo;
 import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
 import org.apache.brooklyn.core.mgmt.entitlement.WebEntitlementContext;
 import org.apache.brooklyn.rest.api.LogoutApi;
+import org.apache.brooklyn.rest.security.jaas.BrooklynLoginModule;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 
+import com.google.common.net.HttpHeaders;
+
 public class LogoutResource extends AbstractBrooklynRestResource implements LogoutApi {
+    
+    private static final String BASIC_REALM_WEBCONSOLE = "Basic realm=\""+BrooklynLoginModule.DEFAULT_ROLE+"\"";
+    
     @Context HttpServletRequest req;
     @Context UriInfo uri;
 
     @Override
     public Response logout() {
         WebEntitlementContext ctx = (WebEntitlementContext) Entitlements.getEntitlementContext();
+        
+        if (ctx==null) {
+            return Response.status(Status.BAD_REQUEST)
+                .entity("No user logged in")
+                .header(HttpHeaders.WWW_AUTHENTICATE, BASIC_REALM_WEBCONSOLE)
+                .build();            
+        }
+        
         URI dest = uri.getBaseUriBuilder().path(LogoutApi.class).path(LogoutApi.class, "logoutUser").build(ctx.user());
 
         // When execution gets here we don't know whether this is the first fetch of logout() or a subsequent one
         // with a re-authenticated user. The only way to tell is compare if user names changed. So redirect to an URL
         // which contains the user name.
-        return Response.status(Status.TEMPORARY_REDIRECT)
-                .header("Location", dest.toASCIIString())
-                .build();
+        return Response.temporaryRedirect(dest).build();
     }
 
     @Override
@@ -58,7 +70,7 @@ public class LogoutResource extends AbstractBrooklynRestResource implements Logo
             doLogout();
 
             return Response.status(Status.UNAUTHORIZED)
-                    .header("WWW-Authenticate", "Basic realm=\"webconsole\"")
+                    .header(HttpHeaders.WWW_AUTHENTICATE, BASIC_REALM_WEBCONSOLE)
                     .build();
         } else {
             return Response.temporaryRedirect(uri.getAbsolutePathBuilder().replacePath("/").build()).build();