diff options
author | Endi S. Dewata <edewata@redhat.com> | 2013-09-24 10:10:02 -0400 |
---|---|---|
committer | Endi S. Dewata <edewata@redhat.com> | 2013-10-01 19:25:51 -0400 |
commit | 565741cc9aa0e3f1e056c9c79dc1bec35bbbcc92 (patch) | |
tree | ffc9431f543c0ff652000fcbe9d735d37fce091a | |
parent | e339952dfad45bc0ba1768a9386817eadd49b9dc (diff) | |
download | pki-565741cc9aa0e3f1e056c9c79dc1bec35bbbcc92.tar.gz pki-565741cc9aa0e3f1e056c9c79dc1bec35bbbcc92.tar.xz pki-565741cc9aa0e3f1e056c9c79dc1bec35bbbcc92.zip |
Added TPS authenticator service implementation.
The implementation of the TPS authenticator service has been modified to
use the configuration database to read and write the configuration file.
Ticket #652
14 files changed, 264 insertions, 559 deletions
diff --git a/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorClient.java b/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorClient.java index 82a76cc16..8f4d4fe2b 100644 --- a/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorClient.java +++ b/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorClient.java @@ -64,12 +64,6 @@ public class AuthenticatorClient extends Client { return client.getEntity(response); } - public AuthenticatorData modifyAuthenticator(String authenticatorID, AuthenticatorModification authenticatorModification) { - @SuppressWarnings("unchecked") - ClientResponse<AuthenticatorData> response = (ClientResponse<AuthenticatorData>)resource.modifyAuthenticator(authenticatorID, authenticatorModification); - return client.getEntity(response); - } - public void removeAuthenticator(String authenticatorID) { resource.removeAuthenticator(authenticatorID); } diff --git a/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorCollection.java b/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorCollection.java index e1978c8d3..ea9223603 100644 --- a/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorCollection.java +++ b/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorCollection.java @@ -29,10 +29,10 @@ import com.netscape.certsrv.base.DataCollection; * @author Endi S. Dewata */ @XmlRootElement(name="Authenticators") -public class AuthenticatorCollection extends DataCollection<AuthenticatorInfo> { +public class AuthenticatorCollection extends DataCollection<AuthenticatorData> { @XmlElementRef - public Collection<AuthenticatorInfo> getEntries() { + public Collection<AuthenticatorData> getEntries() { return super.getEntries(); } } diff --git a/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorData.java b/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorData.java index 609d24132..95fb5fefb 100644 --- a/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorData.java +++ b/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorData.java @@ -20,6 +20,11 @@ package com.netscape.certsrv.tps.authenticator; 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; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; @@ -27,6 +32,9 @@ 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.XmlValue; +import javax.xml.bind.annotation.adapters.XmlAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.jboss.resteasy.plugins.providers.atom.Link; @@ -51,7 +59,7 @@ public class AuthenticatorData { String id; String status; - String contents; + Map<String, String> properties = new LinkedHashMap<String, String>(); Link link; @@ -73,13 +81,67 @@ public class AuthenticatorData { this.status = status; } - @XmlElement(name="Contents") - public String getContents() { - return contents; + @XmlElement(name="Properties") + @XmlJavaTypeAdapter(MapAdapter.class) + public Map<String, String> getProperties() { + return properties; } - public void setContents(String contents) { - this.contents = contents; + 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); + } + + public static class MapAdapter extends XmlAdapter<PropertyList, Map<String, String>> { + + public PropertyList marshal(Map<String, String> map) { + PropertyList list = new PropertyList(); + for (Map.Entry<String, String> entry : map.entrySet()) { + Property property = new Property(); + property.name = entry.getKey(); + property.value = entry.getValue(); + list.properties.add(property); + } + return list; + } + + public Map<String, String> unmarshal(PropertyList list) { + Map<String, String> map = new LinkedHashMap<String, String>(); + for (Property property : list.properties) { + map.put(property.name, property.value); + } + return map; + } + } + + public static class PropertyList { + @XmlElement(name="Property") + public List<Property> properties = new ArrayList<Property>(); + } + + public static class Property { + + @XmlAttribute + public String name; + + @XmlValue + public String value; } @XmlElement(name="Link") @@ -95,9 +157,9 @@ public class AuthenticatorData { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((contents == null) ? 0 : contents.hashCode()); result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + ((link == null) ? 0 : link.hashCode()); + result = prime * result + ((properties == null) ? 0 : properties.hashCode()); result = prime * result + ((status == null) ? 0 : status.hashCode()); return result; } @@ -111,11 +173,6 @@ public class AuthenticatorData { if (getClass() != obj.getClass()) return false; AuthenticatorData other = (AuthenticatorData) obj; - if (contents == null) { - if (other.contents != null) - return false; - } else if (!contents.equals(other.contents)) - return false; if (id == null) { if (other.id != null) return false; @@ -126,6 +183,11 @@ public class AuthenticatorData { return false; } else if (!link.equals(other.link)) return false; + if (properties == null) { + if (other.properties != null) + return false; + } else if (!properties.equals(other.properties)) + return false; if (status == null) { if (other.status != null) return false; @@ -158,7 +220,8 @@ public class AuthenticatorData { AuthenticatorData before = new AuthenticatorData(); before.setID("authenticator1"); before.setStatus("ENABLED"); - before.setContents("name=authenticator1\nparam=value"); + before.setProperty("param1", "value1"); + before.setProperty("param2", "value2"); String string = before.toString(); System.out.println(string); diff --git a/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorInfo.java b/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorInfo.java deleted file mode 100644 index 55ce9b4f3..000000000 --- a/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorInfo.java +++ /dev/null @@ -1,152 +0,0 @@ -// --- BEGIN COPYRIGHT BLOCK --- -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; version 2 of the License. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this program; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -// -// (C) 2013 Red Hat, Inc. -// All rights reserved. -// --- END COPYRIGHT BLOCK --- - -package com.netscape.certsrv.tps.authenticator; - -import java.io.StringReader; -import java.io.StringWriter; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -import org.jboss.resteasy.plugins.providers.atom.Link; - -/** - * @author Endi S. Dewata - */ -@XmlRootElement(name="Authenticator") -public class AuthenticatorInfo { - - public static Marshaller marshaller; - public static Unmarshaller unmarshaller; - - static { - try { - marshaller = JAXBContext.newInstance(AuthenticatorInfo.class).createMarshaller(); - marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); - unmarshaller = JAXBContext.newInstance(AuthenticatorInfo.class).createUnmarshaller(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - String id; - String status; - - Link link; - - @XmlAttribute(name="id") - public String getID() { - return id; - } - - public void setID(String id) { - this.id = id; - } - - @XmlElement(name="Status") - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - @XmlElement(name="Link") - public Link getLink() { - return link; - } - - public void setLink(Link link) { - this.link = link; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((id == null) ? 0 : id.hashCode()); - result = prime * result + ((link == null) ? 0 : link.hashCode()); - result = prime * result + ((status == null) ? 0 : status.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - AuthenticatorInfo other = (AuthenticatorInfo) obj; - if (id == null) { - if (other.id != null) - return false; - } else if (!id.equals(other.id)) - return false; - if (link == null) { - if (other.link != null) - return false; - } else if (!link.equals(other.link)) - return false; - if (status == null) { - if (other.status != null) - return false; - } else if (!status.equals(other.status)) - return false; - return true; - } - - public String toString() { - try { - StringWriter sw = new StringWriter(); - marshaller.marshal(this, sw); - return sw.toString(); - - } catch (Exception e) { - return super.toString(); - } - } - - public static AuthenticatorInfo valueOf(String string) throws Exception { - try { - return (AuthenticatorInfo)unmarshaller.unmarshal(new StringReader(string)); - } catch (Exception e) { - return null; - } - } - - public static void main(String args[]) throws Exception { - - AuthenticatorInfo before = new AuthenticatorInfo(); - before.setID("authenticator1"); - before.setStatus("ENABLED"); - - String string = before.toString(); - System.out.println(string); - - AuthenticatorInfo after = AuthenticatorInfo.valueOf(string); - System.out.println(before.equals(after)); - } -} diff --git a/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorModification.java b/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorModification.java deleted file mode 100644 index fb78415e3..000000000 --- a/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorModification.java +++ /dev/null @@ -1,169 +0,0 @@ -// --- BEGIN COPYRIGHT BLOCK --- -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; version 2 of the License. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this program; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -// -// (C) 2013 Red Hat, Inc. -// All rights reserved. -// --- END COPYRIGHT BLOCK --- - -package com.netscape.certsrv.tps.authenticator; - -import java.io.StringReader; -import java.io.StringWriter; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -import org.jboss.resteasy.plugins.providers.atom.Link; - -/** - * @author Endi S. Dewata - */ -@XmlRootElement(name="AuthenticatorModifyRequest") -public class AuthenticatorModification { - - public static Marshaller marshaller; - public static Unmarshaller unmarshaller; - - static { - try { - marshaller = JAXBContext.newInstance(AuthenticatorModification.class).createMarshaller(); - marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); - unmarshaller = JAXBContext.newInstance(AuthenticatorModification.class).createUnmarshaller(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - String id; - String status; - String contents; - - Link link; - - @XmlAttribute(name="id") - public String getID() { - return id; - } - - public void setID(String id) { - this.id = id; - } - - @XmlElement(name="Status") - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - @XmlElement(name="Contents") - public String getContents() { - return contents; - } - - public void setContents(String contents) { - this.contents = contents; - } - - @XmlElement(name="Link") - public Link getLink() { - return link; - } - - public void setLink(Link link) { - this.link = link; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((contents == null) ? 0 : contents.hashCode()); - result = prime * result + ((id == null) ? 0 : id.hashCode()); - result = prime * result + ((link == null) ? 0 : link.hashCode()); - result = prime * result + ((status == null) ? 0 : status.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - AuthenticatorModification other = (AuthenticatorModification) obj; - if (contents == null) { - if (other.contents != null) - return false; - } else if (!contents.equals(other.contents)) - return false; - if (id == null) { - if (other.id != null) - return false; - } else if (!id.equals(other.id)) - return false; - if (link == null) { - if (other.link != null) - return false; - } else if (!link.equals(other.link)) - return false; - if (status == null) { - if (other.status != null) - return false; - } else if (!status.equals(other.status)) - return false; - return true; - } - - public String toString() { - try { - StringWriter sw = new StringWriter(); - marshaller.marshal(this, sw); - return sw.toString(); - - } catch (Exception e) { - return super.toString(); - } - } - - public static AuthenticatorModification valueOf(String string) throws Exception { - try { - return (AuthenticatorModification)unmarshaller.unmarshal(new StringReader(string)); - } catch (Exception e) { - return null; - } - } - - public static void main(String args[]) throws Exception { - - AuthenticatorModification before = new AuthenticatorModification(); - before.setID("authenticator1"); - before.setStatus("ENABLED"); - before.setContents("name=authenticator1\nparam=value"); - - String string = before.toString(); - System.out.println(string); - - AuthenticatorModification after = AuthenticatorModification.valueOf(string); - System.out.println(before.equals(after)); - } -} diff --git a/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorResource.java b/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorResource.java index 3a99a01d1..8e9f7284a 100644 --- a/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorResource.java +++ b/base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorResource.java @@ -64,15 +64,6 @@ public interface AuthenticatorResource { @PathParam("authenticatorID") String authenticatorID, AuthenticatorData authenticatorData); - @POST - @Path("{authenticatorID}") - @ClientResponseType(entityType=AuthenticatorData.class) - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - public Response modifyAuthenticator( - @PathParam("authenticatorID") String authenticatorID, - AuthenticatorModification request); - @DELETE @Path("{authenticatorID}") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) diff --git a/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorAddCLI.java b/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorAddCLI.java index 836f8bd85..59ec2f785 100644 --- a/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorAddCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorAddCLI.java @@ -43,17 +43,12 @@ public class AuthenticatorAddCLI extends CLI { } public void printHelp() { - formatter.printHelp(getFullName() + " <Authenticator ID> [OPTIONS...]", options); + formatter.printHelp(getFullName() + " [OPTIONS...]", options); } public void execute(String[] args) throws Exception { - Option option = new Option(null, "status", true, "Status: ENABLED, DISABLED."); - option.setArgName("status"); - option.setRequired(true); - options.addOption(option); - - option = new Option(null, "contents", true, "Input file containing authenticator attributes."); + Option option = new Option(null, "input", true, "Input file containing authenticator properties."); option.setArgName("file"); option.setRequired(true); options.addOption(option); @@ -71,37 +66,31 @@ public class AuthenticatorAddCLI extends CLI { String[] cmdArgs = cmd.getArgs(); - if (cmdArgs.length != 1) { + if (cmdArgs.length != 0) { printHelp(); System.exit(1); } - String authenticatorID = cmdArgs[0]; - String status = cmd.getOptionValue("status"); - String contents = cmd.getOptionValue("contents"); + String input = cmd.getOptionValue("input"); - AuthenticatorData authenticatorData = new AuthenticatorData(); - authenticatorData.setID(authenticatorID); - authenticatorData.setStatus(status); + AuthenticatorData authenticatorData; - if (contents != null) { - try (BufferedReader in = new BufferedReader(new FileReader(contents)); - StringWriter sw = new StringWriter(); - PrintWriter out = new PrintWriter(sw, true)) { + try (BufferedReader in = new BufferedReader(new FileReader(input)); + StringWriter sw = new StringWriter(); + PrintWriter out = new PrintWriter(sw, true)) { - String line; - while ((line = in.readLine()) != null) { - out.println(line); - } - - authenticatorData.setContents(sw.toString()); + String line; + while ((line = in.readLine()) != null) { + out.println(line); } + + authenticatorData = AuthenticatorData.valueOf(sw.toString()); } authenticatorData = authenticatorCLI.authenticatorClient.addAuthenticator(authenticatorData); - MainCLI.printMessage("Added authenticator \"" + authenticatorID + "\""); + MainCLI.printMessage("Added authenticator \"" + authenticatorData.getID() + "\""); - AuthenticatorCLI.printAuthenticatorData(authenticatorData); + AuthenticatorCLI.printAuthenticatorData(authenticatorData, true); } } diff --git a/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorCLI.java b/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorCLI.java index 198982a06..ebdf80890 100644 --- a/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorCLI.java @@ -18,16 +18,13 @@ package com.netscape.cmstools.tps.authenticator; -import java.io.BufferedReader; import java.io.IOException; -import java.io.StringReader; -import java.util.Arrays; +import java.util.Map; import org.jboss.resteasy.plugins.providers.atom.Link; import com.netscape.certsrv.tps.authenticator.AuthenticatorClient; import com.netscape.certsrv.tps.authenticator.AuthenticatorData; -import com.netscape.certsrv.tps.authenticator.AuthenticatorInfo; import com.netscape.cmstools.cli.CLI; /** @@ -52,51 +49,19 @@ public class AuthenticatorCLI extends CLI { client = parent.getClient(); authenticatorClient = (AuthenticatorClient)parent.getClient("authenticator"); - if (args.length == 0) { - printHelp(); - System.exit(1); - } - - String command = args[0]; - String[] commandArgs = Arrays.copyOfRange(args, 1, args.length); - - if (command == null) { - printHelp(); - System.exit(1); - } - - CLI module = getModule(command); - if (module != null) { - module.execute(commandArgs); - - } else { - System.err.println("Error: Invalid command \"" + command + "\""); - printHelp(); - System.exit(1); - } - } - - public static void printAuthenticatorInfo(AuthenticatorInfo authenticatorInfo) { - System.out.println(" Authenticator ID: " + authenticatorInfo.getID()); - if (authenticatorInfo.getStatus() != null) System.out.println(" Status: " + authenticatorInfo.getStatus()); - - Link link = authenticatorInfo.getLink(); - if (verbose && link != null) { - System.out.println(" Link: " + link.getHref()); - } + super.execute(args); } - public static void printAuthenticatorData(AuthenticatorData authenticatorData) throws IOException { + public static void printAuthenticatorData(AuthenticatorData authenticatorData, boolean showProperties) throws IOException { System.out.println(" Authenticator ID: " + authenticatorData.getID()); if (authenticatorData.getStatus() != null) System.out.println(" Status: " + authenticatorData.getStatus()); - System.out.println(" Contents:"); - String contents = authenticatorData.getContents(); - if (contents != null) { - BufferedReader in = new BufferedReader(new StringReader(contents)); - String line; - while ((line = in.readLine()) != null) { - System.out.println(" " + line); + if (showProperties) { + System.out.println(" Properties:"); + Map<String, String> properties = authenticatorData.getProperties(); + for (String name : properties.keySet()) { + String value = properties.get(name); + System.out.println(" " + name + ": " + value); } } diff --git a/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorFindCLI.java b/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorFindCLI.java index 34c291fd1..2ff8288a0 100644 --- a/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorFindCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorFindCLI.java @@ -24,7 +24,7 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import com.netscape.certsrv.tps.authenticator.AuthenticatorCollection; -import com.netscape.certsrv.tps.authenticator.AuthenticatorInfo; +import com.netscape.certsrv.tps.authenticator.AuthenticatorData; import com.netscape.cmstools.cli.CLI; import com.netscape.cmstools.cli.MainCLI; @@ -35,9 +35,9 @@ public class AuthenticatorFindCLI extends CLI { public AuthenticatorCLI authenticatorCLI; - public AuthenticatorFindCLI(AuthenticatorCLI tokenCLI) { - super("find", "Find authenticators", tokenCLI); - this.authenticatorCLI = tokenCLI; + public AuthenticatorFindCLI(AuthenticatorCLI authenticatorCLI) { + super("find", "Find authenticators", authenticatorCLI); + this.authenticatorCLI = authenticatorCLI; } public void printHelp() { @@ -72,13 +72,13 @@ public class AuthenticatorFindCLI extends CLI { Integer size = s == null ? null : Integer.valueOf(s); AuthenticatorCollection result = authenticatorCLI.authenticatorClient.findAuthenticators(start, size); - Collection<AuthenticatorInfo> authenticators = result.getEntries(); + Collection<AuthenticatorData> authenticators = result.getEntries(); MainCLI.printMessage(authenticators.size() + " authenticator(s) matched"); boolean first = true; - for (AuthenticatorInfo authenticatorInfo : authenticators) { + for (AuthenticatorData authenticatorData : authenticators) { if (first) { first = false; @@ -86,7 +86,7 @@ public class AuthenticatorFindCLI extends CLI { System.out.println(); } - AuthenticatorCLI.printAuthenticatorInfo(authenticatorInfo); + AuthenticatorCLI.printAuthenticatorData(authenticatorData, false); } MainCLI.printMessage("Number of entries returned " + authenticators.size()); diff --git a/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorModifyCLI.java b/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorModifyCLI.java index c5fc01e07..292e03f75 100644 --- a/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorModifyCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorModifyCLI.java @@ -27,7 +27,6 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import com.netscape.certsrv.tps.authenticator.AuthenticatorData; -import com.netscape.certsrv.tps.authenticator.AuthenticatorModification; import com.netscape.cmstools.cli.CLI; import com.netscape.cmstools.cli.MainCLI; @@ -53,7 +52,7 @@ public class AuthenticatorModifyCLI extends CLI { option.setArgName("status"); options.addOption(option); - option = new Option(null, "contents", true, "Input file containing authenticator attributes."); + option = new Option(null, "input", true, "Input file containing authenticator properties."); option.setArgName("file"); options.addOption(option); @@ -77,31 +76,26 @@ public class AuthenticatorModifyCLI extends CLI { String authenticatorID = cmdArgs[0]; String status = cmd.getOptionValue("status"); - String contents = cmd.getOptionValue("contents"); + String input = cmd.getOptionValue("input"); - AuthenticatorModification authenticatorModification = new AuthenticatorModification(); - authenticatorModification.setID(authenticatorID); - authenticatorModification.setStatus(status); + AuthenticatorData authenticatorData; - if (contents != null) { - // load contents from file + try (BufferedReader in = new BufferedReader(new FileReader(input)); StringWriter sw = new StringWriter(); - try (BufferedReader in = new BufferedReader(new FileReader(contents)); - PrintWriter out = new PrintWriter(sw, true)) { + PrintWriter out = new PrintWriter(sw, true)) { - String line; - while ((line = in.readLine()) != null) { - out.println(line); - } - - authenticatorModification.setContents(sw.toString()); + String line; + while ((line = in.readLine()) != null) { + out.println(line); } + + authenticatorData = AuthenticatorData.valueOf(sw.toString()); } - AuthenticatorData authenticatorData = authenticatorCLI.authenticatorClient.modifyAuthenticator(authenticatorID, authenticatorModification); + authenticatorData = authenticatorCLI.authenticatorClient.updateAuthenticator(authenticatorID, authenticatorData); MainCLI.printMessage("Modified authenticator \"" + authenticatorID + "\""); - AuthenticatorCLI.printAuthenticatorData(authenticatorData); + AuthenticatorCLI.printAuthenticatorData(authenticatorData, true); } } diff --git a/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorShowCLI.java b/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorShowCLI.java index d4549aa0f..af1290aa0 100644 --- a/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorShowCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorShowCLI.java @@ -46,7 +46,7 @@ public class AuthenticatorShowCLI extends CLI { public void execute(String[] args) throws Exception { - Option option = new Option(null, "contents", true, "Output file to store authenticator attributes."); + Option option = new Option(null, "output", true, "Output file to store authenticator properties."); option.setArgName("file"); options.addOption(option); @@ -69,19 +69,19 @@ public class AuthenticatorShowCLI extends CLI { } String authenticatorID = args[0]; - String file = cmd.getOptionValue("contents"); + String output = cmd.getOptionValue("output"); AuthenticatorData authenticatorData = authenticatorCLI.authenticatorClient.getAuthenticator(authenticatorID); - MainCLI.printMessage("Authenticator \"" + authenticatorID + "\""); - AuthenticatorCLI.printAuthenticatorData(authenticatorData); + if (output == null) { + MainCLI.printMessage("Authenticator \"" + authenticatorID + "\""); + AuthenticatorCLI.printAuthenticatorData(authenticatorData, true); - if (file != null) { - // store contents to file - PrintWriter out = new PrintWriter(new FileWriter(file)); - String contents = authenticatorData.getContents(); - if (contents != null) out.print(contents); - out.close(); + } else { + try (PrintWriter out = new PrintWriter(new FileWriter(output))) { + out.println(authenticatorData); + } + MainCLI.printMessage("Stored authenticator \"" + authenticatorID + "\" into " + output); } } } diff --git a/base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorDatabase.java b/base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorDatabase.java index 42fe9aae4..f7347a497 100644 --- a/base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorDatabase.java +++ b/base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorDatabase.java @@ -18,11 +18,18 @@ package org.dogtagpki.server.tps.authenticator; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; + +import org.dogtagpki.server.tps.config.ConfigDatabase; +import org.dogtagpki.server.tps.config.ConfigRecord; + +import com.netscape.certsrv.apps.CMS; import com.netscape.cmscore.dbs.Database; /** - * This class implements in-memory connection database. In the future this - * will be replaced with LDAP database. + * This class provides access to the authenticators in CS.cfg. * * @author Endi S. Dewata */ @@ -30,31 +37,95 @@ public class AuthenticatorDatabase extends Database<AuthenticatorRecord> { public AuthenticatorDatabase() { super("Authenticator"); + } + + public AuthenticatorRecord createAuthenticatorRecord(ConfigDatabase configDatabase, ConfigRecord configRecord, String authenticatorID) { + AuthenticatorRecord authenticatorRecord = new AuthenticatorRecord(); + authenticatorRecord.setID(authenticatorID); + Map<String, String> properties = configDatabase.getProperties(configRecord, authenticatorID); + authenticatorRecord.setProperties(properties); + return authenticatorRecord; + } + + @Override + public Collection<AuthenticatorRecord> getRecords() throws Exception { + + Collection<AuthenticatorRecord> result = new ArrayList<AuthenticatorRecord>(); + ConfigDatabase configDatabase = new ConfigDatabase(); + ConfigRecord configRecord = configDatabase.getRecord("Authentication_Sources"); - // add sample records - try { - AuthenticatorRecord record1 = new AuthenticatorRecord(); - record1.setID("authenticator1"); - record1.setStatus("ENABLED"); - record1.setContents("name=authenticator1\nparam=value"); - addRecord(record1); - - AuthenticatorRecord record2 = new AuthenticatorRecord(); - record2.setID("authenticator2"); - record2.setStatus("DISABLED"); - record2.setContents("name=authenticator2\nparam=value"); - addRecord(record2); - - } catch (Exception e) { - e.printStackTrace(); + for (String authenticatorID : configRecord.getKeys()) { + AuthenticatorRecord authenticatorRecord = createAuthenticatorRecord(configDatabase, configRecord, authenticatorID); + result.add(authenticatorRecord); } + + return result; + } + + @Override + public AuthenticatorRecord getRecord(String authenticatorID) throws Exception { + + ConfigDatabase configDatabase = new ConfigDatabase(); + ConfigRecord configRecord = configDatabase.getRecord("Authentication_Sources"); + + return createAuthenticatorRecord(configDatabase, configRecord, authenticatorID); + } + + @Override + public void addRecord(String authenticatorID, AuthenticatorRecord authenticatorRecord) throws Exception { + + CMS.debug("AuthenticatorDatabase.addRecord(\"" + authenticatorID + "\")"); + ConfigDatabase configDatabase = new ConfigDatabase(); + ConfigRecord configRecord = configDatabase.getRecord("Authentication_Sources"); + + // validate new properties + Map<String, String> properties = authenticatorRecord.getProperties(); + configDatabase.validateProperties(configRecord, authenticatorID, properties); + + // add new connection + configRecord.addKey(authenticatorID); + configDatabase.updateRecord("Authentication_Sources", configRecord); + + // store new properties + configDatabase.addProperties(configRecord, authenticatorID, properties); + + configDatabase.commit(); } - public void addRecord(AuthenticatorRecord authenticatorRecord) throws Exception { - addRecord(authenticatorRecord.getID(), authenticatorRecord); + @Override + public void updateRecord(String authenticatorID, AuthenticatorRecord authenticatorRecord) throws Exception { + + CMS.debug("AuthenticatorDatabase.updateRecord(\"" + authenticatorID + "\")"); + ConfigDatabase configDatabase = new ConfigDatabase(); + ConfigRecord configRecord = configDatabase.getRecord("Authentication_Sources"); + + // validate new properties + Map<String, String> properties = authenticatorRecord.getProperties(); + configDatabase.validateProperties(configRecord, authenticatorID, properties); + + // remove old properties + configDatabase.removeProperties(configRecord, authenticatorID); + + // add new properties + configDatabase.addProperties(configRecord, authenticatorID, properties); + + configDatabase.commit(); } - public void updateRecord(AuthenticatorRecord authenticatorRecord) throws Exception { - updateRecord(authenticatorRecord.getID(), authenticatorRecord); + @Override + public void removeRecord(String authenticatorID) throws Exception { + + CMS.debug("AuthenticatorDatabase.removeRecord(\"" + authenticatorID + "\")"); + ConfigDatabase configDatabase = new ConfigDatabase(); + ConfigRecord configRecord = configDatabase.getRecord("Authentication_Sources"); + + // remove properties + configDatabase.removeProperties(configRecord, authenticatorID); + + // remove connection + configRecord.removeKey(authenticatorID); + configDatabase.updateRecord("Authentication_Sources", configRecord); + + configDatabase.commit(); } } diff --git a/base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorRecord.java b/base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorRecord.java index 46fa43876..74591bb79 100644 --- a/base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorRecord.java +++ b/base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorRecord.java @@ -18,6 +18,10 @@ package org.dogtagpki.server.tps.authenticator; +import java.util.Collection; +import java.util.Map; +import java.util.TreeMap; + /** * @author Endi S. Dewata @@ -26,7 +30,7 @@ public class AuthenticatorRecord { String id; String status; - String contents; + Map<String, String> properties = new TreeMap<String, String>(); public String getID() { return id; @@ -44,20 +48,37 @@ public class AuthenticatorRecord { this.status = status; } - public String getContents() { - return contents; + public Map<String, String> getProperties() { + return properties; + } + + 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 setContents(String contents) { - this.contents = contents; + public void setProperty(String name, String value) { + properties.put(name, value); + } + + public String removeProperty(String name) { + return properties.remove(name); } @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((contents == null) ? 0 : contents.hashCode()); result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((properties == null) ? 0 : properties.hashCode()); result = prime * result + ((status == null) ? 0 : status.hashCode()); return result; } @@ -71,16 +92,16 @@ public class AuthenticatorRecord { if (getClass() != obj.getClass()) return false; AuthenticatorRecord other = (AuthenticatorRecord) obj; - if (contents == null) { - if (other.contents != null) - return false; - } else if (!contents.equals(other.contents)) - return false; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; + if (properties == null) { + if (other.properties != null) + return false; + } else if (!properties.equals(other.properties)) + return false; if (status == null) { if (other.status != null) return false; diff --git a/base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorService.java b/base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorService.java index 058bf0f8b..e1d7ed5cf 100644 --- a/base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorService.java +++ b/base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorService.java @@ -38,8 +38,6 @@ import com.netscape.certsrv.apps.CMS; import com.netscape.certsrv.base.PKIException; import com.netscape.certsrv.tps.authenticator.AuthenticatorCollection; import com.netscape.certsrv.tps.authenticator.AuthenticatorData; -import com.netscape.certsrv.tps.authenticator.AuthenticatorInfo; -import com.netscape.certsrv.tps.authenticator.AuthenticatorModification; import com.netscape.certsrv.tps.authenticator.AuthenticatorResource; import com.netscape.cms.servlet.base.PKIService; @@ -66,41 +64,16 @@ public class AuthenticatorService extends PKIService implements AuthenticatorRes CMS.debug("AuthenticatorService.<init>()"); } - public AuthenticatorInfo createAuthenticatorInfo(AuthenticatorRecord authenticatorRecord) { - - AuthenticatorInfo authenticatorInfo = new AuthenticatorInfo(); - authenticatorInfo.setID(authenticatorRecord.getID()); - authenticatorInfo.setStatus(authenticatorRecord.getStatus()); + public AuthenticatorData createAuthenticatorData(AuthenticatorRecord authenticatorRecord) throws UnsupportedEncodingException { String authenticatorID = authenticatorRecord.getID(); - try { - authenticatorID = URLEncoder.encode(authenticatorID, "UTF-8"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - throw new PKIException(e.getMessage()); - } - - URI uri = uriInfo.getBaseUriBuilder().path(AuthenticatorResource.class).path("{authenticatorID}").build(authenticatorID); - authenticatorInfo.setLink(new Link("self", uri)); - - return authenticatorInfo; - } - - public AuthenticatorData createAuthenticatorData(AuthenticatorRecord authenticatorRecord) { AuthenticatorData authenticatorData = new AuthenticatorData(); - authenticatorData.setID(authenticatorRecord.getID()); + authenticatorData.setID(authenticatorID); authenticatorData.setStatus(authenticatorRecord.getStatus()); - authenticatorData.setContents(authenticatorRecord.getContents()); - - String authenticatorID = authenticatorRecord.getID(); - try { - authenticatorID = URLEncoder.encode(authenticatorID, "UTF-8"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - throw new PKIException(e.getMessage()); - } + authenticatorData.setProperties(authenticatorRecord.getProperties()); + authenticatorID = URLEncoder.encode(authenticatorID, "UTF-8"); URI uri = uriInfo.getBaseUriBuilder().path(AuthenticatorResource.class).path("{authenticatorID}").build(authenticatorID); authenticatorData.setLink(new Link("self", uri)); @@ -112,7 +85,7 @@ public class AuthenticatorService extends PKIService implements AuthenticatorRes AuthenticatorRecord authenticatorRecord = new AuthenticatorRecord(); authenticatorRecord.setID(authenticatorData.getID()); authenticatorRecord.setStatus(authenticatorData.getStatus()); - authenticatorRecord.setContents(authenticatorData.getContents()); + authenticatorRecord.setProperties(authenticatorData.getProperties()); return authenticatorRecord; } @@ -140,7 +113,7 @@ public class AuthenticatorService extends PKIService implements AuthenticatorRes // return entries up to the page size for ( ; i<start+size && authenticators.hasNext(); i++) { - response.addEntry(createAuthenticatorInfo(authenticators.next())); + response.addEntry(createAuthenticatorData(authenticators.next())); } // count the total entries @@ -190,7 +163,7 @@ public class AuthenticatorService extends PKIService implements AuthenticatorRes TPSSubsystem subsystem = (TPSSubsystem)CMS.getSubsystem(TPSSubsystem.ID); AuthenticatorDatabase database = subsystem.getAuthenticatorDatabase(); - database.addRecord(createAuthenticatorRecord(authenticatorData)); + database.addRecord(authenticatorData.getID(), createAuthenticatorRecord(authenticatorData)); authenticatorData = createAuthenticatorData(database.getRecord(authenticatorData.getID())); return Response @@ -214,7 +187,7 @@ public class AuthenticatorService extends PKIService implements AuthenticatorRes TPSSubsystem subsystem = (TPSSubsystem)CMS.getSubsystem(TPSSubsystem.ID); AuthenticatorDatabase database = subsystem.getAuthenticatorDatabase(); - database.updateRecord(createAuthenticatorRecord(authenticatorData)); + database.updateRecord(authenticatorID, createAuthenticatorRecord(authenticatorData)); authenticatorData = createAuthenticatorData(database.getRecord(authenticatorID)); return Response @@ -229,41 +202,6 @@ public class AuthenticatorService extends PKIService implements AuthenticatorRes } @Override - public Response modifyAuthenticator(String authenticatorID, AuthenticatorModification request) { - - CMS.debug("AuthenticatorService.modifyAuthenticator(\"" + authenticatorID + "\", request"); - - try { - TPSSubsystem subsystem = (TPSSubsystem)CMS.getSubsystem(TPSSubsystem.ID); - AuthenticatorDatabase database = subsystem.getAuthenticatorDatabase(); - - AuthenticatorRecord authenticatorRecord = database.getRecord(authenticatorID); - - String status = request.getStatus(); - if (status != null) { - authenticatorRecord.setStatus(status); - } - - String contents = request.getContents(); - if (contents != null) { - authenticatorRecord.setContents(contents); - } - - database.updateRecord(authenticatorRecord); - AuthenticatorData authenticatorData = createAuthenticatorData(database.getRecord(authenticatorID)); - - return Response - .ok(authenticatorData) - .type(MediaType.APPLICATION_XML) - .build(); - - } catch (Exception e) { - e.printStackTrace(); - throw new PKIException(e.getMessage()); - } - } - - @Override public void removeAuthenticator(String authenticatorID) { CMS.debug("AuthenticatorService.removeAuthenticator(\"" + authenticatorID + "\")"); |