Skip to content

Commit a60e600

Browse files
committed
connectors: throw OpenStackNotAuthorized on auth failure
A new specific exception has been introduced to properly identify the authorization errors with username/password and tokens. Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
1 parent 12152d6 commit a60e600

3 files changed

Lines changed: 41 additions & 7 deletions

File tree

openstack-client-connectors/jersey2-connector/src/main/java/org/openstack/connector/JaxRs20Connector.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.Map;
55
import java.util.logging.Logger;
66

7+
import javax.ws.rs.NotAuthorizedException;
78
import javax.ws.rs.client.Client;
89
import javax.ws.rs.client.Entity;
910
import javax.ws.rs.client.Invocation;
@@ -12,6 +13,7 @@
1213

1314
import org.glassfish.jersey.filter.LoggingFilter;
1415
import org.openstack.base.client.OpenStackClientConnector;
16+
import org.openstack.base.client.OpenStackNotAuthorized;
1517
import org.openstack.base.client.OpenStackRequest;
1618

1719
import com.google.common.reflect.TypeToken;
@@ -32,12 +34,18 @@ public <T> T execute(OpenStackRequest request, Class<T> responseType) {
3234
}
3335
invocation.header(h.getKey(), sb);
3436
}
35-
if(request.entity() != null) {
36-
return invocation.method(request.method().name(), Entity.entity(request.entity().getEntity(),request.entity().getContentType()), responseType);
37-
} else {
38-
return invocation.method(request.method().name(), responseType);
39-
}
4037

38+
try {
39+
if (request.entity() != null) {
40+
return invocation.method(request.method().name(), Entity
41+
.entity(request.entity().getEntity(), request.entity()
42+
.getContentType()), responseType);
43+
} else {
44+
return invocation.method(request.method().name(), responseType);
45+
}
46+
} catch (NotAuthorizedException e) {
47+
throw new OpenStackNotAuthorized();
48+
}
4149
}
4250

4351
@Override

openstack-client-connectors/resteasy-connector/src/main/java/org/openstack/connector/RESTEasyConnector.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import javax.ws.rs.core.Response;
77
import javax.ws.rs.ext.ContextResolver;
88

9+
import org.apache.commons.httpclient.HttpStatus;
910
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
1011
import org.codehaus.jackson.map.DeserializationConfig;
1112
import org.codehaus.jackson.map.ObjectMapper;
@@ -14,8 +15,10 @@
1415
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
1516
import org.jboss.resteasy.client.ClientRequest;
1617
import org.jboss.resteasy.client.ClientRequestFactory;
18+
import org.jboss.resteasy.client.ClientResponse;
1719
import org.jboss.resteasy.spi.ResteasyProviderFactory;
1820
import org.openstack.base.client.OpenStackClientConnector;
21+
import org.openstack.base.client.OpenStackNotAuthorized;
1922
import org.openstack.base.client.OpenStackRequest;
2023

2124
import com.google.common.reflect.TypeToken;
@@ -73,11 +76,27 @@ public <T> T execute(OpenStackRequest request, Class<T> responseType) {
7376
client.body(request.entity().getContentType(), request.entity().getEntity());
7477
}
7578

79+
ClientResponse<T> response;
80+
7681
try {
77-
return (T) client.httpMethod(request.method().name(), responseType).getEntity(responseType);
82+
response = client.httpMethod(request.method().name(), responseType);
7883
} catch (Exception e) {
79-
return null;
84+
throw new RuntimeException("Unexpected client exception", e);
85+
}
86+
87+
if (response.getStatus() == HttpStatus.SC_OK
88+
|| response.getStatus() == HttpStatus.SC_NO_CONTENT) {
89+
return (T) response.getEntity(responseType);
8090
}
91+
92+
response.releaseConnection();
93+
94+
if (response.getStatus() == HttpStatus.SC_UNAUTHORIZED) {
95+
throw new OpenStackNotAuthorized();
96+
}
97+
98+
throw new RuntimeException("Unexpected response status code "
99+
+ response.getStatus());
81100
}
82101

83102
@Override
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.openstack.base.client;
2+
3+
public class OpenStackNotAuthorized extends RuntimeException {
4+
5+
private static final long serialVersionUID = -9217419406046755047L;
6+
7+
}

0 commit comments

Comments
 (0)