summaryrefslogtreecommitdiffstats
path: root/pki/base/common/src/com/netscape/certsrv/profile
diff options
context:
space:
mode:
Diffstat (limited to 'pki/base/common/src/com/netscape/certsrv/profile')
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/CertInfoProfile.java112
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/EDeferException.java47
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/EProfileException.java43
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/ERejectException.java45
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/ICertInfoPolicyDefault.java36
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/IEnrollProfile.java158
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/IPolicyConstraint.java90
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/IPolicyDefault.java144
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/IProfile.java407
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/IProfileAuthenticator.java118
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/IProfileContext.java48
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/IProfileEx.java41
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/IProfileInput.java116
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/IProfileOutput.java117
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/IProfilePolicy.java49
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/IProfileSubsystem.java136
-rw-r--r--pki/base/common/src/com/netscape/certsrv/profile/IProfileUpdater.java75
17 files changed, 1782 insertions, 0 deletions
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/CertInfoProfile.java b/pki/base/common/src/com/netscape/certsrv/profile/CertInfoProfile.java
new file mode 100644
index 000000000..8593da163
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/CertInfoProfile.java
@@ -0,0 +1,112 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import java.util.*;
+import com.netscape.certsrv.base.*;
+import com.netscape.certsrv.common.*;
+import com.netscape.certsrv.request.*;
+import com.netscape.certsrv.property.*;
+import com.netscape.certsrv.authentication.*;
+import com.netscape.certsrv.apps.*;
+
+import netscape.security.x509.*;
+
+public class CertInfoProfile
+{
+ private Vector mDefaults = new Vector();
+ private String mName = null;
+ private String mID = null;
+ private String mDescription = null;
+ private String mProfileIDMapping = null;
+ private String mProfileSetIDMapping = null;
+
+ public CertInfoProfile(String cfg) throws Exception
+ {
+ IConfigStore config = CMS.createFileConfigStore(cfg);
+ mID = config.getString("id");
+ mName = config.getString("name");
+ mDescription = config.getString("description");
+ mProfileIDMapping = config.getString("profileIDMapping");
+ mProfileSetIDMapping = config.getString("profileSetIDMapping");
+ StringTokenizer st = new StringTokenizer(config.getString("list"), ",");
+ while (st.hasMoreTokens()) {
+ String id = (String)st.nextToken();
+ String c = config.getString(id + ".default.class");
+ try {
+ /* load defaults */
+ ICertInfoPolicyDefault def = (ICertInfoPolicyDefault)
+ Class.forName(c).newInstance();
+ init(config.getSubStore(id + ".default"), def);
+ mDefaults.addElement(def);
+ } catch (Exception e) {
+ CMS.debug("CertInfoProfile: " + e.toString());
+ }
+ }
+ }
+
+ private void init(IConfigStore config, ICertInfoPolicyDefault def)
+ throws Exception
+ {
+ try {
+ def.init(null, config);
+ } catch (Exception e) {
+ CMS.debug("CertInfoProfile.init: " + e.toString());
+ }
+ }
+
+ public String getID()
+ {
+ return mID;
+ }
+
+ public String getName()
+ {
+ return mName;
+ }
+
+ public String getDescription()
+ {
+ return mDescription;
+ }
+
+ public String getProfileIDMapping()
+ {
+ return mProfileIDMapping;
+ }
+
+ public String getProfileSetIDMapping()
+ {
+ return mProfileSetIDMapping;
+ }
+
+ public void populate(X509CertInfo info)
+ {
+ Enumeration e1 = mDefaults.elements();
+ while (e1.hasMoreElements()) {
+ ICertInfoPolicyDefault def =
+ (ICertInfoPolicyDefault)e1.nextElement();
+ try {
+ def.populate(null /* request */, info);
+ } catch (Exception e) {
+ CMS.debug(e);
+ CMS.debug("CertInfoProfile.populate: " + e.toString());
+ }
+ }
+ }
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/EDeferException.java b/pki/base/common/src/com/netscape/certsrv/profile/EDeferException.java
new file mode 100644
index 000000000..6c48fcb91
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/EDeferException.java
@@ -0,0 +1,47 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import com.netscape.certsrv.base.*;
+
+/**
+ * This represents a profile specific exception. The
+ * framework raises this exception when a request is
+ * deferred.
+ * <p>
+ * A deferred request will not be processed
+ * immediately. Manual approval is required for
+ * processing the request again.
+ * <p>
+ *
+ * @version $Revision$, $Date$
+ */
+public class EDeferException extends EProfileException {
+
+ /**
+ * Creates a defer exception.
+ *
+ * @param msg localized message that will be
+ * displayed to end user. This message
+ * should indicate the reason why a request
+ * is deferred.
+ */
+ public EDeferException(String msg) {
+ super(msg);
+ }
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/EProfileException.java b/pki/base/common/src/com/netscape/certsrv/profile/EProfileException.java
new file mode 100644
index 000000000..197db3bcf
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/EProfileException.java
@@ -0,0 +1,43 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import com.netscape.certsrv.base.*;
+
+/**
+ * This represents a generic profile exception.
+ * <p>
+ * This is the base class for all profile-specific
+ * exception.
+ * <p>
+ *
+ * @version $Revision$, $Date$
+ */
+public class EProfileException extends EBaseException {
+
+ /**
+ * Creates a profile exception.
+ *
+ * @param msg additional message for the handler
+ * of the exception. The message may
+ * or may not be localized.
+ */
+ public EProfileException(String msg) {
+ super(msg);
+ }
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/ERejectException.java b/pki/base/common/src/com/netscape/certsrv/profile/ERejectException.java
new file mode 100644
index 000000000..9a626ef22
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/ERejectException.java
@@ -0,0 +1,45 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import com.netscape.certsrv.base.*;
+
+/**
+ * This represents a profile specific exception. This
+ * exception is raised when a request is rejected.
+ * <p>
+ * A rejected request cannot be reprocessed. Rejected
+ * request is considered as a request in its terminal
+ * state.
+ * <p>
+ *
+ * @version $Revision$, $Date$
+ */
+public class ERejectException extends EProfileException {
+
+ /**
+ * Creates a rejection exception.
+ *
+ * @param msg localized message that indicates
+ * the reason why a request is
+ * rejected.
+ */
+ public ERejectException(String msg) {
+ super(msg);
+ }
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/ICertInfoPolicyDefault.java b/pki/base/common/src/com/netscape/certsrv/profile/ICertInfoPolicyDefault.java
new file mode 100644
index 000000000..c8af3275c
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/ICertInfoPolicyDefault.java
@@ -0,0 +1,36 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import java.util.*;
+import com.netscape.certsrv.base.*;
+import com.netscape.certsrv.common.*;
+import com.netscape.certsrv.request.*;
+import com.netscape.certsrv.property.*;
+import com.netscape.certsrv.authentication.*;
+
+import netscape.security.x509.*;
+
+public interface ICertInfoPolicyDefault extends IPolicyDefault {
+
+ /**
+ * Populates certificate info directly.
+ */
+ public void populate(IRequest request, X509CertInfo info)
+ throws EBaseException;
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/IEnrollProfile.java b/pki/base/common/src/com/netscape/certsrv/profile/IEnrollProfile.java
new file mode 100644
index 000000000..f56f47160
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/IEnrollProfile.java
@@ -0,0 +1,158 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import com.netscape.certsrv.request.*;
+
+/**
+ * This interface represents an enrollment profile.
+ * <p>
+ * An enrollment profile contains a list of enrollment
+ * specific input plugins, default policies, constriant
+ * policies and output plugins.
+ * <p>
+ * This interface also defines a set of enrollment specific
+ * attribute names that can be used to retrieve values
+ * from an enrollment request.
+ * <p>
+ *
+ * @version $Revision$, $Date$
+ */
+public interface IEnrollProfile extends IProfile {
+
+ /**
+ * Name of request attribute that stores the User
+ * Supplied Certificate Request Type.
+ */
+ public static final String CTX_CERT_REQUEST_TYPE = "cert_request_type";
+
+ /**
+ * Name of request attribute that stores the User
+ * Supplied Certificate Request.
+ */
+ public static final String CTX_CERT_REQUEST = "cert_request";
+
+ /**
+ * Possible values for CTX_CERT_REQUEST_TYPE attribute.
+ */
+ public static final String REQ_TYPE_PKCS10 = "pkcs10";
+ public static final String REQ_TYPE_CRMF = "crmf";
+ public static final String REQ_TYPE_CMC = "cmc";
+ public static final String REQ_TYPE_KEYGEN = "keygen";
+
+ /**
+ * Name of request attribute that stores the End-User Locale.
+ * <p>
+ * The value is of type java.util.Locale.
+ */
+ public static final String REQUEST_LOCALE = "req_locale";
+
+ /**
+ * Name of request attribute that stores the sequence number. Consider
+ * a CRMF request that may contain multiple certificate request.
+ * The first sub certificate certificate request has a sequence
+ * number of 0, the next one has a sequence of 1, and so on.
+ * <p>
+ * The value is of type java.lang.Integer.
+ */
+ public static final String REQUEST_SEQ_NUM = "req_seq_num";
+
+ /**
+ * Name of the request attribute that stores the sequence number for a
+ * renewal request. Only one request at a time is permitted for a renewal.
+ * This value corresponds to the sequence number (and hence the appropriate
+ * certificate) of the original request
+ */
+ public static final String CTX_RENEWAL_SEQ_NUM = "renewal_seq_num";
+
+ /**
+ * Name of request attribute to indicate if this is a renewal
+ */
+ public static final String CTX_RENEWAL = "renewal";
+
+ /**
+ * Name of request attribute that stores the End-User Supplied
+ * Key.
+ * <p>
+ * The value is of type netscape.security.x509.CertificateX509Key
+ */
+ public static final String REQUEST_KEY = "req_key";
+
+ /**
+ * Name of request attribute that stores the End-User Supplied
+ * Subject Name.
+ * <p>
+ * The value is of type netscape.security.x509.CertificateSubjectName
+ */
+ public static final String REQUEST_SUBJECT_NAME = "req_subject_name";
+
+ /**
+ * Name of request attribute that stores the End-User Supplied
+ * Validity.
+ * <p>
+ * The value is of type netscape.security.x509.CertificateValidity
+ */
+ public static final String REQUEST_VALIDITY = "req_validity";
+
+ /**
+ * Name of request attribute that stores the End-User Supplied
+ * Signing Algorithm.
+ * <p>
+ * The value is of type netscape.security.x509.CertificateAlgorithmId
+ */
+ public static final String REQUEST_SIGNING_ALGORITHM = "req_signing_alg";
+
+ /**
+ * Name of request attribute that stores the End-User Supplied
+ * Extensions.
+ * <p>
+ * The value is of type netscape.security.x509.CertificateExtensions
+ */
+ public static final String REQUEST_EXTENSIONS = "req_extensions";
+
+ /**
+ * Name of request attribute that stores the End-User Supplied
+ * PKI Archive Option extension. This extension is extracted
+ * from a CRMF request that has the user-provided private key.
+ * <p>
+ * The value is of type byte []
+ */
+ public static final String REQUEST_ARCHIVE_OPTIONS = "req_archive_options";
+
+ /**
+ * Name of request attribute that stores the certificate template
+ * that will be signed and then become a certificate.
+ * <p>
+ * The value is of type netscape.security.x509.X509CertInfo
+ */
+ public static final String REQUEST_CERTINFO = "req_x509info";
+
+ /**
+ * Name of request attribute that stores the issued certificate.
+ * <p>
+ * The value is of type netscape.security.x509.X509CertImpl
+ */
+ public static final String REQUEST_ISSUED_CERT = "req_issued_cert";
+
+ /**
+ * Set Default X509CertInfo in the request.
+ * @param request profile-based certificate request.
+ * @exception EProfileException failed to set the X509CertInfo.
+ */
+ public void setDefaultCertInfo(IRequest request) throws EProfileException;
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/IPolicyConstraint.java b/pki/base/common/src/com/netscape/certsrv/profile/IPolicyConstraint.java
new file mode 100644
index 000000000..cb368f9da
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/IPolicyConstraint.java
@@ -0,0 +1,90 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+
+import java.util.*;
+import com.netscape.certsrv.base.*;
+import com.netscape.certsrv.request.*;
+import com.netscape.certsrv.property.*;
+
+
+/**
+ * This represents a constraint policy. A constraint policy
+ * validates if the given request conforms to the set
+ * rules.
+ * <p>
+ *
+ * @version $Revision$, $Date$
+ */
+public interface IPolicyConstraint extends IConfigTemplate {
+
+ /**
+ * Initializes this constraint policy.
+ *
+ * @param profile owner of this policy
+ * @param config configuration store for this constraint
+ * @exception EProfileException failed to initialize
+ */
+ public void init(IProfile profile, IConfigStore config)
+ throws EProfileException;
+
+ /**
+ * Returns the corresponding configuration store
+ * of this constraint policy.
+ *
+ * @return config store of this constraint
+ */
+ public IConfigStore getConfigStore();
+
+ /**
+ * Validates the request. The request is not modified
+ * during the validation.
+ *
+ * @param request request to be validated
+ * @exception ERejectException reject the given request
+ */
+ public void validate(IRequest request)
+ throws ERejectException;
+
+ /**
+ * Returns localized description of this constraint.
+ *
+ * @param locale locale of the end-user
+ * @return localized description of this constraint
+ */
+ public String getText(Locale locale);
+
+ /**
+ * Returns localized name of this constraint.
+ *
+ * @param locale locale of the end-user
+ * @return localized name of this constraint
+ */
+ public String getName(Locale locale);
+
+ /**
+ * Checks if this constraint is applicable to the
+ * given default policy.
+ *
+ * @param def default policy to be checked
+ * @return true if this constraint can be applied to
+ * the given default policy
+ */
+ public boolean isApplicable(IPolicyDefault def);
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/IPolicyDefault.java b/pki/base/common/src/com/netscape/certsrv/profile/IPolicyDefault.java
new file mode 100644
index 000000000..0aa8bb234
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/IPolicyDefault.java
@@ -0,0 +1,144 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+
+import java.util.*;
+import com.netscape.certsrv.base.*;
+import com.netscape.certsrv.property.*;
+import com.netscape.certsrv.request.*;
+
+
+/**
+ * This represents a default policy that populates
+ * the request with additional values.
+ * <p>
+ *
+ * During request submission process, a default
+ * policy is invoked to populate the default values
+ * in the request. The default values will later
+ * on be used for execution. The default values
+ * are like the parameters for the request.
+ * <p>
+ *
+ * This policy is called in 2 places. For
+ * automated enrollment request, this policy
+ * is invoked to populate the HTTP parameters
+ * into the request. For request that cannot
+ * be executed immediately, this policy will be
+ * invoked again right after the agent's
+ * approval.
+ * <p>
+ *
+ * Each default policy may contain zero or more
+ * properties that describe the default value.
+ * For example, a X509 Key can be described by
+ * its key type, key length, and key data. The
+ * properties help to describe the default value
+ * into human readable values.
+ * <p>
+ *
+ * @version $Revision$, $Date$
+ */
+public interface IPolicyDefault extends IConfigTemplate {
+
+ /**
+ * Initializes this default policy.
+ *
+ * @param profile owner of this default policy
+ * @param config configuration store for this default
+ * @exception EProfileException failed to initialize
+ */
+ public void init(IProfile profile, IConfigStore config)
+ throws EProfileException;
+
+ /**
+ * Retrieves the configuration store of this default.
+ *
+ * @return configuration store of this default policy
+ */
+ public IConfigStore getConfigStore();
+
+ /**
+ * Populates the request with this policy default.
+ *
+ * @param request request to be populated
+ * @exception EProfileException failed to populate
+ */
+ public void populate(IRequest request)
+ throws EProfileException;
+
+ /**
+ * Retrieves the localizable name of this policy.
+ *
+ * @param locale locale of the end user
+ * @return localized name of this default policy
+ */
+ public String getName(Locale locale);
+
+ /**
+ * Retrieves the localizable description of this policy.
+ *
+ * @param locale locale of the end user
+ * @return localized description of this default policy
+ */
+ public String getText(Locale locale);
+
+ /**
+ * Retrieves a list of names of the property.
+ *
+ * @return a list of property names. The values are
+ * of type java.lang.String
+ */
+ public Enumeration getValueNames();
+
+ /**
+ * Retrieves the descriptor of the given property
+ * by name. The descriptor contains syntax
+ * information.
+ *
+ * @param locale locale of the end user
+ * @param name name of property
+ * @return descriptor of the property
+ */
+ public IDescriptor getValueDescriptor(Locale locale, String name);
+
+ /**
+ * Sets the value of the given value property by name.
+ *
+ * @param name name of property
+ * @param locale locale of the end user
+ * @param request request
+ * @param value value to be set in the given request
+ * @exception EPropertyException failed to set property
+ */
+ public void setValue(String name, Locale locale, IRequest request,
+ String value) throws EPropertyException;
+
+ /**
+ * Retrieves the value of the given value
+ * property by name.
+ *
+ * @param name name of property
+ * @param locale locale of the end user
+ * @param request request
+ * @exception EPropertyException failed to get property
+ */
+ public String getValue(String name, Locale locale, IRequest request)
+ throws EPropertyException;
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/IProfile.java b/pki/base/common/src/com/netscape/certsrv/profile/IProfile.java
new file mode 100644
index 000000000..262d3eafb
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/IProfile.java
@@ -0,0 +1,407 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import java.util.*;
+import com.netscape.certsrv.base.*;
+import com.netscape.certsrv.common.*;
+import com.netscape.certsrv.request.*;
+import com.netscape.certsrv.property.*;
+import com.netscape.certsrv.authentication.*;
+
+/**
+ * This interface represents a profile. A profile contains
+ * a list of input policies, default policies, constraint
+ * policies and output policies.
+ * <p>
+ *
+ * The input policy is for building the enrollment page.
+ * <p>
+ *
+ * The default policy is for populating user-supplied and
+ * system-supplied values into the request.
+ * <p>
+ *
+ * The constraint policy is for validating the request before
+ * processing.
+ * <p>
+ *
+ * The output policy is for building the result page.
+ * <p>
+ *
+ * Each profile can have multiple policy set. Each set
+ * is composed of zero or more default policies and zero
+ * or more constraint policies.
+ * <p>
+ *
+ * @version $Revision$, $Date$
+ */
+public interface IProfile {
+
+ /**
+ * Initializes this profile.
+ *
+ * @param owner profile subsystem
+ * @param config configuration store for this profile
+ * @exception EBaseException failed to initialize
+ */
+ public void init(IProfileSubsystem owner, IConfigStore config)
+ throws EBaseException;
+
+ /**
+ * Retrieves the request queue that is associated with
+ * this profile. The request queue is for creating
+ * new requests.
+ *
+ * @return request queue
+ */
+ public IRequestQueue getRequestQueue();
+
+ /**
+ * Sets id of this profile.
+ *
+ * @param id profile identifier
+ */
+ public void setId(String id);
+
+ /**
+ * Returns the identifier of this profile.
+ *
+ * @return profile id
+ */
+ public String getId();
+
+ /**
+ * Retrieves a localized string that represents
+ * requestor's distinguished name. This string
+ * displayed in the request listing user interface.
+ *
+ * @param request request
+ * @return distringuished name of the request owner
+ */
+ public String getRequestorDN(IRequest request);
+
+ /**
+ * Retrieves the configuration store of this profile.
+ *
+ * @return configuration store
+ */
+ public IConfigStore getConfigStore();
+
+ /**
+ * Retrieves the instance id of the authenticator for this profile.
+ *
+ * @return authenticator instance id
+ */
+ public String getAuthenticatorId();
+
+ public String getAuthzAcl();
+
+ /**
+ * Sets the instance id of the authenticator for this profile.
+ *
+ * @param id authenticator instance id
+ */
+ public void setAuthenticatorId(String id);
+
+ /**
+ * Retrieves the associated authenticator instance.
+ *
+ * @return profile authenticator instance.
+ * if no associated authenticator, null is returned
+ * @exception EProfileException failed to retrieve
+ */
+ public IProfileAuthenticator getAuthenticator()
+ throws EProfileException;
+
+ /**
+ * Retrieves a list of input policy IDs.
+ *
+ * @return input policy id list
+ */
+ public Enumeration getProfileInputIds();
+
+ /**
+ * Retrieves input policy by id.
+ *
+ * @param id input policy id
+ * @return input policy instance
+ */
+ public IProfileInput getProfileInput(String id);
+
+ /**
+ * Retrieves a list of output policy IDs.
+ *
+ * @return output policy id list
+ */
+ public Enumeration getProfileOutputIds();
+
+ /**
+ * Retrieves output policy by id.
+ *
+ * @param id output policy id
+ * @return output policy instance
+ */
+ public IProfileOutput getProfileOutput(String id);
+
+ /**
+ * Checks if this profile is end-user profile or not.
+ * End-user profile will be displayed to the end user.
+ * Non end-user profile mainly is for registration
+ * manager.
+ *
+ * @return end-user profile or not
+ */
+ public boolean isVisible();
+
+ /**
+ * Sets this profile end-user profile or not.
+ *
+ * @param v end-user profile or not
+ */
+ public void setVisible(boolean v);
+
+ /**
+ * Retrieves the user id of the person who
+ * approves this profile.
+ *
+ * @return user id of the approver of this profile
+ */
+ public String getApprovedBy();
+
+ /*
+ * Is this a renewal profile
+ */
+ public String isRenewal();
+
+ /*
+ * is output going to be in xml?
+ */
+ public String isXmlOutput();
+
+ /**
+ * Returns the profile name.
+ *
+ * @param locale end-user locale
+ * @param name profile name
+ */
+ public void setName(Locale locale, String name);
+
+ /**
+ * Retrieves the profile name.
+ *
+ * @param locale end-user locale
+ * @return localized profile name
+ */
+ public String getName(Locale locale);
+
+ /**
+ * Returns the profile description.
+ *
+ * @param locale end-user locale
+ * @param desc profile description
+ */
+ public void setDescription(Locale locale, String desc);
+
+ /**
+ * Retrieves the profile description.
+ *
+ * @param locale end-user locale
+ * @return localized profile description
+ */
+ public String getDescription(Locale locale);
+
+ /**
+ * Retrieves profile context. The context stores
+ * information about the requestor before the
+ * actual request is created.
+ *
+ * @return profile context.
+ */
+ public IProfileContext createContext();
+
+ /**
+ * Returns the profile policy set identifiers.
+ *
+ * @return a list of policy set id
+ */
+ public Enumeration getProfilePolicySetIds();
+
+ /**
+ * Creates a profile policy.
+ *
+ * @param setId id of the policy set that owns this policy
+ * @param id policy id
+ * @param defaultClassId id of the registered default implementation
+ * @param constraintClassId id of the registered constraint implementation
+ * @exception EProfileException failed to create policy
+ * @return profile policy instance
+ */
+ public IProfilePolicy createProfilePolicy(String setId, String id,
+ String defaultClassId, String constraintClassId)
+ throws EProfileException;
+
+ /**
+ * Deletes input policy by id.
+ *
+ * @param inputId id of the input policy
+ * @exception EProfileException failed to delete
+ */
+ public void deleteProfileInput(String inputId) throws EProfileException;
+
+ /**
+ * Deletes output policy by id.
+ *
+ * @param outputId id of the output policy
+ * @exception EProfileException failed to delete
+ */
+ public void deleteProfileOutput(String outputId) throws EProfileException;
+
+ /**
+ * Creates a input policy.
+ *
+ * @param id input policy id
+ * @param inputClassId id of the registered input implementation
+ * @param nvp default parameters
+ * @return input policy
+ * @exception EProfileException failed to create
+ */
+ public IProfileInput createProfileInput(String id, String inputClassId,
+ NameValuePairs nvp)
+ throws EProfileException;
+
+ /**
+ * Creates a output policy.
+ *
+ * @param id output policy id
+ * @param outputClassId id of the registered output implementation
+ * @param nvp default parameters
+ * @return output policy
+ * @exception EProfileException failed to create
+ */
+ public IProfileOutput createProfileOutput(String id, String outputClassId,
+ NameValuePairs nvp) throws EProfileException;
+
+ /**
+ * Deletes a policy.
+ *
+ * @param setId id of the policy set
+ * @param policyId id of policy to delete
+ * @exception EProfileException failed to delete
+ */
+ public void deleteProfilePolicy(String setId, String policyId)
+ throws EProfileException;
+
+ /**
+ * Retrieves a policy.
+ *
+ * @param setId set id
+ * @param id policy id
+ * @return profile policy
+ */
+ public IProfilePolicy getProfilePolicy(String setId, String id);
+
+ /**
+ * Retrieves all the policy id within a set.
+ *
+ * @param setId set id
+ * @return a list of policy id
+ */
+ public Enumeration getProfilePolicyIds(String setId);
+
+ /**
+ * Retrieves a default set id for the given request.
+ * It is the profile's responsibility to return
+ * an appropriate set id for the request.
+ *
+ * @param req request
+ * @return policy set id
+ */
+ public String getPolicySetId(IRequest req);
+
+ /**
+ * Returns a list of profile policies.
+ *
+ * @param setId set id
+ * @return a list of policies
+ */
+ public Enumeration getProfilePolicies(String setId);
+
+ /**
+ * Creates one or more requests. Normally, only one request will
+ * be created. In case of CRMF request, multiple requests may be
+ * created for one submission.
+ *
+ * @param ctx profile context
+ * @param locale user locale
+ * @return a list of requests
+ * @exception EProfileException failed to create requests
+ */
+ public IRequest[] createRequests(IProfileContext ctx, Locale locale)
+ throws EProfileException;
+
+ /**
+ * Populates user-supplied input values into the requests.
+ *
+ * @param ctx profile context
+ * @param request request
+ * @exception EProfileException failed to populate
+ */
+ public void populateInput(IProfileContext ctx, IRequest request)
+ throws EProfileException;
+
+ /**
+ * Passes the request to the set of default policies that
+ * populate the profile information against the profile.
+ *
+ * @param request request
+ * @exception EProfileException failed to populate default values
+ */
+ public void populate(IRequest request)
+ throws EProfileException;
+
+ /**
+ * Passes the request to the set of constraint policies
+ * that validate the request against the profile.
+ *
+ * @param request request
+ * @exception ERejectException validation violation
+ */
+ public void validate(IRequest request)
+ throws ERejectException;
+
+ /**
+ * Process a request after validation.
+ *
+ * @param request request to be processed
+ * @exception EProfileException failed to process
+ */
+ public void execute(IRequest request)
+ throws EProfileException;
+
+ /**
+ * Handles end-user request submission.
+ *
+ * @param token authentication token
+ * @param request request to be processed
+ * @exception EDeferException defer request
+ * @exception EProfileException failed to submit
+ */
+ public void submit(IAuthToken token, IRequest request)
+ throws EDeferException, EProfileException;
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/IProfileAuthenticator.java b/pki/base/common/src/com/netscape/certsrv/profile/IProfileAuthenticator.java
new file mode 100644
index 000000000..149cf33c2
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/IProfileAuthenticator.java
@@ -0,0 +1,118 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import java.util.*;
+import com.netscape.certsrv.base.*;
+import com.netscape.certsrv.property.*;
+import com.netscape.certsrv.request.*;
+import com.netscape.certsrv.authentication.*;
+
+
+/**
+ * This interface represents an authenticator for profile.
+ * An authenticator is responsibile for authenting
+ * the end-user. If authentication is successful, request
+ * can be processed immediately. Otherwise, the request will
+ * be defered and manual approval is then required.
+ *
+ * @version $Revision$, $Date$
+ */
+public interface IProfileAuthenticator extends IAuthManager {
+
+ public static final String AUTHENTICATED_NAME = "authenticatedName";
+
+ /**
+ * Initializes this default policy.
+ *
+ * @param profile owner of this authenticator
+ * @param config configuration store
+ * @exception EProfileException failed to initialize
+ */
+ public void init(IProfile profile, IConfigStore config)
+ throws EProfileException;
+
+ /**
+ * Retrieves the configuration store.
+ *
+ * @return configuration store
+ */
+ public IConfigStore getConfigStore();
+
+ /**
+ * Populates authentication specific information into the
+ * request for auditing purposes.
+ *
+ * @param token authentication token
+ * @param request request
+ * @exception EProfileException failed to populate
+ */
+ public void populate(IAuthToken token, IRequest request)
+ throws EProfileException;
+
+ /**
+ * Retrieves the localizable name of this policy.
+ *
+ * @param locale end user locale
+ * @return localized authenticator name
+ */
+ public String getName(Locale locale);
+
+ /**
+ * Retrieves the localizable description of this policy.
+ *
+ * @param locale end user locale
+ * @return localized authenticator description
+ */
+ public String getText(Locale locale);
+
+ /**
+ * Retrieves a list of names of the property.
+ *
+ * @return a list of property names
+ */
+ public Enumeration getValueNames();
+
+ /**
+ * Checks if the value of the given property should be
+ * serializable into the request. Passsword or other
+ * security-related value may not be desirable for
+ * storage.
+ *
+ * @param name property name
+ * @return true if the property is not security related
+ */
+ public boolean isValueWriteable(String name);
+
+ /**
+ * Retrieves the descriptor of the given value
+ * property by name.
+ *
+ * @param locale user locale
+ * @param name property name
+ * @return descriptor of the requested property
+ */
+ public IDescriptor getValueDescriptor(Locale locale, String name);
+
+ /**
+ * Checks if this authenticator requires SSL client authentication.
+ *
+ * @return client authentication required or not
+ */
+ public boolean isSSLClientRequired();
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/IProfileContext.java b/pki/base/common/src/com/netscape/certsrv/profile/IProfileContext.java
new file mode 100644
index 000000000..aa8492210
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/IProfileContext.java
@@ -0,0 +1,48 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import java.util.*;
+import com.netscape.certsrv.base.*;
+import com.netscape.certsrv.request.*;
+
+/**
+ * This interface represents a profile context which
+ * stores system-wide and user-provided information for
+ * assisting request creation.
+ *
+ * @version $Revision$, $Date$
+ */
+public interface IProfileContext {
+
+ /**
+ * Sets a value into the context.
+ *
+ * @param name property name
+ * @param value property value
+ */
+ public void set(String name, String value);
+
+ /**
+ * Retrieves a value from the context.
+ *
+ * @param name property name
+ * @return property value
+ */
+ public String get(String name);
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/IProfileEx.java b/pki/base/common/src/com/netscape/certsrv/profile/IProfileEx.java
new file mode 100644
index 000000000..20b9af977
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/IProfileEx.java
@@ -0,0 +1,41 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import java.util.*;
+import com.netscape.certsrv.base.*;
+import com.netscape.certsrv.common.*;
+import com.netscape.certsrv.request.*;
+import com.netscape.certsrv.property.*;
+import com.netscape.certsrv.authentication.*;
+
+/**
+ * This interface represents the extension version of
+ * profile.
+ * <p>
+ *
+ * @version $Revision$, $Date$
+ */
+public interface IProfileEx extends IProfile {
+
+ /**
+ * Called after initialization. It populates default
+ * policies, inputs, and outputs.
+ */
+ public void populate() throws EBaseException;
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/IProfileInput.java b/pki/base/common/src/com/netscape/certsrv/profile/IProfileInput.java
new file mode 100644
index 000000000..1b6bea720
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/IProfileInput.java
@@ -0,0 +1,116 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import java.util.*;
+import com.netscape.certsrv.base.*;
+import com.netscape.certsrv.property.*;
+import com.netscape.certsrv.request.*;
+
+/**
+ * This interface represents a input policy which
+ * provides information on how to create the
+ * end-user enrollment page.
+ *
+ * @version $Revision$, $Date$
+ */
+public interface IProfileInput extends IConfigTemplate {
+
+ /**
+ * Initializes this default policy.
+ *
+ * @param profile owner of this input
+ * @param config configuration store
+ * @exception EProfileException failed to initialize
+ */
+ public void init(IProfile profile, IConfigStore config)
+ throws EProfileException;
+
+ /**
+ * Returns configuration store.
+ *
+ * @return configuration store
+ */
+ public IConfigStore getConfigStore();
+
+ /**
+ * Populates the request with this policy default.
+ *
+ * @param ctx profile context
+ * @param request request
+ * @exception EProfileException failed to populate
+ */
+ public void populate(IProfileContext ctx, IRequest request)
+ throws EProfileException;
+
+ /**
+ * Retrieves the localizable name of this policy.
+ *
+ * @param locale user locale
+ * @return localized input name
+ */
+ public String getName(Locale locale);
+
+ /**
+ * Retrieves the localizable description of this policy.
+ *
+ * @param locale user locale
+ * @return localized input description
+ */
+ public String getText(Locale locale);
+
+ /**
+ * Retrieves a list of names of the property.
+ *
+ * @return a list of property names
+ */
+ public Enumeration getValueNames();
+
+ /**
+ * Retrieves the descriptor of the given value
+ * property by name.
+ *
+ * @param locale user locale
+ * @param name property name
+ * @return descriptor of the property
+ */
+ public IDescriptor getValueDescriptor(Locale locale, String name);
+
+ /**
+ * Retrieves value from the request.
+ *
+ * @param name property name
+ * @param locale user locale
+ * @param request request
+ * @exception EProfileException failed to get value
+ */
+ public String getValue(String name, Locale locale, IRequest request)
+ throws EProfileException;
+
+ /**
+ * Sets the value of the given property by name.
+ *
+ * @param name property name
+ * @param locale user locale
+ * @param request request
+ * @param value value
+ * @exception EProfileException failed to get value
+ */
+ public void setValue(String name, Locale locale, IRequest request,
+ String value) throws EPropertyException;
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/IProfileOutput.java b/pki/base/common/src/com/netscape/certsrv/profile/IProfileOutput.java
new file mode 100644
index 000000000..ad9484648
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/IProfileOutput.java
@@ -0,0 +1,117 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import java.util.*;
+import com.netscape.certsrv.base.*;
+import com.netscape.certsrv.property.*;
+import com.netscape.certsrv.request.*;
+
+/**
+ * This interface represents a output policy which
+ * provides information on how to build the result
+ * page for the enrollment.
+ *
+ * @version $Revision$, $Date$
+ */
+public interface IProfileOutput extends IConfigTemplate {
+
+ /**
+ * Initializes this default policy.
+ *
+ * @param profile owner of this policy
+ * @param config configuration store
+ * @exception EProfileException failed to initialize
+ */
+ public void init(IProfile profile, IConfigStore config)
+ throws EProfileException;
+
+ /**
+ * Retrieves configuration store.
+ *
+ * @return configuration store
+ */
+ public IConfigStore getConfigStore();
+
+ /**
+ * Populates the request with this policy default.
+ *
+ * @param ctx profile context
+ * @param request request
+ * @exception EProfileException failed to populate
+ */
+ public void populate(IProfileContext ctx, IRequest request)
+ throws EProfileException;
+
+ /**
+ * Retrieves the localizable name of this policy.
+ *
+ * @param locale user locale
+ * @return output policy name
+ */
+ public String getName(Locale locale);
+
+ /**
+ * Retrieves the localizable description of this policy.
+ *
+ * @param locale user locale
+ * @return output policy description
+ */
+ public String getText(Locale locale);
+
+ /**
+ * Retrieves a list of names of the value parameter.
+ *
+ * @return a list of property names
+ */
+ public Enumeration getValueNames();
+
+ /**
+ * Retrieves the descriptor of the given value
+ * parameter by name.
+ *
+ * @param locale user locale
+ * @param name property name
+ * @return property descriptor
+ */
+ public IDescriptor getValueDescriptor(Locale locale, String name);
+
+ /**
+ * Retrieves the value of the given value parameter by name.
+ *
+ * @param name property name
+ * @param locale user locale
+ * @param request request
+ * @return property value
+ * @exception EProfileException failed to retrieve value
+ */
+ public String getValue(String name, Locale locale, IRequest request)
+ throws EProfileException;
+
+ /**
+ * Sets the value of the given value parameter by name.
+ *
+ * @param name property name
+ * @param locale user locale
+ * @param request request
+ * @param value property value
+ * @exception EProfileException failed to retrieve value
+ */
+ public void setValue(String name, Locale locale, IRequest request,
+ String value) throws EPropertyException;
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/IProfilePolicy.java b/pki/base/common/src/com/netscape/certsrv/profile/IProfilePolicy.java
new file mode 100644
index 000000000..9577cb08f
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/IProfilePolicy.java
@@ -0,0 +1,49 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+/**
+ * This interface represents a profile policy
+ * which consists a default policy and a
+ * constraint policy.
+ *
+ * @version $Revision$, $Date$
+ */
+public interface IProfilePolicy {
+
+ /**
+ * Retrieves the policy id
+ *
+ * @return policy id
+ */
+ public String getId();
+
+ /**
+ * Retrieves the default policy.
+ *
+ * @return default policy
+ */
+ public IPolicyDefault getDefault();
+
+ /**
+ * Retrieves the constraint policy.
+ *
+ * @return constraint policy
+ */
+ public IPolicyConstraint getConstraint();
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/IProfileSubsystem.java b/pki/base/common/src/com/netscape/certsrv/profile/IProfileSubsystem.java
new file mode 100644
index 000000000..cf54a4ba4
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/IProfileSubsystem.java
@@ -0,0 +1,136 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+
+import java.util.*;
+import com.netscape.certsrv.base.*;
+import com.netscape.certsrv.request.*;
+
+
+/**
+ * This represents the profile subsystem that manages
+ * a list of profiles.
+ *
+ * @version $Revision$, $Date$
+ */
+public interface IProfileSubsystem extends ISubsystem {
+ public static final String ID = "profile";
+
+ /**
+ * Retrieves a profile by id.
+ *
+ * @return profile
+ * @exception EProfileException failed to retrieve
+ */
+ public IProfile getProfile(String id)
+ throws EProfileException;
+
+ /**
+ * Checks if a profile is approved by an agent or not.
+ *
+ * @param id profile id
+ * @return true if profile is approved
+ */
+ public boolean isProfileEnable(String id);
+
+ /**
+ * Retrieves the approver of the given profile.
+ *
+ * @param id profile id
+ * @return user id of the agent who has approved the profile
+ */
+ public String getProfileEnableBy(String id);
+
+ /**
+ * Creates new profile.
+ *
+ * @param id profile id
+ * @param classid implementation id
+ * @param className class Name
+ * @param configFile configuration file
+ * @exception EProfileException failed to create profile
+ */
+ public IProfile createProfile(String id, String classid,
+ String className, String configFile)
+ throws EProfileException;
+
+ /**
+ * Deletes profile.
+ *
+ * @param id profile id
+ * @param configFile configuration file
+ * @exception EProfileException failed to delete profile
+ */
+ public void deleteProfile(String id, String configFile)
+ throws EProfileException;
+
+ /**
+ * Creates a new profile configuration file.
+ *
+ * @param id profile id
+ * @param classId implementation id
+ * @param configPath location to create the configuration file
+ * @exception failed to create profile
+ */
+ public void createProfileConfig(String id, String classId,
+ String configPath) throws EProfileException;
+
+ /**
+ * Enables a profile.
+ *
+ * @param id profile id
+ * @param enableBy agent's user id
+ * @exception EProfileException failed to enable profile
+ */
+ public void enableProfile(String id, String enableBy)
+ throws EProfileException;
+
+ /**
+ * Disables a profile.
+ *
+ * @param id profile id
+ * @exception EProfileException failed to disable
+ */
+ public void disableProfile(String id)
+ throws EProfileException;
+
+ /**
+ * Retrieves the id of the implementation of the given profile.
+ *
+ * @param id profile id
+ * @return implementation id managed by the registry
+ */
+ public String getProfileClassId(String id);
+
+ /**
+ * Retrieves a list of profile ids. The return
+ * list is of type String.
+ *
+ * @return a list of profile ids
+ */
+ public Enumeration getProfileIds();
+
+ /**
+ * Checks if owner id should be enforced during profile approval.
+ *
+ * @return true if approval should be checked
+ */
+ public boolean checkOwner();
+
+}
diff --git a/pki/base/common/src/com/netscape/certsrv/profile/IProfileUpdater.java b/pki/base/common/src/com/netscape/certsrv/profile/IProfileUpdater.java
new file mode 100644
index 000000000..a550b6445
--- /dev/null
+++ b/pki/base/common/src/com/netscape/certsrv/profile/IProfileUpdater.java
@@ -0,0 +1,75 @@
+// --- 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) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.certsrv.profile;
+
+import java.util.*;
+import com.netscape.certsrv.base.*;
+import com.netscape.certsrv.property.*;
+import com.netscape.certsrv.request.*;
+
+/**
+ * This interface represents an updater that will be
+ * called when the request's state changes.
+ *
+ * @version $Revision$, $Date$
+ */
+public interface IProfileUpdater extends IConfigTemplate {
+
+ /**
+ * Initializes this default policy.
+ *
+ * @param profile owner of this policy
+ * @param config configuration store
+ * @exception EProfileException failed to initialize
+ */
+ public void init(IProfile profile, IConfigStore config)
+ throws EProfileException;
+
+ /**
+ * Retrieves configuration store.
+ *
+ * @return configuration store
+ */
+ public IConfigStore getConfigStore();
+
+ /**
+ * Notifies of state change.
+ *
+ * @param req request
+ * @param status The status to check for.
+ * @exception EProfileException failed to populate
+ */
+ public void update(IRequest req, RequestStatus status)
+ throws EProfileException;
+
+ /**
+ * Retrieves the localizable name of this policy.
+ *
+ * @param locale user locale
+ * @return output policy name
+ */
+ public String getName(Locale locale);
+
+ /**
+ * Retrieves the localizable description of this policy.
+ *
+ * @param locale user locale
+ * @return output policy description
+ */
+ public String getText(Locale locale);
+}