001/*
002 * The contents of this file are subject to the terms of the Common Development and
003 * Distribution License (the License). You may not use this file except in compliance with the
004 * License.
005 *
006 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
007 * specific language governing permission and limitations under the License.
008 *
009 * When distributing Covered Software, include this CDDL Header Notice in each file and include
010 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
011 * Header, with the fields enclosed by brackets [] replaced by your own identifying
012 * information: "Portions Copyright [year] [name of copyright owner]".
013 *
014 * Copyright 2008 Sun Microsystems, Inc.
015 */
016package org.forgerock.opendj.server.config.meta;
017
018
019
020import org.forgerock.opendj.config.AdministratorAction;
021import org.forgerock.opendj.config.BooleanPropertyDefinition;
022import org.forgerock.opendj.config.ClassPropertyDefinition;
023import org.forgerock.opendj.config.client.ConcurrentModificationException;
024import org.forgerock.opendj.config.client.ManagedObject;
025import org.forgerock.opendj.config.client.MissingMandatoryPropertiesException;
026import org.forgerock.opendj.config.client.OperationRejectedException;
027import org.forgerock.opendj.config.DefaultBehaviorProvider;
028import org.forgerock.opendj.config.DefinedDefaultBehaviorProvider;
029import org.forgerock.opendj.config.ManagedObjectAlreadyExistsException;
030import org.forgerock.opendj.config.ManagedObjectDefinition;
031import org.forgerock.opendj.config.PropertyOption;
032import org.forgerock.opendj.config.PropertyProvider;
033import org.forgerock.opendj.config.server.ConfigurationChangeListener;
034import org.forgerock.opendj.config.server.ServerManagedObject;
035import org.forgerock.opendj.config.Tag;
036import org.forgerock.opendj.ldap.DN;
037import org.forgerock.opendj.ldap.LdapException;
038import org.forgerock.opendj.server.config.client.SHA1PasswordStorageSchemeCfgClient;
039import org.forgerock.opendj.server.config.server.PasswordStorageSchemeCfg;
040import org.forgerock.opendj.server.config.server.SHA1PasswordStorageSchemeCfg;
041
042
043
044/**
045 * An interface for querying the SHA1 Password Storage Scheme managed
046 * object definition meta information.
047 * <p>
048 * The SHA1 Password Storage Scheme provides a mechanism for encoding
049 * user passwords using an unsalted form of the SHA-1 message digest
050 * algorithm. Because the implementation does not use any kind of
051 * salting mechanism, a given password always has the same encoded
052 * form.
053 */
054public final class SHA1PasswordStorageSchemeCfgDefn extends ManagedObjectDefinition<SHA1PasswordStorageSchemeCfgClient, SHA1PasswordStorageSchemeCfg> {
055
056  /** The singleton configuration definition instance. */
057  private static final SHA1PasswordStorageSchemeCfgDefn INSTANCE = new SHA1PasswordStorageSchemeCfgDefn();
058
059
060
061  /** The "java-class" property definition. */
062  private static final ClassPropertyDefinition PD_JAVA_CLASS;
063
064
065
066  /** Build the "java-class" property definition. */
067  static {
068      ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class");
069      builder.setOption(PropertyOption.MANDATORY);
070      builder.setOption(PropertyOption.ADVANCED);
071      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "java-class"));
072      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("org.opends.server.extensions.SHA1PasswordStorageScheme");
073      builder.setDefaultBehaviorProvider(provider);
074      builder.addInstanceOf("org.opends.server.api.PasswordStorageScheme");
075      PD_JAVA_CLASS = builder.getInstance();
076      INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
077  }
078
079
080
081  // Register the tags associated with this managed object definition.
082  static {
083    INSTANCE.registerTag(Tag.valueOf("user-management"));
084  }
085
086
087
088  /**
089   * Get the SHA1 Password Storage Scheme configuration definition
090   * singleton.
091   *
092   * @return Returns the SHA1 Password Storage Scheme configuration
093   *         definition singleton.
094   */
095  public static SHA1PasswordStorageSchemeCfgDefn getInstance() {
096    return INSTANCE;
097  }
098
099
100
101  /**
102   * Private constructor.
103   */
104  private SHA1PasswordStorageSchemeCfgDefn() {
105    super("sha1-password-storage-scheme", PasswordStorageSchemeCfgDefn.getInstance());
106  }
107
108
109
110  /** {@inheritDoc} */
111  public SHA1PasswordStorageSchemeCfgClient createClientConfiguration(
112      ManagedObject<? extends SHA1PasswordStorageSchemeCfgClient> impl) {
113    return new SHA1PasswordStorageSchemeCfgClientImpl(impl);
114  }
115
116
117
118  /** {@inheritDoc} */
119  public SHA1PasswordStorageSchemeCfg createServerConfiguration(
120      ServerManagedObject<? extends SHA1PasswordStorageSchemeCfg> impl) {
121    return new SHA1PasswordStorageSchemeCfgServerImpl(impl);
122  }
123
124
125
126  /** {@inheritDoc} */
127  public Class<SHA1PasswordStorageSchemeCfg> getServerConfigurationClass() {
128    return SHA1PasswordStorageSchemeCfg.class;
129  }
130
131
132
133  /**
134   * Get the "enabled" property definition.
135   * <p>
136   * Indicates whether the SHA1 Password Storage Scheme is enabled for
137   * use.
138   *
139   * @return Returns the "enabled" property definition.
140   */
141  public BooleanPropertyDefinition getEnabledPropertyDefinition() {
142    return PasswordStorageSchemeCfgDefn.getInstance().getEnabledPropertyDefinition();
143  }
144
145
146
147  /**
148   * Get the "java-class" property definition.
149   * <p>
150   * Specifies the fully-qualified name of the Java class that
151   * provides the SHA1 Password Storage Scheme implementation.
152   *
153   * @return Returns the "java-class" property definition.
154   */
155  public ClassPropertyDefinition getJavaClassPropertyDefinition() {
156    return PD_JAVA_CLASS;
157  }
158
159
160
161  /**
162   * Managed object client implementation.
163   */
164  private static class SHA1PasswordStorageSchemeCfgClientImpl implements
165    SHA1PasswordStorageSchemeCfgClient {
166
167    /** Private implementation. */
168    private ManagedObject<? extends SHA1PasswordStorageSchemeCfgClient> impl;
169
170
171
172    /** Private constructor. */
173    private SHA1PasswordStorageSchemeCfgClientImpl(
174        ManagedObject<? extends SHA1PasswordStorageSchemeCfgClient> impl) {
175      this.impl = impl;
176    }
177
178
179
180    /** {@inheritDoc} */
181    public Boolean isEnabled() {
182      return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
183    }
184
185
186
187    /** {@inheritDoc} */
188    public void setEnabled(boolean value) {
189      impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value);
190    }
191
192
193
194    /** {@inheritDoc} */
195    public String getJavaClass() {
196      return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
197    }
198
199
200
201    /** {@inheritDoc} */
202    public void setJavaClass(String value) {
203      impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
204    }
205
206
207
208    /** {@inheritDoc} */
209    public ManagedObjectDefinition<? extends SHA1PasswordStorageSchemeCfgClient, ? extends SHA1PasswordStorageSchemeCfg> definition() {
210      return INSTANCE;
211    }
212
213
214
215    /** {@inheritDoc} */
216    public PropertyProvider properties() {
217      return impl;
218    }
219
220
221
222    /** {@inheritDoc} */
223    public void commit() throws ManagedObjectAlreadyExistsException,
224        MissingMandatoryPropertiesException, ConcurrentModificationException,
225        OperationRejectedException, LdapException {
226      impl.commit();
227    }
228
229
230
231    /** {@inheritDoc} */
232    public String toString() {
233      return impl.toString();
234    }
235  }
236
237
238
239  /**
240   * Managed object server implementation.
241   */
242  private static class SHA1PasswordStorageSchemeCfgServerImpl implements
243    SHA1PasswordStorageSchemeCfg {
244
245    /** Private implementation. */
246    private ServerManagedObject<? extends SHA1PasswordStorageSchemeCfg> impl;
247
248    /** The value of the "enabled" property. */
249    private final boolean pEnabled;
250
251    /** The value of the "java-class" property. */
252    private final String pJavaClass;
253
254
255
256    /** Private constructor. */
257    private SHA1PasswordStorageSchemeCfgServerImpl(ServerManagedObject<? extends SHA1PasswordStorageSchemeCfg> impl) {
258      this.impl = impl;
259      this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
260      this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
261    }
262
263
264
265    /** {@inheritDoc} */
266    public void addSHA1ChangeListener(
267        ConfigurationChangeListener<SHA1PasswordStorageSchemeCfg> listener) {
268      impl.registerChangeListener(listener);
269    }
270
271
272
273    /** {@inheritDoc} */
274    public void removeSHA1ChangeListener(
275        ConfigurationChangeListener<SHA1PasswordStorageSchemeCfg> listener) {
276      impl.deregisterChangeListener(listener);
277    }
278    /** {@inheritDoc} */
279    public void addChangeListener(
280        ConfigurationChangeListener<PasswordStorageSchemeCfg> listener) {
281      impl.registerChangeListener(listener);
282    }
283
284
285
286    /** {@inheritDoc} */
287    public void removeChangeListener(
288        ConfigurationChangeListener<PasswordStorageSchemeCfg> listener) {
289      impl.deregisterChangeListener(listener);
290    }
291
292
293
294    /** {@inheritDoc} */
295    public boolean isEnabled() {
296      return pEnabled;
297    }
298
299
300
301    /** {@inheritDoc} */
302    public String getJavaClass() {
303      return pJavaClass;
304    }
305
306
307
308    /** {@inheritDoc} */
309    public Class<? extends SHA1PasswordStorageSchemeCfg> configurationClass() {
310      return SHA1PasswordStorageSchemeCfg.class;
311    }
312
313
314
315    /** {@inheritDoc} */
316    public DN dn() {
317      return impl.getDN();
318    }
319
320
321
322    /** {@inheritDoc} */
323    public String toString() {
324      return impl.toString();
325    }
326  }
327}