summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2014-02-14 15:02:17 -0500
committerEndi S. Dewata <edewata@redhat.com>2014-02-18 11:35:39 -0500
commitec9ba2da596eba5c6f09f8f2b0c5d8bcf1413356 (patch)
tree4c490de634a20ad9582625b19c1f7551ab359356
parent31ac1cb521f26fe51f3fea3d7791323724016ad3 (diff)
downloadpki-ec9ba2da596eba5c6f09f8f2b0c5d8bcf1413356.tar.gz
pki-ec9ba2da596eba5c6f09f8f2b0c5d8bcf1413356.tar.xz
pki-ec9ba2da596eba5c6f09f8f2b0c5d8bcf1413356.zip
Updated REST interface for TPS connectors.
The REST interface for TPS connectors has been modified to return Response objects to allow better handling of server responses. Ticket #554
-rw-r--r--base/common/src/com/netscape/certsrv/system/TPSConnectorClient.java28
-rw-r--r--base/common/src/com/netscape/certsrv/system/TPSConnectorResource.java27
-rw-r--r--base/server/cms/src/com/netscape/cms/servlet/tks/TPSConnectorService.java81
3 files changed, 86 insertions, 50 deletions
diff --git a/base/common/src/com/netscape/certsrv/system/TPSConnectorClient.java b/base/common/src/com/netscape/certsrv/system/TPSConnectorClient.java
index 8662159ff..87323e92b 100644
--- a/base/common/src/com/netscape/certsrv/system/TPSConnectorClient.java
+++ b/base/common/src/com/netscape/certsrv/system/TPSConnectorClient.java
@@ -22,15 +22,18 @@ public class TPSConnectorClient extends Client {
}
public TPSConnectorCollection findConnectors(Integer start, Integer size) {
- return tpsConnectorClient.findConnectors(start, size);
+ Response response = tpsConnectorClient.findConnectors(start, size);
+ return client.getEntity(response, TPSConnectorCollection.class);
}
public TPSConnectorData getConnector(String id) {
- return tpsConnectorClient.getConnector(id);
+ Response response = tpsConnectorClient.getConnector(id);
+ return client.getEntity(response, TPSConnectorData.class);
}
public TPSConnectorData getConnector(String host, String port) {
- return tpsConnectorClient.getConnector(host, port);
+ Response response = tpsConnectorClient.getConnector(host, port);
+ return client.getEntity(response, TPSConnectorData.class);
}
public TPSConnectorData createConnector(String tpsHost, String tpsPort) {
@@ -44,27 +47,32 @@ public class TPSConnectorClient extends Client {
}
public void deleteConnector(String id) {
- tpsConnectorClient.deleteConnector(id);
+ Response response = tpsConnectorClient.deleteConnector(id);
+ client.getEntity(response, Void.class);
}
public KeyData createSharedSecret(String id) {
- return tpsConnectorClient.createSharedSecret(id);
+ Response response = tpsConnectorClient.createSharedSecret(id);
+ return client.getEntity(response, KeyData.class);
}
public KeyData replaceSharedSecret(String id) {
- return tpsConnectorClient.replaceSharedSecret(id);
+ Response response = tpsConnectorClient.replaceSharedSecret(id);
+ return client.getEntity(response, KeyData.class);
};
public void deleteSharedSecret(String id) {
- tpsConnectorClient.deleteSharedSecret(id);
+ Response response = tpsConnectorClient.deleteSharedSecret(id);
+ client.getEntity(response, Void.class);
}
public KeyData getSharedSecret(String id) {
- return tpsConnectorClient.getSharedSecret(id);
+ Response response = tpsConnectorClient.getSharedSecret(id);
+ return client.getEntity(response, KeyData.class);
}
public void deleteConnector(String host, String port) {
- tpsConnectorClient.deleteConnector(host, port);
+ Response response = tpsConnectorClient.deleteConnector(host, port);
+ client.getEntity(response, Void.class);
}
-
}
diff --git a/base/common/src/com/netscape/certsrv/system/TPSConnectorResource.java b/base/common/src/com/netscape/certsrv/system/TPSConnectorResource.java
index 441e6f303..43213d0f4 100644
--- a/base/common/src/com/netscape/certsrv/system/TPSConnectorResource.java
+++ b/base/common/src/com/netscape/certsrv/system/TPSConnectorResource.java
@@ -42,20 +42,23 @@ import com.netscape.certsrv.key.KeyData;
@AuthMethodMapping("tpsconnectors")
public interface TPSConnectorResource {
@GET
+ @ClientResponseType(entityType=TPSConnectorCollection.class)
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public TPSConnectorCollection findConnectors(
+ public Response findConnectors(
@QueryParam("start") Integer start,
@QueryParam("size") Integer size);
@GET
@Path("{id}")
+ @ClientResponseType(entityType=TPSConnectorData.class)
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public TPSConnectorData getConnector(@PathParam("id") String id);
+ public Response getConnector(@PathParam("id") String id);
@GET
@Path("search")
+ @ClientResponseType(entityType=TPSConnectorData.class)
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public TPSConnectorData getConnector(@QueryParam("host") String host,
+ public Response getConnector(@QueryParam("host") String host,
@QueryParam("port") String port);
@POST
@@ -73,33 +76,39 @@ public interface TPSConnectorResource {
@DELETE
@Path("{id}")
- public void deleteConnector(@PathParam("id") String id);
+ @ClientResponseType(entityType=Void.class)
+ public Response deleteConnector(@PathParam("id") String id);
@POST
@Path("{id}/shared-secret")
+ @ClientResponseType(entityType=KeyData.class)
@ACLMapping("admin.sharedsecret")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public KeyData createSharedSecret(@PathParam("id") String id);
+ public Response createSharedSecret(@PathParam("id") String id);
@PUT
@Path("{id}/shared-secret")
+ @ClientResponseType(entityType=KeyData.class)
@ACLMapping("admin.sharedsecret")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public KeyData replaceSharedSecret(@PathParam("id") String id);
+ public Response replaceSharedSecret(@PathParam("id") String id);
@DELETE
@Path("{id}/shared-secret")
+ @ClientResponseType(entityType=Void.class)
@ACLMapping("admin.sharedsecret")
- public void deleteSharedSecret(@PathParam("id") String id);
+ public Response deleteSharedSecret(@PathParam("id") String id);
@DELETE
+ @ClientResponseType(entityType=Void.class)
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public void deleteConnector(@QueryParam("host") String host,
+ public Response deleteConnector(@QueryParam("host") String host,
@QueryParam("port") String port);
@GET
@Path("{id}/shared-secret")
+ @ClientResponseType(entityType=KeyData.class)
@ACLMapping("admin.sharedsecret")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public KeyData getSharedSecret(@PathParam("id") String id);
+ public Response getSharedSecret(@PathParam("id") String id);
}
diff --git a/base/server/cms/src/com/netscape/cms/servlet/tks/TPSConnectorService.java b/base/server/cms/src/com/netscape/cms/servlet/tks/TPSConnectorService.java
index 197fbb8f9..c11f1239f 100644
--- a/base/server/cms/src/com/netscape/cms/servlet/tks/TPSConnectorService.java
+++ b/base/server/cms/src/com/netscape/cms/servlet/tks/TPSConnectorService.java
@@ -38,10 +38,11 @@ import com.netscape.certsrv.tps.cert.TPSCertResource;
import com.netscape.certsrv.usrgrp.IUGSubsystem;
import com.netscape.certsrv.usrgrp.IUser;
import com.netscape.cms.realm.PKIPrincipal;
+import com.netscape.cms.servlet.base.PKIService;
import com.netscape.cmsutil.crypto.CryptoUtil;
import com.netscape.cmsutil.util.Utils;
-public class TPSConnectorService implements TPSConnectorResource {
+public class TPSConnectorService extends PKIService implements TPSConnectorResource {
private static final String TPS_LIST = "tps.list";
@@ -58,7 +59,7 @@ public class TPSConnectorService implements TPSConnectorResource {
public IUGSubsystem userGroupManager = (IUGSubsystem) CMS.getSubsystem(CMS.SUBSYSTEM_UG);
@Override
- public TPSConnectorCollection findConnectors(Integer start, Integer size) {
+ public Response findConnectors(Integer start, Integer size) {
try {
String tpsList = cs.getString(TPS_LIST, "");
Iterator<String> entries = Arrays.asList(StringUtils.split(tpsList,",")).iterator();
@@ -88,7 +89,7 @@ public class TPSConnectorService implements TPSConnectorResource {
response.addLink(new Link("next", uri));
}
- return response;
+ return createOKResponse(response);
} catch (EBaseException e) {
e.printStackTrace();
@@ -109,13 +110,20 @@ public class TPSConnectorService implements TPSConnectorResource {
}
@Override
- public TPSConnectorData getConnector(String id) {
+ public Response getConnector(String id) {
+ return createOKResponse(getConnectorData(id));
+ }
+
+ public TPSConnectorData getConnectorData(String id) {
if (id == null) throw new BadRequestException("TPS connector ID is null.");
try {
- if (connectorExists(id)) return createTPSConnectorData(id);
- throw new ResourceNotFoundException("Connector " + id + " not found.");
+ if (!connectorExists(id))
+ throw new ResourceNotFoundException("Connector " + id + " not found.");
+
+ return createTPSConnectorData(id);
+
} catch (EBaseException e) {
e.printStackTrace();
throw new PKIException("Unable to get TPS connection data" + e);
@@ -123,16 +131,19 @@ public class TPSConnectorService implements TPSConnectorResource {
}
@Override
- public TPSConnectorData getConnector(String host, String port) {
+ public Response getConnector(String host, String port) {
if (host == null) throw new BadRequestException("TPS connector host is null.");
if (port == null) throw new BadRequestException("TPS connector port is null.");
try {
String id = getConnectorID(host, port);
- if (id != null) return createTPSConnectorData(id);
- throw new ResourceNotFoundException(
- "Connector not found for " + host + ":" + port);
+ if (id == null)
+ throw new ResourceNotFoundException(
+ "Connector not found for " + host + ":" + port);
+
+ return createOKResponse(createTPSConnectorData(id));
+
} catch (EBaseException e) {
e.printStackTrace();
throw new PKIException("Unable to get TPS connection data" + e);
@@ -166,10 +177,7 @@ public class TPSConnectorService implements TPSConnectorResource {
addToConnectorList(newID);
cs.commit(true);
- return Response
- .created(newData.getLink().getHref())
- .entity(newData)
- .build();
+ return createCreatedResponse(newData, newData.getLink().getHref());
} catch (EBaseException e) {
CMS.debug("Unable to create new TPS Connector: " + e);
@@ -199,17 +207,15 @@ public class TPSConnectorService implements TPSConnectorResource {
if ((data.getUserID() != null) || (data.getNickname() != null)) {
throw new UnauthorizedException("Cannot change userid or nickname using this interface");
}
- TPSConnectorData curData = getConnector(id);
+ TPSConnectorData curData = getConnectorData(id);
curData.setHost(data.getHost());
curData.setPort(data.getPort());
saveClientData(curData);
cs.commit(true);
- return Response
- .ok(curData.getLink().getHref())
- .entity(curData)
- .build();
+ return createOKResponse(curData);
+
} catch (EBaseException e) {
CMS.debug("Unable to modify TPS Connector: " + e);
e.printStackTrace();
@@ -236,17 +242,20 @@ public class TPSConnectorService implements TPSConnectorResource {
}
@Override
- public void deleteConnector(String id) {
+ public Response deleteConnector(String id) {
try {
if (StringUtils.isEmpty(id))
throw new BadRequestException("Attempt to delete TPS connection with null or empty id");
- if (!connectorExists(id)) return;
+ if (!connectorExists(id)) return createNoContentResponse();
deleteSharedSecret(id);
cs.removeSubStore("tps." + id);
removeFromConnectorList(id);
cs.commit(true);
+
+ return createNoContentResponse();
+
} catch (EBaseException e) {
e.printStackTrace();
throw new PKIException("Failed to delete TPS connection" + e);
@@ -254,7 +263,7 @@ public class TPSConnectorService implements TPSConnectorResource {
}
@Override
- public void deleteConnector(String host, String port) {
+ public Response deleteConnector(String host, String port) {
if (host == null) throw new BadRequestException("TPS connector host is null.");
if (port == null) throw new BadRequestException("TPS connector port is null.");
@@ -267,10 +276,12 @@ public class TPSConnectorService implements TPSConnectorResource {
e.printStackTrace();
throw new PKIException("Failed to delete TPS connector: " + e);
}
+
+ return createNoContentResponse();
}
@Override
- public KeyData createSharedSecret(String id) {
+ public Response createSharedSecret(String id) {
if (id == null) throw new BadRequestException("TPS connector ID is null.");
@@ -299,7 +310,8 @@ public class TPSConnectorService implements TPSConnectorResource {
byte[] wrappedKey = CryptoUtil.exportSharedSecret(nickname, certs[0]);
KeyData keyData = new KeyData();
keyData.setWrappedPrivateData(Utils.base64encode(wrappedKey));
- return keyData;
+
+ return createOKResponse(keyData);
} catch (InvalidKeyException | IllegalStateException | NoSuchAlgorithmException
| InvalidAlgorithmParameterException | EBaseException
@@ -329,7 +341,7 @@ public class TPSConnectorService implements TPSConnectorResource {
}
@Override
- public KeyData replaceSharedSecret(String id) {
+ public Response replaceSharedSecret(String id) {
if (id == null) throw new BadRequestException("TPS connector ID is null.");
@@ -355,7 +367,9 @@ public class TPSConnectorService implements TPSConnectorResource {
byte[] wrappedKey = CryptoUtil.exportSharedSecret(nickname, certs[0]);
KeyData keyData = new KeyData();
keyData.setWrappedPrivateData(Utils.base64encode(wrappedKey));
- return keyData;
+
+ return createOKResponse(keyData);
+
} catch (InvalidKeyException | IllegalStateException | NoSuchAlgorithmException
| InvalidAlgorithmParameterException | EBaseException
| NotInitializedException | TokenException | IOException | InvalidKeyFormatException e) {
@@ -366,7 +380,7 @@ public class TPSConnectorService implements TPSConnectorResource {
}
@Override
- public void deleteSharedSecret(String id) {
+ public Response deleteSharedSecret(String id) {
if (id == null) throw new BadRequestException("TPS connector ID is null.");
@@ -383,12 +397,15 @@ public class TPSConnectorService implements TPSConnectorResource {
String nickname = userid + " sharedSecret";
if (!CryptoUtil.sharedSecretExists(nickname)) {
- return;
+ return createNoContentResponse();
}
CryptoUtil.deleteSharedSecret(nickname);
cs.putString("tps." + id + ".nickname", "");
cs.commit(true);
+
+ return createNoContentResponse();
+
} catch (InvalidKeyException | IllegalStateException | EBaseException
| NotInitializedException | TokenException e) {
e.printStackTrace();
@@ -398,7 +415,7 @@ public class TPSConnectorService implements TPSConnectorResource {
}
@Override
- public KeyData getSharedSecret(String id) {
+ public Response getSharedSecret(String id) {
if (id == null) throw new BadRequestException("TPS connector ID is null.");
@@ -412,7 +429,7 @@ public class TPSConnectorService implements TPSConnectorResource {
String nickname = userid + " sharedSecret";
if (!CryptoUtil.sharedSecretExists(nickname)) {
- return null;
+ return createNoContentResponse();
}
// get user cert
@@ -422,7 +439,9 @@ public class TPSConnectorService implements TPSConnectorResource {
byte[] wrappedKey = CryptoUtil.exportSharedSecret(nickname, certs[0]);
KeyData keyData = new KeyData();
keyData.setWrappedPrivateData(Utils.base64encode(wrappedKey));
- return keyData;
+
+ return createOKResponse(keyData);
+
} catch (InvalidKeyException | IllegalStateException | NoSuchAlgorithmException
| InvalidAlgorithmParameterException | EBaseException
| NotInitializedException | TokenException | IOException | InvalidKeyFormatException e) {