summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2013-09-24 10:10:02 -0400
committerEndi S. Dewata <edewata@redhat.com>2013-10-01 19:25:51 -0400
commit565741cc9aa0e3f1e056c9c79dc1bec35bbbcc92 (patch)
treeffc9431f543c0ff652000fcbe9d735d37fce091a
parente339952dfad45bc0ba1768a9386817eadd49b9dc (diff)
downloadpki-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
-rw-r--r--base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorClient.java6
-rw-r--r--base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorCollection.java4
-rw-r--r--base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorData.java89
-rw-r--r--base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorInfo.java152
-rw-r--r--base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorModification.java169
-rw-r--r--base/common/src/com/netscape/certsrv/tps/authenticator/AuthenticatorResource.java9
-rw-r--r--base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorAddCLI.java41
-rw-r--r--base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorCLI.java53
-rw-r--r--base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorFindCLI.java14
-rw-r--r--base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorModifyCLI.java30
-rw-r--r--base/java-tools/src/com/netscape/cmstools/tps/authenticator/AuthenticatorShowCLI.java20
-rw-r--r--base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorDatabase.java115
-rw-r--r--base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorRecord.java43
-rw-r--r--base/tps-tomcat/src/org/dogtagpki/server/tps/authenticator/AuthenticatorService.java78
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 + "\")");