summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/common/src/com/netscape/certsrv/tps/token/TokenClient.java20
-rw-r--r--base/common/src/com/netscape/certsrv/tps/token/TokenResource.java4
-rw-r--r--base/java-tools/src/com/netscape/cmstools/tps/token/TokenFindCLI.java31
-rw-r--r--base/server/share/webapps/pki/js/pki-ui.js28
-rw-r--r--base/tps/shared/webapps/tps/js/token.js70
-rw-r--r--base/tps/shared/webapps/tps/ui/tokens.html31
-rw-r--r--base/tps/src/org/dogtagpki/server/tps/rest/TokenService.java29
7 files changed, 200 insertions, 13 deletions
diff --git a/base/common/src/com/netscape/certsrv/tps/token/TokenClient.java b/base/common/src/com/netscape/certsrv/tps/token/TokenClient.java
index a62e71cf8..63e0edcde 100644
--- a/base/common/src/com/netscape/certsrv/tps/token/TokenClient.java
+++ b/base/common/src/com/netscape/certsrv/tps/token/TokenClient.java
@@ -40,8 +40,24 @@ public class TokenClient extends Client {
resource = createProxy(TokenResource.class);
}
- public TokenCollection findTokens(String filter, Integer start, Integer size) {
- Response response = resource.findTokens(filter, start, size);
+ public TokenCollection findTokens(
+ String filter,
+ String tokenID,
+ String userID,
+ String type,
+ String status,
+ Integer start,
+ Integer size) {
+
+ Response response = resource.findTokens(
+ filter,
+ tokenID,
+ userID,
+ type,
+ status,
+ start,
+ size);
+
return client.getEntity(response, TokenCollection.class);
}
diff --git a/base/common/src/com/netscape/certsrv/tps/token/TokenResource.java b/base/common/src/com/netscape/certsrv/tps/token/TokenResource.java
index e530a8527..4c1bc39aa 100644
--- a/base/common/src/com/netscape/certsrv/tps/token/TokenResource.java
+++ b/base/common/src/com/netscape/certsrv/tps/token/TokenResource.java
@@ -45,6 +45,10 @@ public interface TokenResource {
@ClientResponseType(entityType=TokenCollection.class)
public Response findTokens(
@QueryParam("filter") String filter,
+ @QueryParam("tokenID") String tokenID,
+ @QueryParam("userID") String userID,
+ @QueryParam("type") String type,
+ @QueryParam("status") String status,
@QueryParam("start") Integer start,
@QueryParam("size") Integer size);
diff --git a/base/java-tools/src/com/netscape/cmstools/tps/token/TokenFindCLI.java b/base/java-tools/src/com/netscape/cmstools/tps/token/TokenFindCLI.java
index 9afc05ebe..cfe7c2fe3 100644
--- a/base/java-tools/src/com/netscape/cmstools/tps/token/TokenFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/tps/token/TokenFindCLI.java
@@ -48,7 +48,23 @@ public class TokenFindCLI extends CLI {
}
public void createOptions() {
- Option option = new Option(null, "start", true, "Page start");
+ Option option = new Option(null, "token", true, "Token ID");
+ option.setArgName("token ID");
+ options.addOption(option);
+
+ option = new Option(null, "user", true, "User ID");
+ option.setArgName("user ID");
+ options.addOption(option);
+
+ option = new Option(null, "type", true, "Token type");
+ option.setArgName("type");
+ options.addOption(option);
+
+ option = new Option(null, "status", true, "Token status");
+ option.setArgName("status");
+ options.addOption(option);
+
+ option = new Option(null, "start", true, "Page start");
option.setArgName("start");
options.addOption(option);
@@ -78,6 +94,10 @@ public class TokenFindCLI extends CLI {
String[] cmdArgs = cmd.getArgs();
String filter = cmdArgs.length > 0 ? cmdArgs[0] : null;
+ String tokenID = cmd.getOptionValue("token");
+ String userID = cmd.getOptionValue("user");
+ String type = cmd.getOptionValue("type");
+ String status = cmd.getOptionValue("status");
String s = cmd.getOptionValue("start");
Integer start = s == null ? null : Integer.valueOf(s);
@@ -85,7 +105,14 @@ public class TokenFindCLI extends CLI {
s = cmd.getOptionValue("size");
Integer size = s == null ? null : Integer.valueOf(s);
- TokenCollection result = tokenCLI.tokenClient.findTokens(filter, start, size);
+ TokenCollection result = tokenCLI.tokenClient.findTokens(
+ filter,
+ tokenID,
+ userID,
+ type,
+ status,
+ start,
+ size);
MainCLI.printMessage(result.getTotal() + " entries matched");
if (result.getTotal() == 0) return;
diff --git a/base/server/share/webapps/pki/js/pki-ui.js b/base/server/share/webapps/pki/js/pki-ui.js
index 96c92f3f1..0b5cdb0dd 100644
--- a/base/server/share/webapps/pki/js/pki-ui.js
+++ b/base/server/share/webapps/pki/js/pki-ui.js
@@ -198,6 +198,7 @@ var Dialog = Backbone.View.extend({
self.title = options.title;
self.content = options.content;
+ self.entry = options.entry || {};
// list of readonly fields
// by default all fields are editable
@@ -499,11 +500,15 @@ var Table = Backbone.View.extend({
var self = this;
Table.__super__.initialize.call(self, options);
+
self.entries = options.entries || [];
self.columnMappings = options.columnMappings || {};
self.mode = options.mode || "view";
self.parent = options.parent;
+ self.searchFilter = "";
+ self.searchAttributes = {};
+
self.addDialog = options.addDialog;
self.editDialog = options.editDialog;
self.viewDialog = options.viewDialog;
@@ -525,6 +530,9 @@ var Table = Backbone.View.extend({
self.searchField = $("input[name='search']", self.thead);
self.searchField.keypress(function(e) {
if (e.which == 13) {
+
+ self.searchFilter = self.searchField.val();
+
// show the first page of search results
self.page = 1;
self.render();
@@ -634,11 +642,10 @@ var Table = Backbone.View.extend({
var self = this;
// perform manual filter
- var filter = self.searchField.val();
self.filteredEntries = [];
_(self.entries).each(function(item, index) {
- if (!self.matchesFilter(item, filter)) return;
+ if (!self.matchesFilter(item, self.searchFilter)) return;
self.filteredEntries.push(item);
});
@@ -792,11 +799,20 @@ var ModelTable = Table.extend({
}
// set query based on current page, page size, and filter
- self.collection.query({
+ var params = {
start: (self.page - 1) * self.pageSize,
- size: self.pageSize,
- filter: self.searchField.val()
- });
+ size: self.pageSize
+ };
+
+ if (self.searchFilter != null) {
+ params["filter"] = self.searchFilter;
+ }
+
+ if (!_.isEmpty(self.searchAttributes)) {
+ _.extend(params, self.searchAttributes);
+ }
+
+ self.collection.query(params);
// fetch data based on query
self.collection.fetch({
diff --git a/base/tps/shared/webapps/tps/js/token.js b/base/tps/shared/webapps/tps/js/token.js
index fb1c3ea46..e09fa5fc6 100644
--- a/base/tps/shared/webapps/tps/js/token.js
+++ b/base/tps/shared/webapps/tps/js/token.js
@@ -19,6 +19,17 @@
* @author Endi S. Dewata
*/
+// TODO: load labels from server
+var TokenStatus = {
+ UNINITIALIZED : "Uninitialized",
+ ACTIVE : "Active",
+ TEMP_LOST : "Temporarily lost",
+ PERM_LOST : "Permanently lost",
+ DAMAGED : "Physically damaged",
+ TEMP_LOST_PERM_LOST : "Temporarily lost then permanently lost",
+ TERMINATED : "Terminated"
+};
+
var TokenModel = Model.extend({
urlRoot: "/tps/rest/tokens",
parseResponse: function(response) {
@@ -119,6 +130,34 @@ var TokenDialog = Dialog.extend({
}
});
+var TokenFilterDialog = Dialog.extend({
+ loadField: function(input) {
+ var self = this;
+
+ var name = input.attr("name");
+ if (name != "status") {
+ TokenFilterDialog.__super__.loadField.call(self, input);
+ return;
+ }
+
+ var select = input.empty();
+ var status = self.entry.status;
+
+ $('<option/>', {
+ text: "",
+ value: ""
+ }).appendTo(select);
+
+ _.each(TokenStatus, function(value, key) {
+ $('<option/>', {
+ value: key,
+ text: value,
+ selected: key == status
+ }).appendTo(select);
+ });
+ }
+});
+
var TokenPage = EntryPage.extend({
initialize: function(options) {
var self = this;
@@ -314,11 +353,40 @@ var TokensPage = Page.extend({
load: function() {
var self = this;
+ self.tokensTable = self.$("table[name='tokens']");
+
var table = new TokensTable({
- el: $("table[name='tokens']"),
+ el: self.tokensTable,
collection: new TokenCollection()
});
table.render();
+
+ $("a[name='filter']", self.tokensTable).click(function(e) {
+
+ e.preventDefault();
+
+ var dialog = new TokenFilterDialog({
+ el: $("#token-filter-dialog"),
+ actions: ["cancel", "apply"]
+ });
+
+ dialog.entry = _.clone(table.searchAttributes);
+
+ dialog.handler("apply", function() {
+
+ dialog.save();
+
+ table.searchAttributes = _.clone(dialog.entry);
+
+ // show the first page of search results
+ table.page = 1;
+ table.render();
+
+ dialog.close();
+ });
+
+ dialog.open();
+ });
}
});
diff --git a/base/tps/shared/webapps/tps/ui/tokens.html b/base/tps/shared/webapps/tps/ui/tokens.html
index b0782d373..b085c0b06 100644
--- a/base/tps/shared/webapps/tps/ui/tokens.html
+++ b/base/tps/shared/webapps/tps/ui/tokens.html
@@ -30,6 +30,7 @@
<th class="pki-table-actions" colspan="10">
<span name="search">
<input name="search" type="text" placeholder="Search...">
+ <a name="filter" href="#tokens-search">Advanced Search</a>
</span>
<span class="pki-table-buttons">
<button name="add">Add</button>
@@ -127,3 +128,33 @@
</div>
</div>
</div>
+
+<div id="token-filter-dialog" class="modal">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
+ <span class="pficon pficon-close"></span>
+ </button>
+ <h4 class="modal-title">Token Filter</h4>
+ </div>
+ <div class="modal-body">
+ <fieldset>
+ <label>Token ID</label>
+ <input name="tokenID"><br>
+ <label>User ID</label>
+ <input name="userID"><br>
+ <label>Type</label>
+ <input name="type"><br>
+ <label>Status</label>
+ <select name="status">
+ </select><br>
+ </fieldset>
+ </div>
+ <div class="modal-footer">
+ <button name="apply" class="btn btn-primary">Apply</button>
+ <button name="cancel" class="btn btn-default" data-dismiss="modal">Cancel</button>
+ </div>
+ </div>
+ </div>
+</div>
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 226f039f4..a0ca7add3 100644
--- a/base/tps/src/org/dogtagpki/server/tps/rest/TokenService.java
+++ b/base/tps/src/org/dogtagpki/server/tps/rest/TokenService.java
@@ -268,7 +268,14 @@ public class TokenService extends PKIService implements TokenResource {
}
@Override
- public Response findTokens(String filter, Integer start, Integer size) {
+ public Response findTokens(
+ String filter,
+ String tokenID,
+ String userID,
+ String type,
+ String status,
+ Integer start,
+ Integer size) {
CMS.debug("TokenService.findTokens()");
@@ -276,6 +283,24 @@ public class TokenService extends PKIService implements TokenResource {
throw new BadRequestException("Filter is too short.");
}
+ Map<String, String> attributes = new HashMap<String, String>();
+
+ if (StringUtils.isNotEmpty(tokenID)) {
+ attributes.put("id", tokenID);
+ }
+
+ if (StringUtils.isNotEmpty(userID)) {
+ attributes.put("userID", userID);
+ }
+
+ if (StringUtils.isNotEmpty(type)) {
+ attributes.put("type", type);
+ }
+
+ if (StringUtils.isNotEmpty(status)) {
+ attributes.put("status", status);
+ }
+
start = start == null ? 0 : start;
size = size == null ? DEFAULT_SIZE : size;
@@ -283,7 +308,7 @@ public class TokenService extends PKIService implements TokenResource {
TPSSubsystem subsystem = (TPSSubsystem)CMS.getSubsystem(TPSSubsystem.ID);
TokenDatabase database = subsystem.getTokenDatabase();
- Iterator<TokenRecord> tokens = database.findRecords(filter).iterator();
+ Iterator<TokenRecord> tokens = database.findRecords(filter, attributes).iterator();
TokenCollection response = new TokenCollection();
int i = 0;