Package org.opensaml.saml.saml2.profile.impl

# Class CopyNameIDFromRequest

java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
org.opensaml.profile.action.AbstractProfileAction
org.opensaml.saml.saml2.profile.impl.CopyNameIDFromRequest

All Implemented Interfaces:
  `Component`, `DestructableComponent`, `InitializableComponent`, `ProfileAction`

public class CopyNameIDFromRequest extends AbstractProfileAction
Action that builds a `NameID` and adds it to the `Subject` of all the statements in all the assertions found in a `Response`. The message to update is returned by a lookup strategy, by default the message returned by `InOutOperationContext.getOutboundMessageContext()`.

No assertions or statements will be created by this action, but if no `Subject` exists in the statements found, it will be created.

The source of the `NameID` is a `SAMLSubjectNameIdentifierContext` returned by a lookup strategy.

Event:
  `EventIds.PROCEED_EVENT_ID`, `EventIds.INVALID_MSG_CTX`

## Field Summary

Fields
Modifier and Type
Field
Description
`private final org.slf4j.Logger`
`log`
Class logger.
`private NameID`
`nameId`
NameID to copy.
`private final SAMLObjectBuilder<NameID>`
`nameIdBuilder`
Builder for NameID objects.
`private Function<ProfileRequestContext,SAMLSubjectNameIdentifierContext>`
`nameIdentifierContextLookupStrategy`
Strategy used to locate the name identifier context to copy from.
`private boolean`
`overwriteExisting`
Flag controlling whether to overwrite an existing NameID.
`private Response`
`response`
Response to modify.
`private Function<ProfileRequestContext,Response>`
`responseLookupStrategy`
Strategy used to locate the `Response` to operate on.
`private final SAMLObjectBuilder<Subject>`
`subjectBuilder`
Builder for Subject objects.

## Constructor Summary

Constructors
Constructor
Description
`CopyNameIDFromRequest()`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`private NameID`
`cloneNameID()`
Create an efficient field-wise copy of a `NameID`.
`protected void`
`doExecute(ProfileRequestContext profileRequestContext)`
Performs this action.
`protected boolean`
`doPreExecute(ProfileRequestContext profileRequestContext)`
Called prior to execution, actions may override this method to perform pre-processing for a request.
`private Subject`
`getAssertionSubject(Assertion assertion)`
Get the subject to which the name identifier will be added.
`void`
`setNameIDContextLookupStrategy(Function<ProfileRequestContext,SAMLSubjectNameIdentifierContext> strategy)`
Set the strategy used to locate the `SAMLSubjectNameIdentifierContext` to copy from.
`void`
`setOverwriteExisting(boolean flag)`
Set whether to overwrite any existing `NameID` objects found.
`void`
`setResponseLookupStrategy(Function<ProfileRequestContext,Response> strategy)`
Set the strategy used to locate the `Response` to operate on.

### Methods inherited from class org.opensaml.profile.action.AbstractProfileAction

`doPostExecute, doPostExecute, ensureHttpServletRequest, ensureHttpServletResponse, execute, getHttpServletRequest, getHttpServletRequestSupplier, getHttpServletResponse, getHttpServletResponseSupplier, getLogPrefix, isPreExecuteCalled, setHttpServletRequestSupplier, setHttpServletResponseSupplier`

### Methods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent

`checkComponentActive, checkSetterPreconditions, destroy, doDestroy, doInitialize, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException, initialize, isDestroyed, isInitialized`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface net.shibboleth.shared.component.InitializableComponent

`initialize, isInitialized`

## Field Details

### log

@Nonnull private final org.slf4j.Logger log
Class logger.

### subjectBuilder

@Nonnull private final SAMLObjectBuilder<Subject> subjectBuilder
Builder for Subject objects.

### nameIdBuilder

@Nonnull private final SAMLObjectBuilder<NameID> nameIdBuilder
Builder for NameID objects.

### overwriteExisting

private boolean overwriteExisting
Flag controlling whether to overwrite an existing NameID.

### nameIdentifierContextLookupStrategy

@Nonnull private Function<ProfileRequestContext,SAMLSubjectNameIdentifierContext> nameIdentifierContextLookupStrategy
Strategy used to locate the name identifier context to copy from.

### responseLookupStrategy

@Nonnull private Function<ProfileRequestContext,Response> responseLookupStrategy
Strategy used to locate the `Response` to operate on.

### nameId

@NonnullBeforeExec private NameID nameId
NameID to copy.

### response

@NonnullBeforeExec private Response response
Response to modify.

## Constructor Details

### CopyNameIDFromRequest

public CopyNameIDFromRequest()
Constructor.

## Method Details

### setOverwriteExisting

public void setOverwriteExisting(boolean flag)
Set whether to overwrite any existing `NameID` objects found.

Parameters:
  `flag` - true iff the action should overwrite any existing objects

### setNameIDContextLookupStrategy

public void setNameIDContextLookupStrategy(@Nonnull Function<ProfileRequestContext,SAMLSubjectNameIdentifierContext> strategy)
Set the strategy used to locate the `SAMLSubjectNameIdentifierContext` to copy from.

Parameters:
  `strategy` - lookup strategy

### setResponseLookupStrategy

public void setResponseLookupStrategy(@Nonnull Function<ProfileRequestContext,Response> strategy)
Set the strategy used to locate the `Response` to operate on.

Parameters:
  `strategy` - lookup strategy

### doPreExecute

protected boolean doPreExecute(@Nonnull ProfileRequestContext profileRequestContext)
Called prior to execution, actions may override this method to perform pre-processing for a request.

If false is returned, execution will not proceed, and the action should attach an `EventContext` to the context tree to signal how to continue with overall workflow processing.

If returning successfully, the last step should be to return the result of the superclass version of this method.

Overrides:
  `doPreExecute` in class `AbstractProfileAction`
Parameters:
  `profileRequestContext` - the current IdP profile request context
Returns:
  true iff execution should proceed

### doExecute

protected void doExecute(@Nonnull ProfileRequestContext profileRequestContext)
Performs this action. Actions must override this method to perform their work.

Overrides:
  `doExecute` in class `AbstractProfileAction`
Parameters:
  `profileRequestContext` - the current IdP profile request context

### getAssertionSubject

@Nonnull private Subject getAssertionSubject(@Nonnull Assertion assertion)
Get the subject to which the name identifier will be added.

Parameters:
  `assertion` - the assertion being modified
Returns:
  the assertion to which the name identifier will be added

### cloneNameID

@Nonnull private NameID cloneNameID()
Create an efficient field-wise copy of a `NameID`.

Returns:
  the copy