Resolve username operation
The resolve username operation enables the connector to resolve an object to its UID, based on its username. This operation is similar to the simple authentication operation. However, the resolve username operation does not include a password parameter, and does not attempt to authenticate the credentials. Instead, it returns the UID that corresponds to the supplied username.
The implementation must, however, validate the username (that is, the connector must throw an exception if the username does not correspond to an existing object). If the username validation fails, the the connector should throw a runtime exception, either an IllegalArgumentException
or, if a native exception is available and is of type RuntimeException
, simply throw that exception. If the native exception is not a RuntimeException
, it should be wrapped in a RuntimeException
, and then thrown.
The exception should provide as much detail as possible for logging problems and failed attempts. Several exceptions are provided in the exceptions
package, for this purpose. For example, one of the most common exceptions is the UnknownUidException
.
Use the ICF resolve username operation
The operation throws a RuntimeException
if the username validation fails, otherwise returns the UID
.
@Test
public void resolveUsernameTest() {
logger.info("Running ResolveUsername Test");
final ConnectorFacade facade = createConnectorFacade(BasicConnector.class, null);
final OperationOptionsBuilder builder = new OperationOptionsBuilder();
Uid uid = facade.resolveUsername(ObjectClass.ACCOUNT, "username", builder.build());
Assert.assertEquals(uid.getUidValue(), "username");
}
Implement the resolve username operation
The SPI provides the following detailed exceptions:
-
UnknownUidException - the UID does not exist on the resource
public Uid resolveUsername(final ObjectClass objectClass, final String userName,
final OperationOptions options) {
if (ObjectClass.ACCOUNT.equals(objectClass)) {
return new Uid(userName);
} else {
logger.warn("ResolveUsername of type {0} is not supported", configuration
.getConnectorMessages().format(objectClass.getDisplayNameKey(),
objectClass.getObjectClassValue()));
throw new UnsupportedOperationException("ResolveUsername of type"
+ objectClass.getObjectClassValue() + " is not supported");
}
}