diff options
| author | Endi S. Dewata <edewata@redhat.com> | 2014-03-27 18:24:39 -0400 |
|---|---|---|
| committer | Endi S. Dewata <edewata@redhat.com> | 2014-03-29 18:20:41 -0400 |
| commit | 16ee3c262fbac7d1475ad006f40e35b6bb9a4213 (patch) | |
| tree | 245523fe2787cae544f103ad1c3660fc0c245992 /base | |
| parent | c6a22f99b1ee222d512b60fdca181e29e09ff96a (diff) | |
| download | pki-16ee3c262fbac7d1475ad006f40e35b6bb9a4213.tar.gz pki-16ee3c262fbac7d1475ad006f40e35b6bb9a4213.tar.xz pki-16ee3c262fbac7d1475ad006f40e35b6bb9a4213.zip | |
Refactored TPS profiles.
The TPS profile has been modified to use PATCH for update operation as
required by Backbone. The ProfileData class has been modified to accept
null properties to indicate that the properties are not being updated.
The ProfileModel class has been modified to use JSON data type for
enable and disable operations.
Ticket #654
Diffstat (limited to 'base')
6 files changed, 63 insertions, 64 deletions
diff --git a/base/common/src/com/netscape/certsrv/tps/profile/ProfileData.java b/base/common/src/com/netscape/certsrv/tps/profile/ProfileData.java index d733777aa..81e0dea3a 100644 --- a/base/common/src/com/netscape/certsrv/tps/profile/ProfileData.java +++ b/base/common/src/com/netscape/certsrv/tps/profile/ProfileData.java @@ -21,7 +21,6 @@ package com.netscape.certsrv.tps.profile; import java.io.StringReader; import java.io.StringWriter; import java.util.ArrayList; -import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -62,7 +61,7 @@ public class ProfileData { String id; String status; - Map<String, String> properties = new LinkedHashMap<String, String>(); + Map<String, String> properties; Link link; @@ -91,24 +90,7 @@ public class ProfileData { } public void setProperties(Map<String, String> properties) { - this.properties.clear(); - this.properties.putAll(properties); - } - - public Collection<String> getPropertyNames() { - return properties.keySet(); - } - - public String getProperty(String name) { - return properties.get(name); - } - - public void setProperty(String name, String value) { - properties.put(name, value); - } - - public String removeProperty(String name) { - return properties.remove(name); + this.properties = properties; } public static class MapAdapter extends XmlAdapter<PropertyList, Map<String, String>> { @@ -223,8 +205,11 @@ public class ProfileData { ProfileData before = new ProfileData(); before.setID("profile1"); before.setStatus("ENABLED"); - before.setProperty("param1", "value1"); - before.setProperty("param2", "value2"); + + Map<String, String> properties = new LinkedHashMap<String, String>(); + properties.put("param1", "value1"); + properties.put("param2", "value2"); + before.setProperties(properties); String string = before.toString(); System.out.println(string); diff --git a/base/common/src/com/netscape/certsrv/tps/profile/ProfileResource.java b/base/common/src/com/netscape/certsrv/tps/profile/ProfileResource.java index 50a205cd7..48d3a8c4d 100644 --- a/base/common/src/com/netscape/certsrv/tps/profile/ProfileResource.java +++ b/base/common/src/com/netscape/certsrv/tps/profile/ProfileResource.java @@ -20,7 +20,6 @@ package com.netscape.certsrv.tps.profile; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; -import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; @@ -30,6 +29,7 @@ import org.jboss.resteasy.annotations.ClientResponseType; import com.netscape.certsrv.acls.ACLMapping; import com.netscape.certsrv.authentication.AuthMethodMapping; +import com.netscape.certsrv.base.PATCH; /** @@ -57,7 +57,7 @@ public interface ProfileResource { @ClientResponseType(entityType=ProfileData.class) public Response addProfile(ProfileData profileData); - @PUT + @PATCH @Path("{profileID}") @ACLMapping("profiles.modify") @ClientResponseType(entityType=ProfileData.class) diff --git a/base/java-tools/src/com/netscape/cmstools/tps/profile/ProfileCLI.java b/base/java-tools/src/com/netscape/cmstools/tps/profile/ProfileCLI.java index 8b02f2e57..b27578ffc 100644 --- a/base/java-tools/src/com/netscape/cmstools/tps/profile/ProfileCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/tps/profile/ProfileCLI.java @@ -61,9 +61,11 @@ public class ProfileCLI extends CLI { if (showProperties) { System.out.println(" Properties:"); Map<String, String> properties = profileData.getProperties(); - for (String name : properties.keySet()) { - String value = properties.get(name); - System.out.println(" " + name + ": " + value); + if (properties != null) { + for (String name : properties.keySet()) { + String value = properties.get(name); + System.out.println(" " + name + ": " + value); + } } } diff --git a/base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgRecord.java b/base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgRecord.java index f8e07b43e..854244150 100644 --- a/base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgRecord.java +++ b/base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgRecord.java @@ -54,6 +54,7 @@ public class CSCfgRecord { public void setProperties(Map<String, String> properties) { this.properties.clear(); + if (properties == null) return; this.properties.putAll(properties); } diff --git a/base/tps-tomcat/shared/webapps/tps/js/profile.js b/base/tps-tomcat/shared/webapps/tps/js/profile.js index 6b496e560..410328ca8 100644 --- a/base/tps-tomcat/shared/webapps/tps/js/profile.js +++ b/base/tps-tomcat/shared/webapps/tps/js/profile.js @@ -24,46 +24,45 @@ var ProfileModel = Model.extend({ parseResponse: function(response) { return { id: response.id, + profileID: response.id, status: response.Status, properties: response.Properties.Property }; }, - parseXML: function(data) { - var xml = $(data); - var entry = $("Profile", xml); - var status = $("Status", entry); - return { - id: entry.attr("id"), - status: status.text() - }; - }, createRequest: function(attributes) { return { - id: attributes.id, - Status: attributes.status + id: attributes.profileID, + Status: attributes.status, + Properties: { + Property: attributes.properties + } }; }, enable: function(options) { var self = this; - $.post(self.url() + "?action=enable") - .done(function(data, textStatus, jqXHR) { - self.set(self.parseXML(data)); - options.success.call(self, data, textStatus, jqXHR); - }) - .fail(function(jqXHR, textStatus, errorThrown) { - options.error.call(self, jqXHR, textStatus, errorThrown); - }); + $.ajax({ + type: "POST", + url: self.url() + "?action=enable", + dataType: "json" + }).done(function(data, textStatus, jqXHR) { + self.set(self.parseResponse(data)); + if (options.success) options.success.call(self, data, textStatus, jqXHR); + }).fail(function(jqXHR, textStatus, errorThrown) { + if (options.error) options.error.call(self, jqXHR, textStatus, errorThrown); + }); }, disable: function(options) { var self = this; - $.post(self.url() + "?action=disable") - .done(function(data, textStatus, jqXHR) { - self.set(self.parseXML(data)); - options.success.call(self, data, textStatus, jqXHR); - }) - .fail(function(jqXHR, textStatus, errorThrown) { - options.error.call(self, jqXHR, textStatus, errorThrown); - }); + $.ajax({ + type: "POST", + url: self.url() + "?action=disable", + dataType: "json" + }).done(function(data, textStatus, jqXHR) { + self.set(self.parseResponse(data)); + if (options.success) options.success.call(self, data, textStatus, jqXHR); + }).fail(function(jqXHR, textStatus, errorThrown) { + if (options.error) options.error.call(self, jqXHR, textStatus, errorThrown); + }); } }); diff --git a/base/tps-tomcat/src/org/dogtagpki/server/tps/rest/ProfileService.java b/base/tps-tomcat/src/org/dogtagpki/server/tps/rest/ProfileService.java index 723075a40..d21b8939e 100644 --- a/base/tps-tomcat/src/org/dogtagpki/server/tps/rest/ProfileService.java +++ b/base/tps-tomcat/src/org/dogtagpki/server/tps/rest/ProfileService.java @@ -23,6 +23,7 @@ import java.net.URI; import java.net.URLEncoder; import java.security.Principal; import java.util.Iterator; +import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.Context; @@ -206,23 +207,34 @@ public class ProfileService extends PKIService implements ProfileResource { ProfileRecord record = database.getRecord(profileID); - String status = record.getStatus(); - if (!"Disabled".equals(status)) { + // only disabled profile can be updated + if (!"Disabled".equals(record.getStatus())) { throw new ForbiddenException("Unable to update profile " + profileID); } - status = profileData.getStatus(); - if (!"Enabled".equals(status)) { - throw new ForbiddenException("Invalid profile status: " + status); + // update status if specified + String status = profileData.getStatus(); + if (status != null && !"Disabled".equals(status)) { + if (!"Enabled".equals(status)) { + throw new ForbiddenException("Invalid profile status: " + status); + } + + // if user doesn't have rights, set to pending + Principal principal = servletRequest.getUserPrincipal(); + if (database.requiresApproval() && !database.canApprove(principal)) { + status = "Pending_Approval"; + } + + // enable profile + record.setStatus(status); } - Principal principal = servletRequest.getUserPrincipal(); - if (database.requiresApproval() && !database.canApprove(principal)) { - status = "Pending_Approval"; + // update properties if specified + Map<String, String> properties = profileData.getProperties(); + if (properties != null) { + record.setProperties(properties); } - record.setStatus(status); - record.setProperties(profileData.getProperties()); database.updateRecord(profileID, record); profileData = createProfileData(database.getRecord(profileID)); |
