001 /*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License"). You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 * Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 * Copyright 2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.admin.std.meta;
028
029
030
031 import org.opends.server.admin.AdministratorAction;
032 import org.opends.server.admin.BooleanPropertyDefinition;
033 import org.opends.server.admin.ClassPropertyDefinition;
034 import org.opends.server.admin.client.AuthorizationException;
035 import org.opends.server.admin.client.CommunicationException;
036 import org.opends.server.admin.client.ConcurrentModificationException;
037 import org.opends.server.admin.client.ManagedObject;
038 import org.opends.server.admin.client.MissingMandatoryPropertiesException;
039 import org.opends.server.admin.client.OperationRejectedException;
040 import org.opends.server.admin.condition.Conditions;
041 import org.opends.server.admin.DefaultBehaviorProvider;
042 import org.opends.server.admin.DefinedDefaultBehaviorProvider;
043 import org.opends.server.admin.GenericConstraint;
044 import org.opends.server.admin.ManagedObjectAlreadyExistsException;
045 import org.opends.server.admin.ManagedObjectDefinition;
046 import org.opends.server.admin.PropertyOption;
047 import org.opends.server.admin.PropertyProvider;
048 import org.opends.server.admin.server.ConfigurationChangeListener;
049 import org.opends.server.admin.server.ServerManagedObject;
050 import org.opends.server.admin.std.client.PKCS11KeyManagerProviderCfgClient;
051 import org.opends.server.admin.std.server.KeyManagerProviderCfg;
052 import org.opends.server.admin.std.server.PKCS11KeyManagerProviderCfg;
053 import org.opends.server.admin.StringPropertyDefinition;
054 import org.opends.server.admin.Tag;
055 import org.opends.server.admin.UndefinedDefaultBehaviorProvider;
056 import org.opends.server.types.DN;
057
058
059
060 /**
061 * An interface for querying the PKCS11 Key Manager Provider managed
062 * object definition meta information.
063 * <p>
064 * The PKCS11 Key Manager Provider enables the server to access the
065 * private key information through the PKCS11 interface.
066 */
067 public final class PKCS11KeyManagerProviderCfgDefn extends ManagedObjectDefinition<PKCS11KeyManagerProviderCfgClient, PKCS11KeyManagerProviderCfg> {
068
069 // The singleton configuration definition instance.
070 private static final PKCS11KeyManagerProviderCfgDefn INSTANCE = new PKCS11KeyManagerProviderCfgDefn();
071
072
073
074 // The "java-class" property definition.
075 private static final ClassPropertyDefinition PD_JAVA_CLASS;
076
077
078
079 // The "key-store-pin" property definition.
080 private static final StringPropertyDefinition PD_KEY_STORE_PIN;
081
082
083
084 // The "key-store-pin-environment-variable" property definition.
085 private static final StringPropertyDefinition PD_KEY_STORE_PIN_ENVIRONMENT_VARIABLE;
086
087
088
089 // The "key-store-pin-file" property definition.
090 private static final StringPropertyDefinition PD_KEY_STORE_PIN_FILE;
091
092
093
094 // The "key-store-pin-property" property definition.
095 private static final StringPropertyDefinition PD_KEY_STORE_PIN_PROPERTY;
096
097
098
099 // Build the "java-class" property definition.
100 static {
101 ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class");
102 builder.setOption(PropertyOption.MANDATORY);
103 builder.setOption(PropertyOption.ADVANCED);
104 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.COMPONENT_RESTART, INSTANCE, "java-class"));
105 DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("org.opends.server.extensions.PKCS11KeyManagerProvider");
106 builder.setDefaultBehaviorProvider(provider);
107 builder.addInstanceOf("org.opends.server.api.KeyManagerProvider");
108 PD_JAVA_CLASS = builder.getInstance();
109 INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
110 }
111
112
113
114 // Build the "key-store-pin" property definition.
115 static {
116 StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "key-store-pin");
117 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "key-store-pin"));
118 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
119 PD_KEY_STORE_PIN = builder.getInstance();
120 INSTANCE.registerPropertyDefinition(PD_KEY_STORE_PIN);
121 }
122
123
124
125 // Build the "key-store-pin-environment-variable" property definition.
126 static {
127 StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "key-store-pin-environment-variable");
128 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "key-store-pin-environment-variable"));
129 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
130 builder.setPattern(".*", "STRING");
131 PD_KEY_STORE_PIN_ENVIRONMENT_VARIABLE = builder.getInstance();
132 INSTANCE.registerPropertyDefinition(PD_KEY_STORE_PIN_ENVIRONMENT_VARIABLE);
133 }
134
135
136
137 // Build the "key-store-pin-file" property definition.
138 static {
139 StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "key-store-pin-file");
140 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "key-store-pin-file"));
141 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
142 builder.setPattern(".*", "FILE");
143 PD_KEY_STORE_PIN_FILE = builder.getInstance();
144 INSTANCE.registerPropertyDefinition(PD_KEY_STORE_PIN_FILE);
145 }
146
147
148
149 // Build the "key-store-pin-property" property definition.
150 static {
151 StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "key-store-pin-property");
152 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "key-store-pin-property"));
153 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
154 builder.setPattern(".*", "STRING");
155 PD_KEY_STORE_PIN_PROPERTY = builder.getInstance();
156 INSTANCE.registerPropertyDefinition(PD_KEY_STORE_PIN_PROPERTY);
157 }
158
159
160
161 // Register the tags associated with this managed object definition.
162 static {
163 INSTANCE.registerTag(Tag.valueOf("security"));
164 }
165
166
167
168 // Register the constraints associated with this managed object definition.
169 static {
170 INSTANCE.registerConstraint(new GenericConstraint(INSTANCE, 1, Conditions.implies(Conditions.contains("enabled", "true"), Conditions.or(Conditions.isPresent("key-store-pin-property"), Conditions.isPresent("key-store-pin-environment-variable"), Conditions.isPresent("key-store-pin-file"), Conditions.isPresent("key-store-pin")))));
171 }
172
173
174
175 /**
176 * Get the PKCS11 Key Manager Provider configuration definition
177 * singleton.
178 *
179 * @return Returns the PKCS11 Key Manager Provider configuration
180 * definition singleton.
181 */
182 public static PKCS11KeyManagerProviderCfgDefn getInstance() {
183 return INSTANCE;
184 }
185
186
187
188 /**
189 * Private constructor.
190 */
191 private PKCS11KeyManagerProviderCfgDefn() {
192 super("pkcs11-key-manager-provider", KeyManagerProviderCfgDefn.getInstance());
193 }
194
195
196
197 /**
198 * {@inheritDoc}
199 */
200 public PKCS11KeyManagerProviderCfgClient createClientConfiguration(
201 ManagedObject<? extends PKCS11KeyManagerProviderCfgClient> impl) {
202 return new PKCS11KeyManagerProviderCfgClientImpl(impl);
203 }
204
205
206
207 /**
208 * {@inheritDoc}
209 */
210 public PKCS11KeyManagerProviderCfg createServerConfiguration(
211 ServerManagedObject<? extends PKCS11KeyManagerProviderCfg> impl) {
212 return new PKCS11KeyManagerProviderCfgServerImpl(impl);
213 }
214
215
216
217 /**
218 * {@inheritDoc}
219 */
220 public Class<PKCS11KeyManagerProviderCfg> getServerConfigurationClass() {
221 return PKCS11KeyManagerProviderCfg.class;
222 }
223
224
225
226 /**
227 * Get the "enabled" property definition.
228 * <p>
229 * Indicates whether the PKCS11 Key Manager Provider is enabled for
230 * use.
231 *
232 * @return Returns the "enabled" property definition.
233 */
234 public BooleanPropertyDefinition getEnabledPropertyDefinition() {
235 return KeyManagerProviderCfgDefn.getInstance().getEnabledPropertyDefinition();
236 }
237
238
239
240 /**
241 * Get the "java-class" property definition.
242 * <p>
243 * The fully-qualified name of the Java class that provides the
244 * PKCS11 Key Manager Provider implementation.
245 *
246 * @return Returns the "java-class" property definition.
247 */
248 public ClassPropertyDefinition getJavaClassPropertyDefinition() {
249 return PD_JAVA_CLASS;
250 }
251
252
253
254 /**
255 * Get the "key-store-pin" property definition.
256 * <p>
257 * Specifies the clear-text PIN needed to access the PKCS11 Key
258 * Manager Provider .
259 *
260 * @return Returns the "key-store-pin" property definition.
261 */
262 public StringPropertyDefinition getKeyStorePinPropertyDefinition() {
263 return PD_KEY_STORE_PIN;
264 }
265
266
267
268 /**
269 * Get the "key-store-pin-environment-variable" property definition.
270 * <p>
271 * Specifies the name of the environment variable that contains the
272 * clear-text PIN needed to access the PKCS11 Key Manager Provider .
273 *
274 * @return Returns the "key-store-pin-environment-variable" property definition.
275 */
276 public StringPropertyDefinition getKeyStorePinEnvironmentVariablePropertyDefinition() {
277 return PD_KEY_STORE_PIN_ENVIRONMENT_VARIABLE;
278 }
279
280
281
282 /**
283 * Get the "key-store-pin-file" property definition.
284 * <p>
285 * Specifies the path to the text file whose only contents should be
286 * a single line containing the clear-text PIN needed to access the
287 * PKCS11 Key Manager Provider .
288 *
289 * @return Returns the "key-store-pin-file" property definition.
290 */
291 public StringPropertyDefinition getKeyStorePinFilePropertyDefinition() {
292 return PD_KEY_STORE_PIN_FILE;
293 }
294
295
296
297 /**
298 * Get the "key-store-pin-property" property definition.
299 * <p>
300 * Specifies the name of the Java property that contains the
301 * clear-text PIN needed to access the PKCS11 Key Manager Provider .
302 *
303 * @return Returns the "key-store-pin-property" property definition.
304 */
305 public StringPropertyDefinition getKeyStorePinPropertyPropertyDefinition() {
306 return PD_KEY_STORE_PIN_PROPERTY;
307 }
308
309
310
311 /**
312 * Managed object client implementation.
313 */
314 private static class PKCS11KeyManagerProviderCfgClientImpl implements
315 PKCS11KeyManagerProviderCfgClient {
316
317 // Private implementation.
318 private ManagedObject<? extends PKCS11KeyManagerProviderCfgClient> impl;
319
320
321
322 // Private constructor.
323 private PKCS11KeyManagerProviderCfgClientImpl(
324 ManagedObject<? extends PKCS11KeyManagerProviderCfgClient> impl) {
325 this.impl = impl;
326 }
327
328
329
330 /**
331 * {@inheritDoc}
332 */
333 public Boolean isEnabled() {
334 return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
335 }
336
337
338
339 /**
340 * {@inheritDoc}
341 */
342 public void setEnabled(boolean value) {
343 impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value);
344 }
345
346
347
348 /**
349 * {@inheritDoc}
350 */
351 public String getJavaClass() {
352 return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
353 }
354
355
356
357 /**
358 * {@inheritDoc}
359 */
360 public void setJavaClass(String value) {
361 impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
362 }
363
364
365
366 /**
367 * {@inheritDoc}
368 */
369 public String getKeyStorePin() {
370 return impl.getPropertyValue(INSTANCE.getKeyStorePinPropertyDefinition());
371 }
372
373
374
375 /**
376 * {@inheritDoc}
377 */
378 public void setKeyStorePin(String value) {
379 impl.setPropertyValue(INSTANCE.getKeyStorePinPropertyDefinition(), value);
380 }
381
382
383
384 /**
385 * {@inheritDoc}
386 */
387 public String getKeyStorePinEnvironmentVariable() {
388 return impl.getPropertyValue(INSTANCE.getKeyStorePinEnvironmentVariablePropertyDefinition());
389 }
390
391
392
393 /**
394 * {@inheritDoc}
395 */
396 public void setKeyStorePinEnvironmentVariable(String value) {
397 impl.setPropertyValue(INSTANCE.getKeyStorePinEnvironmentVariablePropertyDefinition(), value);
398 }
399
400
401
402 /**
403 * {@inheritDoc}
404 */
405 public String getKeyStorePinFile() {
406 return impl.getPropertyValue(INSTANCE.getKeyStorePinFilePropertyDefinition());
407 }
408
409
410
411 /**
412 * {@inheritDoc}
413 */
414 public void setKeyStorePinFile(String value) {
415 impl.setPropertyValue(INSTANCE.getKeyStorePinFilePropertyDefinition(), value);
416 }
417
418
419
420 /**
421 * {@inheritDoc}
422 */
423 public String getKeyStorePinProperty() {
424 return impl.getPropertyValue(INSTANCE.getKeyStorePinPropertyPropertyDefinition());
425 }
426
427
428
429 /**
430 * {@inheritDoc}
431 */
432 public void setKeyStorePinProperty(String value) {
433 impl.setPropertyValue(INSTANCE.getKeyStorePinPropertyPropertyDefinition(), value);
434 }
435
436
437
438 /**
439 * {@inheritDoc}
440 */
441 public ManagedObjectDefinition<? extends PKCS11KeyManagerProviderCfgClient, ? extends PKCS11KeyManagerProviderCfg> definition() {
442 return INSTANCE;
443 }
444
445
446
447 /**
448 * {@inheritDoc}
449 */
450 public PropertyProvider properties() {
451 return impl;
452 }
453
454
455
456 /**
457 * {@inheritDoc}
458 */
459 public void commit() throws ManagedObjectAlreadyExistsException,
460 MissingMandatoryPropertiesException, ConcurrentModificationException,
461 OperationRejectedException, AuthorizationException,
462 CommunicationException {
463 impl.commit();
464 }
465
466 }
467
468
469
470 /**
471 * Managed object server implementation.
472 */
473 private static class PKCS11KeyManagerProviderCfgServerImpl implements
474 PKCS11KeyManagerProviderCfg {
475
476 // Private implementation.
477 private ServerManagedObject<? extends PKCS11KeyManagerProviderCfg> impl;
478
479 // The value of the "enabled" property.
480 private final boolean pEnabled;
481
482 // The value of the "java-class" property.
483 private final String pJavaClass;
484
485 // The value of the "key-store-pin" property.
486 private final String pKeyStorePin;
487
488 // The value of the "key-store-pin-environment-variable" property.
489 private final String pKeyStorePinEnvironmentVariable;
490
491 // The value of the "key-store-pin-file" property.
492 private final String pKeyStorePinFile;
493
494 // The value of the "key-store-pin-property" property.
495 private final String pKeyStorePinProperty;
496
497
498
499 // Private constructor.
500 private PKCS11KeyManagerProviderCfgServerImpl(ServerManagedObject<? extends PKCS11KeyManagerProviderCfg> impl) {
501 this.impl = impl;
502 this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
503 this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
504 this.pKeyStorePin = impl.getPropertyValue(INSTANCE.getKeyStorePinPropertyDefinition());
505 this.pKeyStorePinEnvironmentVariable = impl.getPropertyValue(INSTANCE.getKeyStorePinEnvironmentVariablePropertyDefinition());
506 this.pKeyStorePinFile = impl.getPropertyValue(INSTANCE.getKeyStorePinFilePropertyDefinition());
507 this.pKeyStorePinProperty = impl.getPropertyValue(INSTANCE.getKeyStorePinPropertyPropertyDefinition());
508 }
509
510
511
512 /**
513 * {@inheritDoc}
514 */
515 public void addPKCS11ChangeListener(
516 ConfigurationChangeListener<PKCS11KeyManagerProviderCfg> listener) {
517 impl.registerChangeListener(listener);
518 }
519
520
521
522 /**
523 * {@inheritDoc}
524 */
525 public void removePKCS11ChangeListener(
526 ConfigurationChangeListener<PKCS11KeyManagerProviderCfg> listener) {
527 impl.deregisterChangeListener(listener);
528 }
529 /**
530 * {@inheritDoc}
531 */
532 public void addChangeListener(
533 ConfigurationChangeListener<KeyManagerProviderCfg> listener) {
534 impl.registerChangeListener(listener);
535 }
536
537
538
539 /**
540 * {@inheritDoc}
541 */
542 public void removeChangeListener(
543 ConfigurationChangeListener<KeyManagerProviderCfg> listener) {
544 impl.deregisterChangeListener(listener);
545 }
546
547
548
549 /**
550 * {@inheritDoc}
551 */
552 public boolean isEnabled() {
553 return pEnabled;
554 }
555
556
557
558 /**
559 * {@inheritDoc}
560 */
561 public String getJavaClass() {
562 return pJavaClass;
563 }
564
565
566
567 /**
568 * {@inheritDoc}
569 */
570 public String getKeyStorePin() {
571 return pKeyStorePin;
572 }
573
574
575
576 /**
577 * {@inheritDoc}
578 */
579 public String getKeyStorePinEnvironmentVariable() {
580 return pKeyStorePinEnvironmentVariable;
581 }
582
583
584
585 /**
586 * {@inheritDoc}
587 */
588 public String getKeyStorePinFile() {
589 return pKeyStorePinFile;
590 }
591
592
593
594 /**
595 * {@inheritDoc}
596 */
597 public String getKeyStorePinProperty() {
598 return pKeyStorePinProperty;
599 }
600
601
602
603 /**
604 * {@inheritDoc}
605 */
606 public Class<? extends PKCS11KeyManagerProviderCfg> configurationClass() {
607 return PKCS11KeyManagerProviderCfg.class;
608 }
609
610
611
612 /**
613 * {@inheritDoc}
614 */
615 public DN dn() {
616 return impl.getDN();
617 }
618
619 }
620 }