001/* 002 * Copyright 2014-2024 Ping Identity Corporation 003 * All Rights Reserved. 004 */ 005/* 006 * Copyright 2014-2024 Ping Identity Corporation 007 * 008 * Licensed under the Apache License, Version 2.0 (the "License"); 009 * you may not use this file except in compliance with the License. 010 * You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, software 015 * distributed under the License is distributed on an "AS IS" BASIS, 016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 017 * See the License for the specific language governing permissions and 018 * limitations under the License. 019 */ 020/* 021 * Copyright (C) 2014-2024 Ping Identity Corporation 022 * 023 * This program is free software; you can redistribute it and/or modify 024 * it under the terms of the GNU General Public License (GPLv2 only) 025 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only) 026 * as published by the Free Software Foundation. 027 * 028 * This program is distributed in the hope that it will be useful, 029 * but WITHOUT ANY WARRANTY; without even the implied warranty of 030 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 031 * GNU General Public License for more details. 032 * 033 * You should have received a copy of the GNU General Public License 034 * along with this program; if not, see <http://www.gnu.org/licenses>. 035 */ 036package com.unboundid.ldap.listener.interceptor; 037 038 039 040import com.unboundid.ldap.sdk.LDAPException; 041 042import com.unboundid.util.Extensible; 043import com.unboundid.util.NotNull; 044import com.unboundid.util.ThreadSafety; 045import com.unboundid.util.ThreadSafetyLevel; 046 047 048 049/** 050 * This class defines an API that may be used to intercept and potentially alter 051 * communication between an LDAP client and the in-memory directory server. An 052 * operation interceptor may be enabled for use with the in-memory directory 053 * server by registering it with the 054 * {@link com.unboundid.ldap.listener.InMemoryDirectoryServerConfig}. The 055 * default implementation of all methods defined in this class is to return the 056 * provided request or result without altering it in any way. 057 * <BR><BR> 058 * Note that any operation interceptors configured for use will be invoked only 059 * for requests received via LDAP. Operations processed via method calls made 060 * directly to the {@link com.unboundid.ldap.listener.InMemoryDirectoryServer} 061 * class via the {@link com.unboundid.ldap.sdk.LDAPInterface} interface will not 062 * cause any operation interceptors to be invoked. 063 */ 064@Extensible() 065@ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE) 066public abstract class InMemoryOperationInterceptor 067{ 068 /** 069 * Invokes any processing that should be performed for the provided add 070 * request before it is passed to the in-memory directory server. 071 * 072 * @param request Information about the request that was received from the 073 * client. 074 * 075 * @throws LDAPException If the provided operation should not be passed onto 076 * the in-memory directory server, but the result 077 * represented by this exception should be used 078 * instead. 079 */ 080 public void processAddRequest( 081 @NotNull final InMemoryInterceptedAddRequest request) 082 throws LDAPException 083 { 084 // No processing will be performed by default. 085 } 086 087 088 089 /** 090 * Invokes any processing that should be performed for the provided add result 091 * before it is returned to the client. 092 * 093 * @param result Information about the add result that is to be returned to 094 * the client. 095 */ 096 public void processAddResult( 097 @NotNull final InMemoryInterceptedAddResult result) 098 { 099 // No processing will be performed by default. 100 } 101 102 103 104 /** 105 * Invokes any processing that should be performed for the provided simple 106 * bind request before it is passed to the in-memory directory server. 107 * 108 * @param request Information about the request that was received from the 109 * client. 110 * 111 * @throws LDAPException If the provided operation should not be passed onto 112 * the in-memory directory server, but the result 113 * represented by this exception should be used 114 * instead. 115 */ 116 public void processSimpleBindRequest( 117 @NotNull final InMemoryInterceptedSimpleBindRequest request) 118 throws LDAPException 119 { 120 // No processing will be performed by default. 121 } 122 123 124 125 /** 126 * Invokes any processing that should be performed for the provided simple 127 * bind result before it is returned to the client. 128 * 129 * @param result Information about the bind result that is to be returned to 130 * the client. 131 */ 132 public void processSimpleBindResult( 133 @NotNull final InMemoryInterceptedSimpleBindResult result) 134 { 135 // No processing will be performed by default. 136 } 137 138 139 140 /** 141 * Invokes any processing that should be performed for the provided SASL bind 142 * request before it is passed to the in-memory directory server. 143 * 144 * @param request Information about the request that was received from the 145 * client. 146 * 147 * @throws LDAPException If the provided operation should not be passed onto 148 * the in-memory directory server, but the result 149 * represented by this exception should be used 150 * instead. 151 */ 152 public void processSASLBindRequest( 153 @NotNull final InMemoryInterceptedSASLBindRequest request) 154 throws LDAPException 155 { 156 // No processing will be performed by default. 157 } 158 159 160 161 /** 162 * Invokes any processing that should be performed for the provided SASL bind 163 * result before it is returned to the client. 164 * 165 * @param result Information about the bind result that is to be returned to 166 * the client. 167 */ 168 public void processSASLBindResult( 169 @NotNull final InMemoryInterceptedSASLBindResult result) 170 { 171 // No processing will be performed by default. 172 } 173 174 175 176 /** 177 * Invokes any processing that should be performed for the provided compare 178 * request before it is passed to the in-memory directory server. 179 * 180 * @param request Information about the request that was received from the 181 * client. 182 * 183 * @throws LDAPException If the provided operation should not be passed onto 184 * the in-memory directory server, but the result 185 * represented by this exception should be used 186 * instead. 187 */ 188 public void processCompareRequest( 189 @NotNull final InMemoryInterceptedCompareRequest request) 190 throws LDAPException 191 { 192 // No processing will be performed by default. 193 } 194 195 196 197 /** 198 * Invokes any processing that should be performed for the provided compare 199 * result before it is returned to the client. 200 * 201 * @param result Information about the compare result that is to be returned 202 * to the client. 203 */ 204 public void processCompareResult( 205 @NotNull final InMemoryInterceptedCompareResult result) 206 { 207 // No processing will be performed by default. 208 } 209 210 211 212 /** 213 * Invokes any processing that should be performed for the provided delete 214 * request before it is passed to the in-memory directory server. 215 * 216 * @param request Information about the request that was received from the 217 * client. 218 * 219 * @throws LDAPException If the provided operation should not be passed onto 220 * the in-memory directory server, but the result 221 * represented by this exception should be used 222 * instead. 223 */ 224 public void processDeleteRequest( 225 @NotNull final InMemoryInterceptedDeleteRequest request) 226 throws LDAPException 227 { 228 // No processing will be performed by default. 229 } 230 231 232 233 /** 234 * Invokes any processing that should be performed for the provided delete 235 * result before it is returned to the client. 236 * 237 * @param result Information about the delete result that is to be returned 238 * to the client. 239 */ 240 public void processDeleteResult( 241 @NotNull final InMemoryInterceptedDeleteResult result) 242 { 243 // No processing will be performed by default. 244 } 245 246 247 248 /** 249 * Invokes any processing that should be performed for the provided extended 250 * request before it is passed to the in-memory directory server. 251 * 252 * @param request Information about the request that was received from the 253 * client. 254 * 255 * @throws LDAPException If the provided operation should not be passed onto 256 * the in-memory directory server, but the result 257 * represented by this exception should be used 258 * instead. 259 */ 260 public void processExtendedRequest( 261 @NotNull final InMemoryInterceptedExtendedRequest request) 262 throws LDAPException 263 { 264 // No processing will be performed by default. 265 } 266 267 268 269 /** 270 * Invokes any processing that should be performed for the provided extended 271 * result before it is returned to the client. 272 * 273 * @param result Information about the extended result that is to be 274 * returned to the client. 275 */ 276 public void processExtendedResult( 277 @NotNull final InMemoryInterceptedExtendedResult result) 278 { 279 // No processing will be performed by default. 280 } 281 282 283 284 /** 285 * Invokes any processing that should be performed for the provided modify 286 * request before it is passed to the in-memory directory server. 287 * 288 * @param request Information about the request that was received from the 289 * client. 290 * 291 * @throws LDAPException If the provided operation should not be passed onto 292 * the in-memory directory server, but the result 293 * represented by this exception should be used 294 * instead. 295 */ 296 public void processModifyRequest( 297 @NotNull final InMemoryInterceptedModifyRequest request) 298 throws LDAPException 299 { 300 // No processing will be performed by default. 301 } 302 303 304 305 /** 306 * Invokes any processing that should be performed for the provided modify 307 * result before it is returned to the client. 308 * 309 * @param result Information about the modify result that is to be returned 310 * to the client. 311 */ 312 public void processModifyResult( 313 @NotNull final InMemoryInterceptedModifyResult result) 314 { 315 // No processing will be performed by default. 316 } 317 318 319 320 /** 321 * Invokes any processing that should be performed for the provided modify DN 322 * request before it is passed to the in-memory directory server. 323 * 324 * @param request Information about the request that was received from the 325 * client. 326 * 327 * @throws LDAPException If the provided operation should not be passed onto 328 * the in-memory directory server, but the result 329 * represented by this exception should be used 330 * instead. 331 */ 332 public void processModifyDNRequest( 333 @NotNull final InMemoryInterceptedModifyDNRequest request) 334 throws LDAPException 335 { 336 // No processing will be performed by default. 337 } 338 339 340 341 /** 342 * Invokes any processing that should be performed for the provided modify DN 343 * result before it is returned to the client. 344 * 345 * @param result Information about the modify DN result that is to be 346 * returned to the client. 347 */ 348 public void processModifyDNResult( 349 @NotNull final InMemoryInterceptedModifyDNResult result) 350 { 351 // No processing will be performed by default. 352 } 353 354 355 356 /** 357 * Invokes any processing that should be performed for the provided search 358 * request before it is passed to the in-memory directory server. 359 * 360 * @param request Information about the request that was received from the 361 * client. 362 * 363 * @throws LDAPException If the provided operation should not be passed onto 364 * the in-memory directory server, but the result 365 * represented by this exception should be used 366 * instead. 367 */ 368 public void processSearchRequest( 369 @NotNull final InMemoryInterceptedSearchRequest request) 370 throws LDAPException 371 { 372 // No processing will be performed by default. 373 } 374 375 376 377 /** 378 * Invokes any processing that should be performed for the provided search 379 * result entry before it is returned to the client. 380 * 381 * @param entry Information about the search result entry to be returned. 382 */ 383 public void processSearchEntry( 384 @NotNull final InMemoryInterceptedSearchEntry entry) 385 { 386 // No processing will be performed by default. 387 } 388 389 390 391 /** 392 * Invokes any processing that should be performed for the provided search 393 * result reference before it is returned to the client. 394 * 395 * @param reference Information about the search result reference to be 396 * returned. 397 */ 398 public void processSearchReference( 399 @NotNull final InMemoryInterceptedSearchReference reference) 400 { 401 // No processing will be performed by default. 402 } 403 404 405 406 /** 407 * Invokes any processing that should be performed for the provided search 408 * result before it is returned to the client. 409 * 410 * @param result Information about the search result that is to be returned 411 * to the client. 412 */ 413 public void processSearchResult( 414 @NotNull final InMemoryInterceptedSearchResult result) 415 { 416 // No processing will be performed by default. 417 } 418 419 420 421 /** 422 * Invokes any processing that should be performed for the provided 423 * intermediate response before it is returned to the client. 424 * 425 * @param response Information about the intermediate response to be 426 * returned to the client. 427 */ 428 public void processIntermediateResponse( 429 @NotNull final InMemoryInterceptedIntermediateResponse response) 430 { 431 // No processing will be performed by default. 432 } 433}