com.unboundid.directory.sdk.ds.api.AccountStatusNotificationHandler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of server-sdk Show documentation
Show all versions of server-sdk Show documentation
The UnboundID Server SDK is a library that may be used to develop various
types of extensions to Ping Identity server products, including the
PingDirectory Server, PingDirectoryProxy Server, PingDataSync Server,
PingDataMetrics Server, and PingAuthorize Server.
The newest version!
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* docs/licenses/cddl.txt
* or http://www.opensource.org/licenses/cddl1.php.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* docs/licenses/cddl.txt. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Portions Copyright 2010-2024 Ping Identity Corporation
*/
package com.unboundid.directory.sdk.ds.api;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import com.unboundid.directory.sdk.common.internal.ExampleUsageProvider;
import com.unboundid.directory.sdk.common.internal.Reconfigurable;
import com.unboundid.directory.sdk.common.internal.UnboundIDExtension;
import com.unboundid.directory.sdk.ds.config.
AccountStatusNotificationHandlerConfig;
import com.unboundid.directory.sdk.ds.types.AccountStatusNotification;
import com.unboundid.directory.sdk.ds.types.DirectoryServerContext;
import com.unboundid.directory.sdk.ds.internal.DirectoryServerExtension;
import com.unboundid.directory.sdk.proxy.internal.DirectoryProxyServerExtension;
import com.unboundid.directory.sdk.sync.internal.SynchronizationServerExtension;
import com.unboundid.ldap.sdk.LDAPException;
import com.unboundid.ldap.sdk.ResultCode;
import com.unboundid.util.Extensible;
import com.unboundid.util.ThreadSafety;
import com.unboundid.util.ThreadSafetyLevel;
import com.unboundid.util.args.ArgumentException;
import com.unboundid.util.args.ArgumentParser;
/**
* This class defines an API that must be implemented by extensions which have
* the ability to process notifications about events that occur that could
* change the status of a user account. For example, account status
* notification handlers may be used to notify the end user and/or
* administrators of a change to that user's account. The kinds of events that
* may trigger account status notifications are defined in the
* {@link com.unboundid.directory.sdk.ds.types.AccountStatusNotificationType}
* enum, and include things like user accounts locked due to authentication
* failures, password expiration errors and warnings, and administrative
* password resets.
*
* Configuring Account Status Notification Handlers
* In order to configure an account status notification handler created using
* this API, use a command like:
*
* dsconfig create-account-status-notification-handler \
* --handler-name "{handler-name}" \
* --type third-party \
* --set enabled:true \
* --set "extension-class:{class-name}" \
* --set "extension-argument:{name=value}"
*
* where "{handler-name}" is the name to use for the account status
* notification handler instance, "{class-name}" is the fully-qualified
* name of the Java class that extends
* {@code com.unboundid.directory.sdk.ds.api.AccountStatusNotificationHandler},
* and "{name=value}" represents name-value pairs for any arguments to
* provide to the account status notification handler. If multiple arguments
* should be provided to the handler, then the
* "--set extension-argument:{name=value}
" option should be
* provided multiple times.
*/
@Extensible()
@DirectoryServerExtension()
@DirectoryProxyServerExtension(appliesToLocalContent=true,
appliesToRemoteContent=false)
@SynchronizationServerExtension(appliesToLocalContent=true,
appliesToSynchronizedContent=false)
@ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE)
public abstract class AccountStatusNotificationHandler
implements UnboundIDExtension,
Reconfigurable,
ExampleUsageProvider
{
/**
* Creates a new instance of this account status notification handler. All
* account status notification handler implementations must include a default
* constructor, but any initialization should generally be done in the
* {@code initializeAccountStatusNotificationHandler} method.
*/
public AccountStatusNotificationHandler()
{
// No implementation is required.
}
/**
* {@inheritDoc}
*/
public abstract String getExtensionName();
/**
* {@inheritDoc}
*/
public abstract String[] getExtensionDescription();
/**
* {@inheritDoc}
*/
public void defineConfigArguments(final ArgumentParser parser)
throws ArgumentException
{
// No arguments will be allowed by default.
}
/**
* Initializes this account status notification handler.
*
* @param serverContext A handle to the server context for the server in
* which this extension is running.
* @param config The general configuration for this account status
* notification handler.
* @param parser The argument parser which has been initialized from
* the configuration for this account status
* notification handler.
*
* @throws LDAPException If a problem occurs while initializing this account
* status notificationHandler.
*/
public void initializeAccountStatusNotificationHandler(
final DirectoryServerContext serverContext,
final AccountStatusNotificationHandlerConfig config,
final ArgumentParser parser)
throws LDAPException
{
// No initialization will be performed by default.
}
/**
* {@inheritDoc}
*/
public boolean isConfigurationAcceptable(
final AccountStatusNotificationHandlerConfig config,
final ArgumentParser parser,
final List unacceptableReasons)
{
// No extended validation will be performed by default.
return true;
}
/**
* {@inheritDoc}
*/
public ResultCode applyConfiguration(
final AccountStatusNotificationHandlerConfig config,
final ArgumentParser parser,
final List adminActionsRequired,
final List messages)
{
// By default, no configuration changes will be applied. If there are any
// arguments, then add an admin action message indicating that the extension
// needs to be restarted for any changes to take effect.
if (! parser.getNamedArguments().isEmpty())
{
adminActionsRequired.add(
"No configuration change has actually been applied. The new " +
"configuration will not take effect until this account " +
"status notification handler is disabled and re-enabled or " +
"until the server is restarted.");
}
return ResultCode.SUCCESS;
}
/**
* Performs any cleanup which may be necessary when this account status
* notification handler is to be taken out of service.
*/
public void finalizeAccountStatusNotificationHandler()
{
// No implementation is required.
}
/**
* Performs any processing that may be necessary in conjunction with the
* provided account status notification.
*
* @param notification The account status notification to be processed.
*/
public abstract void handleStatusNotification(
final AccountStatusNotification notification);
/**
* {@inheritDoc}
*/
public Map,String> getExamplesArgumentSets()
{
return Collections.emptyMap();
}
}