From 4a2ea0789d3a3e65f1bccc7f3f10a58bf32a406c Mon Sep 17 00:00:00 2001 From: "Endi S. Dewata" 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 nextStatuses = new TreeSet(); String appletID; String keyInfo; String policy; @@ -108,6 +114,18 @@ public class TokenData { this.status = status; } + @XmlElement(name="NextStatuses") + @XmlJavaTypeAdapter(TokenStatusesAdapter.class) + public Collection getNextStatuses() { + return nextStatuses; + } + + public void setNextStatuses(Collection 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> { + + public TokenStatusList marshal(Collection statuses) { + TokenStatusList list = new TokenStatusList(); + list.statuses = statuses.toArray(new TokenStatus[statuses.size()]); + return list; + } + + public Collection unmarshal(TokenStatusList list) { + Collection statuses = new TreeSet(); + 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 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 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(); + + $("