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 legal-notices/CDDLv1_0.txt 010 * or http://forgerock.org/license/CDDLv1.0.html. 011 * See the License for the specific language governing permissions 012 * and limitations under the License. 013 * 014 * When distributing Covered Code, include this CDDL HEADER in each 015 * file and include the License file at legal-notices/CDDLv1_0.txt. 016 * If applicable, add the following below this CDDL HEADER, with the 017 * fields enclosed by brackets "[]" replaced with your own identifying 018 * information: 019 * Portions Copyright [yyyy] [name of copyright owner] 020 * 021 * CDDL HEADER END 022 * 023 * 024 * Copyright 2008 Sun Microsystems, Inc. 025 */ 026package org.forgerock.opendj.server.config.meta; 027 028 029 030import java.net.InetAddress; 031import java.util.Collection; 032import java.util.SortedSet; 033import org.forgerock.opendj.config.AdministratorAction; 034import org.forgerock.opendj.config.AggregationPropertyDefinition; 035import org.forgerock.opendj.config.AliasDefaultBehaviorProvider; 036import org.forgerock.opendj.config.client.ConcurrentModificationException; 037import org.forgerock.opendj.config.client.ManagedObject; 038import org.forgerock.opendj.config.client.MissingMandatoryPropertiesException; 039import org.forgerock.opendj.config.client.OperationRejectedException; 040import org.forgerock.opendj.config.conditions.Conditions; 041import org.forgerock.opendj.config.DefaultBehaviorProvider; 042import org.forgerock.opendj.config.DefinedDefaultBehaviorProvider; 043import org.forgerock.opendj.config.IntegerPropertyDefinition; 044import org.forgerock.opendj.config.IPAddressPropertyDefinition; 045import org.forgerock.opendj.config.ManagedObjectAlreadyExistsException; 046import org.forgerock.opendj.config.ManagedObjectDefinition; 047import org.forgerock.opendj.config.PropertyOption; 048import org.forgerock.opendj.config.PropertyProvider; 049import org.forgerock.opendj.config.server.ConfigurationChangeListener; 050import org.forgerock.opendj.config.server.ServerManagedObject; 051import org.forgerock.opendj.config.StringPropertyDefinition; 052import org.forgerock.opendj.config.Tag; 053import org.forgerock.opendj.config.TopCfgDefn; 054import org.forgerock.opendj.config.UndefinedDefaultBehaviorProvider; 055import org.forgerock.opendj.ldap.DN; 056import org.forgerock.opendj.ldap.LdapException; 057import org.forgerock.opendj.server.config.client.AdministrationConnectorCfgClient; 058import org.forgerock.opendj.server.config.client.KeyManagerProviderCfgClient; 059import org.forgerock.opendj.server.config.client.TrustManagerProviderCfgClient; 060import org.forgerock.opendj.server.config.server.AdministrationConnectorCfg; 061import org.forgerock.opendj.server.config.server.KeyManagerProviderCfg; 062import org.forgerock.opendj.server.config.server.TrustManagerProviderCfg; 063 064 065 066/** 067 * An interface for querying the Administration Connector managed 068 * object definition meta information. 069 * <p> 070 * The Administration Connector is used to interact with 071 * administration tools using LDAP. 072 */ 073public final class AdministrationConnectorCfgDefn extends ManagedObjectDefinition<AdministrationConnectorCfgClient, AdministrationConnectorCfg> { 074 075 /** The singleton configuration definition instance. */ 076 private static final AdministrationConnectorCfgDefn INSTANCE = new AdministrationConnectorCfgDefn(); 077 078 079 080 /** The "key-manager-provider" property definition. */ 081 private static final AggregationPropertyDefinition<KeyManagerProviderCfgClient, KeyManagerProviderCfg> PD_KEY_MANAGER_PROVIDER; 082 083 084 085 /** The "listen-address" property definition. */ 086 private static final IPAddressPropertyDefinition PD_LISTEN_ADDRESS; 087 088 089 090 /** The "listen-port" property definition. */ 091 private static final IntegerPropertyDefinition PD_LISTEN_PORT; 092 093 094 095 /** The "ssl-cert-nickname" property definition. */ 096 private static final StringPropertyDefinition PD_SSL_CERT_NICKNAME; 097 098 099 100 /** The "ssl-cipher-suite" property definition. */ 101 private static final StringPropertyDefinition PD_SSL_CIPHER_SUITE; 102 103 104 105 /** The "ssl-protocol" property definition. */ 106 private static final StringPropertyDefinition PD_SSL_PROTOCOL; 107 108 109 110 /** The "trust-manager-provider" property definition. */ 111 private static final AggregationPropertyDefinition<TrustManagerProviderCfgClient, TrustManagerProviderCfg> PD_TRUST_MANAGER_PROVIDER; 112 113 114 115 /** Build the "key-manager-provider" property definition. */ 116 static { 117 AggregationPropertyDefinition.Builder<KeyManagerProviderCfgClient, KeyManagerProviderCfg> builder = AggregationPropertyDefinition.createBuilder(INSTANCE, "key-manager-provider"); 118 builder.setOption(PropertyOption.MANDATORY); 119 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.SERVER_RESTART, INSTANCE, "key-manager-provider")); 120 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>()); 121 builder.setParentPath("/"); 122 builder.setRelationDefinition("key-manager-provider"); 123 builder.setTargetIsEnabledCondition(Conditions.contains("enabled", "true")); 124 PD_KEY_MANAGER_PROVIDER = builder.getInstance(); 125 INSTANCE.registerPropertyDefinition(PD_KEY_MANAGER_PROVIDER); 126 INSTANCE.registerConstraint(PD_KEY_MANAGER_PROVIDER.getSourceConstraint()); 127 } 128 129 130 131 /** Build the "listen-address" property definition. */ 132 static { 133 IPAddressPropertyDefinition.Builder builder = IPAddressPropertyDefinition.createBuilder(INSTANCE, "listen-address"); 134 builder.setOption(PropertyOption.MULTI_VALUED); 135 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.SERVER_RESTART, INSTANCE, "listen-address")); 136 DefaultBehaviorProvider<InetAddress> provider = new DefinedDefaultBehaviorProvider<InetAddress>("0.0.0.0"); 137 builder.setDefaultBehaviorProvider(provider); 138 PD_LISTEN_ADDRESS = builder.getInstance(); 139 INSTANCE.registerPropertyDefinition(PD_LISTEN_ADDRESS); 140 } 141 142 143 144 /** Build the "listen-port" property definition. */ 145 static { 146 IntegerPropertyDefinition.Builder builder = IntegerPropertyDefinition.createBuilder(INSTANCE, "listen-port"); 147 builder.setOption(PropertyOption.MANDATORY); 148 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.COMPONENT_RESTART, INSTANCE, "listen-port")); 149 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<Integer>()); 150 builder.setUpperLimit(65535); 151 builder.setLowerLimit(1); 152 PD_LISTEN_PORT = builder.getInstance(); 153 INSTANCE.registerPropertyDefinition(PD_LISTEN_PORT); 154 } 155 156 157 158 /** Build the "ssl-cert-nickname" property definition. */ 159 static { 160 StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "ssl-cert-nickname"); 161 builder.setOption(PropertyOption.MULTI_VALUED); 162 builder.setOption(PropertyOption.MANDATORY); 163 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.SERVER_RESTART, INSTANCE, "ssl-cert-nickname")); 164 builder.setDefaultBehaviorProvider(new AliasDefaultBehaviorProvider<String>(INSTANCE, "ssl-cert-nickname")); 165 PD_SSL_CERT_NICKNAME = builder.getInstance(); 166 INSTANCE.registerPropertyDefinition(PD_SSL_CERT_NICKNAME); 167 } 168 169 170 171 /** Build the "ssl-cipher-suite" property definition. */ 172 static { 173 StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "ssl-cipher-suite"); 174 builder.setOption(PropertyOption.MULTI_VALUED); 175 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "ssl-cipher-suite")); 176 builder.setDefaultBehaviorProvider(new AliasDefaultBehaviorProvider<String>(INSTANCE, "ssl-cipher-suite")); 177 PD_SSL_CIPHER_SUITE = builder.getInstance(); 178 INSTANCE.registerPropertyDefinition(PD_SSL_CIPHER_SUITE); 179 } 180 181 182 183 /** Build the "ssl-protocol" property definition. */ 184 static { 185 StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "ssl-protocol"); 186 builder.setOption(PropertyOption.MULTI_VALUED); 187 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "ssl-protocol")); 188 builder.setDefaultBehaviorProvider(new AliasDefaultBehaviorProvider<String>(INSTANCE, "ssl-protocol")); 189 PD_SSL_PROTOCOL = builder.getInstance(); 190 INSTANCE.registerPropertyDefinition(PD_SSL_PROTOCOL); 191 } 192 193 194 195 /** Build the "trust-manager-provider" property definition. */ 196 static { 197 AggregationPropertyDefinition.Builder<TrustManagerProviderCfgClient, TrustManagerProviderCfg> builder = AggregationPropertyDefinition.createBuilder(INSTANCE, "trust-manager-provider"); 198 builder.setOption(PropertyOption.MANDATORY); 199 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.SERVER_RESTART, INSTANCE, "trust-manager-provider")); 200 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>()); 201 builder.setParentPath("/"); 202 builder.setRelationDefinition("trust-manager-provider"); 203 builder.setTargetIsEnabledCondition(Conditions.contains("enabled", "true")); 204 PD_TRUST_MANAGER_PROVIDER = builder.getInstance(); 205 INSTANCE.registerPropertyDefinition(PD_TRUST_MANAGER_PROVIDER); 206 INSTANCE.registerConstraint(PD_TRUST_MANAGER_PROVIDER.getSourceConstraint()); 207 } 208 209 210 211 // Register the tags associated with this managed object definition. 212 static { 213 INSTANCE.registerTag(Tag.valueOf("core-server")); 214 } 215 216 217 218 /** 219 * Get the Administration Connector configuration definition 220 * singleton. 221 * 222 * @return Returns the Administration Connector configuration 223 * definition singleton. 224 */ 225 public static AdministrationConnectorCfgDefn getInstance() { 226 return INSTANCE; 227 } 228 229 230 231 /** 232 * Private constructor. 233 */ 234 private AdministrationConnectorCfgDefn() { 235 super("administration-connector", TopCfgDefn.getInstance()); 236 } 237 238 239 240 /** {@inheritDoc} */ 241 public AdministrationConnectorCfgClient createClientConfiguration( 242 ManagedObject<? extends AdministrationConnectorCfgClient> impl) { 243 return new AdministrationConnectorCfgClientImpl(impl); 244 } 245 246 247 248 /** {@inheritDoc} */ 249 public AdministrationConnectorCfg createServerConfiguration( 250 ServerManagedObject<? extends AdministrationConnectorCfg> impl) { 251 return new AdministrationConnectorCfgServerImpl(impl); 252 } 253 254 255 256 /** {@inheritDoc} */ 257 public Class<AdministrationConnectorCfg> getServerConfigurationClass() { 258 return AdministrationConnectorCfg.class; 259 } 260 261 262 263 /** 264 * Get the "key-manager-provider" property definition. 265 * <p> 266 * Specifies the name of the key manager that is used with the 267 * Administration Connector . 268 * 269 * @return Returns the "key-manager-provider" property definition. 270 */ 271 public AggregationPropertyDefinition<KeyManagerProviderCfgClient, KeyManagerProviderCfg> getKeyManagerProviderPropertyDefinition() { 272 return PD_KEY_MANAGER_PROVIDER; 273 } 274 275 276 277 /** 278 * Get the "listen-address" property definition. 279 * <p> 280 * Specifies the address or set of addresses on which this 281 * Administration Connector should listen for connections from LDAP 282 * clients. 283 * <p> 284 * Multiple addresses may be provided as separate values for this 285 * attribute. If no values are provided, then the Administration 286 * Connector listens on all interfaces. 287 * 288 * @return Returns the "listen-address" property definition. 289 */ 290 public IPAddressPropertyDefinition getListenAddressPropertyDefinition() { 291 return PD_LISTEN_ADDRESS; 292 } 293 294 295 296 /** 297 * Get the "listen-port" property definition. 298 * <p> 299 * Specifies the port number on which the Administration Connector 300 * will listen for connections from clients. 301 * <p> 302 * Only a single port number may be provided. 303 * 304 * @return Returns the "listen-port" property definition. 305 */ 306 public IntegerPropertyDefinition getListenPortPropertyDefinition() { 307 return PD_LISTEN_PORT; 308 } 309 310 311 312 /** 313 * Get the "ssl-cert-nickname" property definition. 314 * <p> 315 * Specifies the nicknames (also called the aliases) of the 316 * certificates that the Administration Connector should use when 317 * performing SSL communication. The property can be used multiple 318 * times (referencing different nicknames) when an RSA, a DSA, and an 319 * ECC based server certificate is used in parallel. 320 * 321 * @return Returns the "ssl-cert-nickname" property definition. 322 */ 323 public StringPropertyDefinition getSSLCertNicknamePropertyDefinition() { 324 return PD_SSL_CERT_NICKNAME; 325 } 326 327 328 329 /** 330 * Get the "ssl-cipher-suite" property definition. 331 * <p> 332 * Specifies the names of the SSL cipher suites that are allowed for 333 * use in SSL communication. 334 * 335 * @return Returns the "ssl-cipher-suite" property definition. 336 */ 337 public StringPropertyDefinition getSSLCipherSuitePropertyDefinition() { 338 return PD_SSL_CIPHER_SUITE; 339 } 340 341 342 343 /** 344 * Get the "ssl-protocol" property definition. 345 * <p> 346 * Specifies the names of the SSL protocols that are allowed for use 347 * in SSL or StartTLS communication. 348 * 349 * @return Returns the "ssl-protocol" property definition. 350 */ 351 public StringPropertyDefinition getSSLProtocolPropertyDefinition() { 352 return PD_SSL_PROTOCOL; 353 } 354 355 356 357 /** 358 * Get the "trust-manager-provider" property definition. 359 * <p> 360 * Specifies the name of the trust manager that is used with the 361 * Administration Connector . 362 * 363 * @return Returns the "trust-manager-provider" property definition. 364 */ 365 public AggregationPropertyDefinition<TrustManagerProviderCfgClient, TrustManagerProviderCfg> getTrustManagerProviderPropertyDefinition() { 366 return PD_TRUST_MANAGER_PROVIDER; 367 } 368 369 370 371 /** 372 * Managed object client implementation. 373 */ 374 private static class AdministrationConnectorCfgClientImpl implements 375 AdministrationConnectorCfgClient { 376 377 /** Private implementation. */ 378 private ManagedObject<? extends AdministrationConnectorCfgClient> impl; 379 380 381 382 /** Private constructor. */ 383 private AdministrationConnectorCfgClientImpl( 384 ManagedObject<? extends AdministrationConnectorCfgClient> impl) { 385 this.impl = impl; 386 } 387 388 389 390 /** {@inheritDoc} */ 391 public String getKeyManagerProvider() { 392 return impl.getPropertyValue(INSTANCE.getKeyManagerProviderPropertyDefinition()); 393 } 394 395 396 397 /** {@inheritDoc} */ 398 public void setKeyManagerProvider(String value) { 399 impl.setPropertyValue(INSTANCE.getKeyManagerProviderPropertyDefinition(), value); 400 } 401 402 403 404 /** {@inheritDoc} */ 405 public SortedSet<InetAddress> getListenAddress() { 406 return impl.getPropertyValues(INSTANCE.getListenAddressPropertyDefinition()); 407 } 408 409 410 411 /** {@inheritDoc} */ 412 public void setListenAddress(Collection<InetAddress> values) { 413 impl.setPropertyValues(INSTANCE.getListenAddressPropertyDefinition(), values); 414 } 415 416 417 418 /** {@inheritDoc} */ 419 public Integer getListenPort() { 420 return impl.getPropertyValue(INSTANCE.getListenPortPropertyDefinition()); 421 } 422 423 424 425 /** {@inheritDoc} */ 426 public void setListenPort(int value) { 427 impl.setPropertyValue(INSTANCE.getListenPortPropertyDefinition(), value); 428 } 429 430 431 432 /** {@inheritDoc} */ 433 public SortedSet<String> getSSLCertNickname() { 434 return impl.getPropertyValues(INSTANCE.getSSLCertNicknamePropertyDefinition()); 435 } 436 437 438 439 /** {@inheritDoc} */ 440 public void setSSLCertNickname(Collection<String> values) { 441 impl.setPropertyValues(INSTANCE.getSSLCertNicknamePropertyDefinition(), values); 442 } 443 444 445 446 /** {@inheritDoc} */ 447 public SortedSet<String> getSSLCipherSuite() { 448 return impl.getPropertyValues(INSTANCE.getSSLCipherSuitePropertyDefinition()); 449 } 450 451 452 453 /** {@inheritDoc} */ 454 public void setSSLCipherSuite(Collection<String> values) { 455 impl.setPropertyValues(INSTANCE.getSSLCipherSuitePropertyDefinition(), values); 456 } 457 458 459 460 /** {@inheritDoc} */ 461 public SortedSet<String> getSSLProtocol() { 462 return impl.getPropertyValues(INSTANCE.getSSLProtocolPropertyDefinition()); 463 } 464 465 466 467 /** {@inheritDoc} */ 468 public void setSSLProtocol(Collection<String> values) { 469 impl.setPropertyValues(INSTANCE.getSSLProtocolPropertyDefinition(), values); 470 } 471 472 473 474 /** {@inheritDoc} */ 475 public String getTrustManagerProvider() { 476 return impl.getPropertyValue(INSTANCE.getTrustManagerProviderPropertyDefinition()); 477 } 478 479 480 481 /** {@inheritDoc} */ 482 public void setTrustManagerProvider(String value) { 483 impl.setPropertyValue(INSTANCE.getTrustManagerProviderPropertyDefinition(), value); 484 } 485 486 487 488 /** {@inheritDoc} */ 489 public ManagedObjectDefinition<? extends AdministrationConnectorCfgClient, ? extends AdministrationConnectorCfg> definition() { 490 return INSTANCE; 491 } 492 493 494 495 /** {@inheritDoc} */ 496 public PropertyProvider properties() { 497 return impl; 498 } 499 500 501 502 /** {@inheritDoc} */ 503 public void commit() throws ManagedObjectAlreadyExistsException, 504 MissingMandatoryPropertiesException, ConcurrentModificationException, 505 OperationRejectedException, LdapException { 506 impl.commit(); 507 } 508 509 510 511 /** {@inheritDoc} */ 512 public String toString() { 513 return impl.toString(); 514 } 515 } 516 517 518 519 /** 520 * Managed object server implementation. 521 */ 522 private static class AdministrationConnectorCfgServerImpl implements 523 AdministrationConnectorCfg { 524 525 /** Private implementation. */ 526 private ServerManagedObject<? extends AdministrationConnectorCfg> impl; 527 528 /** The value of the "key-manager-provider" property. */ 529 private final String pKeyManagerProvider; 530 531 /** The value of the "listen-address" property. */ 532 private final SortedSet<InetAddress> pListenAddress; 533 534 /** The value of the "listen-port" property. */ 535 private final int pListenPort; 536 537 /** The value of the "ssl-cert-nickname" property. */ 538 private final SortedSet<String> pSSLCertNickname; 539 540 /** The value of the "ssl-cipher-suite" property. */ 541 private final SortedSet<String> pSSLCipherSuite; 542 543 /** The value of the "ssl-protocol" property. */ 544 private final SortedSet<String> pSSLProtocol; 545 546 /** The value of the "trust-manager-provider" property. */ 547 private final String pTrustManagerProvider; 548 549 550 551 /** Private constructor. */ 552 private AdministrationConnectorCfgServerImpl(ServerManagedObject<? extends AdministrationConnectorCfg> impl) { 553 this.impl = impl; 554 this.pKeyManagerProvider = impl.getPropertyValue(INSTANCE.getKeyManagerProviderPropertyDefinition()); 555 this.pListenAddress = impl.getPropertyValues(INSTANCE.getListenAddressPropertyDefinition()); 556 this.pListenPort = impl.getPropertyValue(INSTANCE.getListenPortPropertyDefinition()); 557 this.pSSLCertNickname = impl.getPropertyValues(INSTANCE.getSSLCertNicknamePropertyDefinition()); 558 this.pSSLCipherSuite = impl.getPropertyValues(INSTANCE.getSSLCipherSuitePropertyDefinition()); 559 this.pSSLProtocol = impl.getPropertyValues(INSTANCE.getSSLProtocolPropertyDefinition()); 560 this.pTrustManagerProvider = impl.getPropertyValue(INSTANCE.getTrustManagerProviderPropertyDefinition()); 561 } 562 563 564 565 /** {@inheritDoc} */ 566 public void addChangeListener( 567 ConfigurationChangeListener<AdministrationConnectorCfg> listener) { 568 impl.registerChangeListener(listener); 569 } 570 571 572 573 /** {@inheritDoc} */ 574 public void removeChangeListener( 575 ConfigurationChangeListener<AdministrationConnectorCfg> listener) { 576 impl.deregisterChangeListener(listener); 577 } 578 579 580 581 /** {@inheritDoc} */ 582 public String getKeyManagerProvider() { 583 return pKeyManagerProvider; 584 } 585 586 587 588 /** 589 * {@inheritDoc} 590 */ 591 public DN getKeyManagerProviderDN() { 592 String value = getKeyManagerProvider(); 593 if (value == null) return null; 594 return INSTANCE.getKeyManagerProviderPropertyDefinition().getChildDN(value); 595 } 596 597 598 599 /** {@inheritDoc} */ 600 public SortedSet<InetAddress> getListenAddress() { 601 return pListenAddress; 602 } 603 604 605 606 /** {@inheritDoc} */ 607 public int getListenPort() { 608 return pListenPort; 609 } 610 611 612 613 /** {@inheritDoc} */ 614 public SortedSet<String> getSSLCertNickname() { 615 return pSSLCertNickname; 616 } 617 618 619 620 /** {@inheritDoc} */ 621 public SortedSet<String> getSSLCipherSuite() { 622 return pSSLCipherSuite; 623 } 624 625 626 627 /** {@inheritDoc} */ 628 public SortedSet<String> getSSLProtocol() { 629 return pSSLProtocol; 630 } 631 632 633 634 /** {@inheritDoc} */ 635 public String getTrustManagerProvider() { 636 return pTrustManagerProvider; 637 } 638 639 640 641 /** 642 * {@inheritDoc} 643 */ 644 public DN getTrustManagerProviderDN() { 645 String value = getTrustManagerProvider(); 646 if (value == null) return null; 647 return INSTANCE.getTrustManagerProviderPropertyDefinition().getChildDN(value); 648 } 649 650 651 652 /** {@inheritDoc} */ 653 public Class<? extends AdministrationConnectorCfg> configurationClass() { 654 return AdministrationConnectorCfg.class; 655 } 656 657 658 659 /** {@inheritDoc} */ 660 public DN dn() { 661 return impl.getDN(); 662 } 663 664 665 666 /** {@inheritDoc} */ 667 public String toString() { 668 return impl.toString(); 669 } 670 } 671}