001package com.pingidentity.pd.plugin; 002 003import com.unboundid.directory.sdk.common.operation.UpdatableAddRequest; 004import com.unboundid.directory.sdk.common.operation.UpdatableAddResult; 005import com.unboundid.directory.sdk.common.types.ActiveOperationContext; 006import com.unboundid.directory.sdk.common.types.UpdatableEntry; 007import com.unboundid.directory.sdk.ds.api.Plugin; 008import com.unboundid.directory.sdk.ds.config.PluginConfig; 009import com.unboundid.directory.sdk.ds.types.DirectoryServerContext; 010import com.unboundid.directory.sdk.ds.types.PreParsePluginResult; 011import com.unboundid.ldap.sdk.Attribute; 012import com.unboundid.ldap.sdk.LDAPException; 013import com.unboundid.ldap.sdk.ResultCode; 014import com.unboundid.util.args.ArgumentException; 015import com.unboundid.util.args.ArgumentParser; 016import com.unboundid.util.args.AttributeNameArgumentValueValidator; 017import com.unboundid.util.args.StringArgument; 018 019import java.util.List; 020 021/** 022 * This class provides a generic mechanism to inject real attributes 023 * in entries 024 */ 025public class AttributeInjector extends Plugin { 026 027 public static final String ATTRIBUTE_TYPE_ARG = "attribute-type"; 028 public static final String ATTRIBUTE_VALUE_ARG = "attribute-value"; 029 private Attribute attribute; 030 031 @Override 032 public String getExtensionName() { 033 return "Attribute Injector"; 034 } 035 036 @Override 037 public String[] getExtensionDescription() { 038 return new String[]{"Injects real attributes into entries"}; 039 } 040 041 @Override 042 public void defineConfigArguments(ArgumentParser parser) throws ArgumentException { 043 StringArgument attributeTypeArg = new StringArgument(null, ATTRIBUTE_TYPE_ARG,true,1,"{attribute-type}","The attribute type to inject into entries"); 044 attributeTypeArg.addValueValidator(new AttributeNameArgumentValueValidator()); 045 parser.addArgument(attributeTypeArg); 046 047 StringArgument attributeValuesArg = new StringArgument(null, ATTRIBUTE_VALUE_ARG,true,0,"{attribute-value}","The attribute value(s) to populate in the attribute"); 048 parser.addArgument(attributeValuesArg); 049 } 050 051 @Override 052 public ResultCode applyConfiguration(PluginConfig config, ArgumentParser parser, List<String> adminActionsRequired, List<String> messages) { 053 String attributeType = parser.getStringArgument(ATTRIBUTE_TYPE_ARG).getValue(); 054 List<String> attributeValues = parser.getStringArgument(ATTRIBUTE_VALUE_ARG).getValues(); 055 attribute = new Attribute(attributeType,attributeValues); 056 return ResultCode.SUCCESS; 057 } 058 059 @Override 060 public void initializePlugin(DirectoryServerContext serverContext, PluginConfig config, ArgumentParser parser) throws LDAPException { 061 ResultCode resultCode = applyConfiguration(config, parser, null, null); 062 if (!ResultCode.SUCCESS.equals(resultCode)) { 063 throw new LDAPException(ResultCode.OTHER,"Error applygin configuration during plugin initialization"); 064 } 065 } 066 067 /** 068 * Performs the necessary processing to inject the configured attribute into an entry upon incoming ADD request 069 * @param operationContext the operation context 070 * @param request the incoming request 071 * @param result the result to return to the client 072 * @return 073 */ 074 @Override 075 public PreParsePluginResult doPreParse(ActiveOperationContext operationContext, UpdatableAddRequest request, UpdatableAddResult result) { 076 UpdatableEntry entry = request.getEntry(); 077 if ( entry != null && !entry.hasAttribute(attribute.getName())){ 078 entry.addAttribute(attribute); 079 } 080 return PreParsePluginResult.SUCCESS; 081 } 082}