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