[Pki-devel] [PATCH] 573 Fixed status dropdown list in TPS UI.
Endi Sukma Dewata
edewata at redhat.com
Mon Apr 20 13:43:02 UTC 2015
The status dropdown list in TPS UI has been fixed to show only the
valid transitions based on the tokendb.allowedTransitions in CS.cfg.
The 0:4 transition has been removed from tokendb.allowedTransitions
since it cannot be done via UI.
https://fedorahosted.org/pki/ticket/1275
--
Endi S. Dewata
-------------- next part --------------
From 4a2ea0789d3a3e65f1bccc7f3f10a58bf32a406c Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <edewata at redhat.com>
Date: Mon, 20 Apr 2015 09:28:46 -0400
Subject: [PATCH] Fixed status dropdown list in TPS UI.
The status dropdown list in TPS UI has been fixed to show only the
valid transitions based on the tokendb.allowedTransitions in CS.cfg.
The 0:4 transition has been removed from tokendb.allowedTransitions
since it cannot be done via UI.
https://fedorahosted.org/pki/ticket/1275
---
.../com/netscape/certsrv/tps/token/TokenData.java | 55 ++++++++++++++++++++++
.../com/netscape/cmstools/tps/token/TokenCLI.java | 10 ++++
base/tps/shared/conf/CS.cfg.in | 2 +-
base/tps/shared/webapps/tps/js/token.js | 33 +++++++++++++
.../dogtagpki/server/tps/rest/TokenService.java | 32 +++++++------
5 files changed, 117 insertions(+), 15 deletions(-)
diff --git a/base/common/src/com/netscape/certsrv/tps/token/TokenData.java b/base/common/src/com/netscape/certsrv/tps/token/TokenData.java
index 235e86feaebeafec5d6263e3658a53791fb845de..345c743b8c65b4ca0919bc66b06605d69055f1e8 100644
--- a/base/common/src/com/netscape/certsrv/tps/token/TokenData.java
+++ b/base/common/src/com/netscape/certsrv/tps/token/TokenData.java
@@ -20,7 +20,10 @@ package com.netscape.certsrv.tps.token;
import java.io.StringReader;
import java.io.StringWriter;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Date;
+import java.util.TreeSet;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
@@ -28,6 +31,8 @@ import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.jboss.resteasy.plugins.providers.atom.Link;
@@ -55,6 +60,7 @@ public class TokenData {
String userID;
String type;
TokenStatus status;
+ Collection<TokenStatus> nextStatuses = new TreeSet<TokenStatus>();
String appletID;
String keyInfo;
String policy;
@@ -108,6 +114,18 @@ public class TokenData {
this.status = status;
}
+ @XmlElement(name="NextStatuses")
+ @XmlJavaTypeAdapter(TokenStatusesAdapter.class)
+ public Collection<TokenStatus> getNextStatuses() {
+ return nextStatuses;
+ }
+
+ public void setNextStatuses(Collection<TokenStatus> nextStatuses) {
+ this.nextStatuses.clear();
+ if (nextStatuses == null) return;
+ this.nextStatuses.addAll(nextStatuses);
+ }
+
@XmlElement(name="AppletID")
public String getAppletID() {
return appletID;
@@ -172,6 +190,7 @@ public class TokenData {
result = prime * result + ((keyInfo == null) ? 0 : keyInfo.hashCode());
result = prime * result + ((link == null) ? 0 : link.hashCode());
result = prime * result + ((modifyTimestamp == null) ? 0 : modifyTimestamp.hashCode());
+ result = prime * result + ((nextStatuses == null) ? 0 : nextStatuses.hashCode());
result = prime * result + ((policy == null) ? 0 : policy.hashCode());
result = prime * result + ((status == null) ? 0 : status.hashCode());
result = prime * result + ((tokenID == null) ? 0 : tokenID.hashCode());
@@ -219,6 +238,11 @@ public class TokenData {
return false;
} else if (!modifyTimestamp.equals(other.modifyTimestamp))
return false;
+ if (nextStatuses == null) {
+ if (other.nextStatuses != null)
+ return false;
+ } else if (!nextStatuses.equals(other.nextStatuses))
+ return false;
if (policy == null) {
if (other.policy != null)
return false;
@@ -263,13 +287,44 @@ public class TokenData {
}
}
+ public static class TokenStatusesAdapter extends XmlAdapter<TokenStatusList, Collection<TokenStatus>> {
+
+ public TokenStatusList marshal(Collection<TokenStatus> statuses) {
+ TokenStatusList list = new TokenStatusList();
+ list.statuses = statuses.toArray(new TokenStatus[statuses.size()]);
+ return list;
+ }
+
+ public Collection<TokenStatus> unmarshal(TokenStatusList list) {
+ Collection<TokenStatus> statuses = new TreeSet<TokenStatus>();
+ if (list.statuses != null) {
+ statuses.addAll(Arrays.asList(list.statuses));
+ }
+ return statuses;
+ }
+ }
+
+ public static class TokenStatusList {
+
+ @XmlElement(name="Status")
+ public TokenStatus[] statuses;
+ }
+
public static void main(String args[]) throws Exception {
TokenData before = new TokenData();
before.setID("token1");
before.setUserID("user1");
before.setType("userKey");
+
before.setStatus(TokenStatus.ACTIVE);
+
+ Collection<TokenStatus> nextStatuses = before.getNextStatuses();
+ nextStatuses.add(TokenStatus.DAMAGED);
+ nextStatuses.add(TokenStatus.PERM_LOST);
+ nextStatuses.add(TokenStatus.TEMP_LOST);
+ nextStatuses.add(TokenStatus.TERMINATED);
+
before.setAppletID("APPLET1234");
before.setKeyInfo("key info");
before.setPolicy("FORCE_FORMAT=YES");
diff --git a/base/java-tools/src/com/netscape/cmstools/tps/token/TokenCLI.java b/base/java-tools/src/com/netscape/cmstools/tps/token/TokenCLI.java
index e7dd6a3081bdd89013d6d65d5b48797fb29dd55a..8c2db257f61c1524597f69f07b89dc147046e30c 100644
--- a/base/java-tools/src/com/netscape/cmstools/tps/token/TokenCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/tps/token/TokenCLI.java
@@ -18,10 +18,14 @@
package com.netscape.cmstools.tps.token;
+import java.util.Collection;
+
+import org.apache.commons.lang.StringUtils;
import org.jboss.resteasy.plugins.providers.atom.Link;
import com.netscape.certsrv.tps.token.TokenClient;
import com.netscape.certsrv.tps.token.TokenData;
+import com.netscape.certsrv.tps.token.TokenStatus;
import com.netscape.cmstools.cli.CLI;
/**
@@ -54,6 +58,12 @@ public class TokenCLI extends CLI {
if (token.getUserID() != null) System.out.println(" User ID: " + token.getUserID());
if (token.getType() != null) System.out.println(" Type: " + token.getType());
if (token.getStatus() != null) System.out.println(" Status: " + token.getStatus());
+
+ Collection<TokenStatus> nextStatuses = token.getNextStatuses();
+ if (nextStatuses != null) {
+ System.out.println(" Next Statuses: " + StringUtils.join(nextStatuses, ", "));
+ }
+
if (token.getAppletID() != null) System.out.println(" Applet ID: " + token.getAppletID());
if (token.getKeyInfo() != null) System.out.println(" Key Info: " + token.getKeyInfo());
if (token.getPolicy() != null) System.out.println(" Policy: " + token.getPolicy());
diff --git a/base/tps/shared/conf/CS.cfg.in b/base/tps/shared/conf/CS.cfg.in
index e583ac097c8be3f716a0a88f047c13a1039b1f5f..aa3df060a3de583be7ba6881441e7f316212a9f5 100644
--- a/base/tps/shared/conf/CS.cfg.in
+++ b/base/tps/shared/conf/CS.cfg.in
@@ -1897,7 +1897,7 @@ tokendb.addConfigTemplate=addConfig.template
tokendb.addResultTemplate=addResults.template
tokendb.agentSelectConfigTemplate=agentSelectConfig.template
tokendb.agentViewConfigTemplate=agentViewConfig.template
-tokendb.allowedTransitions=0:1,0:2,0:3,0:4,0:5,0:6,3:4,3:5,3:6,4:1,4:2,4:3,4:6
+tokendb.allowedTransitions=0:1,0:2,0:3,0:5,0:6,3:4,3:5,3:6,4:1,4:2,4:3,4:6
tokendb.auditAdminTemplate=auditAdmin.template
tokendb.auditLog=[PKI_INSTANCE_PATH]/logs/tokendb-audit.log
tokendb.baseDN=ou=Tokens,[TOKENDB_ROOT]
diff --git a/base/tps/shared/webapps/tps/js/token.js b/base/tps/shared/webapps/tps/js/token.js
index f4d2d8a78e46b92fd1e0ae9a87136f0e63e3e2c8..ba82bddfa47997e468314d69f5ff18e4ebe6a2f1 100644
--- a/base/tps/shared/webapps/tps/js/token.js
+++ b/base/tps/shared/webapps/tps/js/token.js
@@ -24,6 +24,7 @@ var TokenStatus = {
ACTIVE: "Active",
TEMP_LOST: "Temporarily lost",
PERM_LOST: "Permanently lost",
+ TEMP_LOST_PERM_LOST: "Permanently lost",
DAMAGED: "Physically damaged",
TERMINATED: "Terminated"
};
@@ -38,6 +39,7 @@ var TokenModel = Model.extend({
type: response.Type,
status: response.Status,
statusLabel: TokenStatus[response.Status],
+ nextStatuses: response.NextStatuses.Status,
appletID: response.AppletID,
keyInfo: response.KeyInfo,
policy: response.Policy,
@@ -91,6 +93,7 @@ var TokenCollection = Collection.extend({
type: entry.Type,
status: entry.Status,
statusLabel: TokenStatus[entry.Status],
+ nextStatuses: entry.NextStatuses.Status,
appletID: entry.AppletID,
keyInfo: entry.KeyInfo,
policy: entry.Policy,
@@ -125,6 +128,21 @@ var TokenPage = EntryPage.extend({
dialog.entry = _.clone(self.model.attributes);
+ var statusSelection = $("select[name='status']", dialog.$el);
+ statusSelection.empty();
+
+ $("<option/>", {
+ value: dialog.entry.status,
+ text: TokenStatus[dialog.entry.status]
+ }).appendTo(statusSelection);
+
+ _.each(dialog.entry.nextStatuses, function(nextStatus) {
+ $("<option/>", {
+ value: nextStatus,
+ text: TokenStatus[nextStatus]
+ }).appendTo(statusSelection);
+ });
+
dialog.handler("save", function() {
// save changes
@@ -209,6 +227,21 @@ var TokenTableItem = TableItem.extend({
dialog.entry = _.clone(model.attributes);
+ var statusSelection = $("select[name='status']", dialog.$el);
+ statusSelection.empty();
+
+ $("<option/>", {
+ value: dialog.entry.status,
+ text: TokenStatus[dialog.entry.status]
+ }).appendTo(statusSelection);
+
+ _.each(dialog.entry.nextStatuses, function(nextStatus) {
+ $("<option/>", {
+ value: nextStatus,
+ text: TokenStatus[nextStatus]
+ }).appendTo(statusSelection);
+ });
+
dialog.handler("save", function() {
// save changes
diff --git a/base/tps/src/org/dogtagpki/server/tps/rest/TokenService.java b/base/tps/src/org/dogtagpki/server/tps/rest/TokenService.java
index b67922e4802c5dddde018c15340d588d2717005e..1bd5de66ee8e75017400b1e4ee8d32b563ce84e0 100644
--- a/base/tps/src/org/dogtagpki/server/tps/rest/TokenService.java
+++ b/base/tps/src/org/dogtagpki/server/tps/rest/TokenService.java
@@ -193,7 +193,11 @@ public class TokenService extends PKIService implements TokenResource {
tokenData.setTokenID(tokenRecord.getId());
tokenData.setUserID(tokenRecord.getUserID());
tokenData.setType(tokenRecord.getType());
- tokenData.setStatus(getTokenStatus(tokenRecord));
+
+ TokenStatus status = getTokenStatus(tokenRecord);
+ tokenData.setStatus(status);
+ tokenData.setNextStatuses(transitions.get(status));
+
tokenData.setAppletID(tokenRecord.getAppletID());
tokenData.setKeyInfo(tokenRecord.getKeyInfo());
tokenData.setPolicy(tokenRecord.getPolicy());
@@ -204,7 +208,7 @@ public class TokenService extends PKIService implements TokenResource {
try {
tokenID = URLEncoder.encode(tokenID, "UTF-8");
} catch (UnsupportedEncodingException e) {
- e.printStackTrace();
+ CMS.debug(e);
throw new PKIException(e.getMessage());
}
@@ -276,7 +280,7 @@ public class TokenService extends PKIService implements TokenResource {
return createOKResponse(response);
} catch (Exception e) {
- e.printStackTrace();
+ CMS.debug(e);
throw new PKIException(e.getMessage());
}
}
@@ -295,7 +299,7 @@ public class TokenService extends PKIService implements TokenResource {
return createOKResponse(createTokenData(database.getRecord(tokenID)));
} catch (Exception e) {
- e.printStackTrace();
+ CMS.debug(e);
throw new PKIException(e.getMessage());
}
}
@@ -331,12 +335,12 @@ public class TokenService extends PKIService implements TokenResource {
return createCreatedResponse(tokenData, tokenData.getLink().getHref());
} catch (Exception e) {
- e.printStackTrace();
+ CMS.debug(e);
subsystem.tdb.tdbActivity(ActivityDatabase.OP_ADD, tokenRecord,
ipAddress, msg, "failure", remoteUser);
msg = msg + ":" + e;
- throw new PKIException(msg);
+ throw new PKIException(msg, e);
}
}
@@ -372,13 +376,13 @@ public class TokenService extends PKIService implements TokenResource {
return createOKResponse(tokenData);
} catch (Exception e) {
- e.printStackTrace();
+ CMS.debug(e);
subsystem.tdb.tdbActivity(ActivityDatabase.OP_DO_TOKEN, tokenRecord,
ipAddress, msg, "failure",
remoteUser);
msg = msg + ":" + e;
- throw new PKIException(msg);
+ throw new PKIException(msg, e);
}
}
@@ -461,13 +465,13 @@ public class TokenService extends PKIService implements TokenResource {
return createOKResponse(tokenData);
} catch (Exception e) {
- e.printStackTrace();
+ CMS.debug(e);
subsystem.tdb.tdbActivity(ActivityDatabase.OP_DO_TOKEN, tokenRecord,
ipAddress, msg, "failure",
remoteUser);
msg = msg + ":" + e;
- throw new PKIException(msg);
+ throw new PKIException(msg, e);
}
}
@@ -518,13 +522,13 @@ public class TokenService extends PKIService implements TokenResource {
return createOKResponse(tokenData);
} catch (Exception e) {
- e.printStackTrace();
+ CMS.debug(e);
msg = msg + e;
subsystem.tdb.tdbActivity(ActivityDatabase.OP_DO_TOKEN, tokenRecord,
ipAddress, msg, "failure",
remoteUser);
- throw new PKIException(msg);
+ throw new PKIException(msg, e);
}
}
@@ -556,13 +560,13 @@ public class TokenService extends PKIService implements TokenResource {
return createNoContentResponse();
} catch (Exception e) {
- e.printStackTrace();
+ CMS.debug(e);
subsystem.tdb.tdbActivity(ActivityDatabase.OP_DELETE, tokenRecord,
ipAddress, msg, "failure",
remoteUser);
msg = msg + ":" + e;
- throw new PKIException(msg);
+ throw new PKIException(msg, e);
}
}
}
--
1.9.3
More information about the Pki-devel
mailing list