Search in sources :

Example 11 with Token

use of org.forgerock.openam.cts.api.tokens.Token in project OpenAM by OpenRock.

the class CoreTokenAdapter method read.

/**
     * Read the Token based on its Token ID.
     *
     * @param tokenId The non null Token ID to read from the Token store.
     * @return Null if the Token could not be found, otherwise a non null Token.
     * @throws CoreTokenException If there was an unexpected problem with the request.
     */
public Token read(String tokenId) throws CoreTokenException {
    debug("Read: queued {0}", tokenId);
    ResultHandler<Token, CoreTokenException> handler = handlerFactory.getReadHandler();
    dispatcher.read(tokenId, handler);
    try {
        Token token = handler.getResults();
        if (token == null) {
            debug("Read: no Token found for {0}", tokenId);
        } else {
            reverseBlobStrategy(token);
            debug("Read: returned for {0}\n{1}", tokenId, token);
        }
        return token;
    } catch (CoreTokenException e) {
        throw new ReadFailedException(tokenId, e);
    }
}
Also used : Token(org.forgerock.openam.cts.api.tokens.Token) PartialToken(org.forgerock.openam.sm.datalayer.api.query.PartialToken)

Example 12 with Token

use of org.forgerock.openam.cts.api.tokens.Token in project OpenAM by OpenRock.

the class SAML2CTSPersistentStore method retrieveSAML2TokensWithSecondaryKey.

/**
     *{@inheritDoc}
     */
@Override
public List<Object> retrieveSAML2TokensWithSecondaryKey(String secondaryKey) throws SAML2TokenRepositoryException {
    secondaryKey = tokenIdFactory.toSAMLSecondaryTokenId(secondaryKey);
    try {
        TokenFilter filter = new TokenFilterBuilder().withAttribute(SAMLTokenField.SECONDARY_KEY.getField(), secondaryKey).build();
        Collection<Token> tokens = persistentStore.query(filter);
        List<Object> results = new ArrayList<Object>(tokens.size());
        for (Token token : tokens) {
            SAMLToken samlToken = tokenAdapter.fromToken(token);
            results.add(samlToken.getToken());
        }
        return results;
    } catch (CoreTokenException e) {
        debug.error("SAML2CTSPersistentStore.retrieveSAML2TokensWithSecondaryKey(): failed to retrieve SAML2 " + "tokens using secondary key:" + secondaryKey, e);
        throw new SAML2TokenRepositoryException(e.getMessage(), e);
    }
}
Also used : ArrayList(java.util.ArrayList) CoreTokenException(org.forgerock.openam.cts.exceptions.CoreTokenException) TokenFilterBuilder(org.forgerock.openam.cts.api.filter.TokenFilterBuilder) SAMLToken(org.forgerock.openam.cts.api.tokens.SAMLToken) Token(org.forgerock.openam.cts.api.tokens.Token) SAML2TokenRepositoryException(org.forgerock.openam.federation.saml2.SAML2TokenRepositoryException) SAMLToken(org.forgerock.openam.cts.api.tokens.SAMLToken) TokenFilter(org.forgerock.openam.cts.api.filter.TokenFilter)

Example 13 with Token

use of org.forgerock.openam.cts.api.tokens.Token in project OpenAM by OpenRock.

the class SAMLAdapter method toToken.

/**
     * Convert the SAMLToken to a Token.
     *
     *
     * This conversion performs the additional mapping needed when dealing with SAMLTokens.
     *
     * @param samlToken Non null.
     * @return Non null Token.
     */
public Token toToken(SAMLToken samlToken) {
    String tokenId = tokenIdFactory.toSAMLPrimaryTokenId(samlToken.getPrimaryKey());
    Token token = new Token(tokenId, TokenType.SAML2);
    // Expiry Date
    Calendar timestamp = TimeUtils.fromUnixTime(samlToken.getExpiryTime());
    token.setExpiryTimestamp(timestamp);
    // Persist the SAML token class, because there is no obvious hierarchy to the SAML tokens.
    String className = samlToken.getToken().getClass().getName();
    token.setAttribute(SAMLTokenField.OBJECT_CLASS.getField(), className);
    // Persist the SAML secondary key because it can be queried over.
    String secondaryKey = samlToken.getSecondaryKey();
    if (secondaryKey != null) {
        secondaryKey = tokenIdFactory.toSAMLSecondaryTokenId(secondaryKey);
        token.setAttribute(SAMLTokenField.SECONDARY_KEY.getField(), secondaryKey);
    }
    // Binary data
    String jsonBlob = serialisation.serialise(samlToken.getToken());
    blobUtils.setBlobFromString(token, jsonBlob);
    return token;
}
Also used : Calendar(java.util.Calendar) Token(org.forgerock.openam.cts.api.tokens.Token) SAMLToken(org.forgerock.openam.cts.api.tokens.SAMLToken)

Example 14 with Token

use of org.forgerock.openam.cts.api.tokens.Token in project OpenAM by OpenRock.

the class SessionAdapter method toToken.

/**
     * Convert from InternalSession to a Token.
     *
     * The InternalSession SessionID instance provides the primary key for the Token.
     *
     * Expiry time is a combination of the InternalSession expiration time and a grace
     * period.
     *
     * @param session Non null.
     * @return Non null populated Token.
     */
public Token toToken(InternalSession session) {
    String tokenId = tokenIdFactory.toSessionTokenId(session);
    Token token = new Token(tokenId, TokenType.SESSION);
    // User Id
    String userId = config.getUserId(session);
    token.setUserId(userId);
    // Expiry Date
    long unixTimeMillis = session.getExpirationTime(TimeUnit.MILLISECONDS) + config.getSessionExpiryGracePeriod(TimeUnit.MILLISECONDS);
    Calendar expiryTimeStamp = TimeUtils.fromUnixTime(unixTimeMillis, TimeUnit.MILLISECONDS);
    token.setExpiryTimestamp(expiryTimeStamp);
    // SessionID
    token.setAttribute(SessionTokenField.SESSION_ID.getField(), session.getID().toString());
    // Binary data
    String jsonBlob = serialisation.serialise(session);
    blobUtils.setBlobFromString(token, jsonBlob);
    String latestAccessTime = filterLatestAccessTime(token);
    if (latestAccessTime != null) {
        token.setAttribute(SessionTokenField.LATEST_ACCESS_TIME.getField(), latestAccessTime);
    }
    // Session handle
    token.setAttribute(SessionTokenField.SESSION_HANDLE.getField(), session.getSessionHandle());
    return token;
}
Also used : Calendar(java.util.Calendar) Token(org.forgerock.openam.cts.api.tokens.Token)

Example 15 with Token

use of org.forgerock.openam.cts.api.tokens.Token in project OpenAM by OpenRock.

the class SAMLAdapterTest method shouldSerialiseAndDeserialiseToken.

@Test
public void shouldSerialiseAndDeserialiseToken() {
    // Given
    // Need real delegates for this test.
    serialisation = new JSONSerialisation(new ObjectMapper());
    adapter = new SAMLAdapter(new TokenIdFactory(encoding), new JSONSerialisation(new ObjectMapper()), new TokenBlobUtils());
    String tokenId = encoding.encodeKey("badger");
    Token token = new Token(tokenId, TokenType.SAML2);
    // SAML tokens only store time to seconds resolution
    Calendar now = Calendar.getInstance();
    now.set(Calendar.MILLISECOND, 0);
    token.setExpiryTimestamp(now);
    // SAML implementation detail around stored object
    String blob = "woodland forrest";
    token.setBlob(serialisation.serialise(blob).getBytes());
    token.setAttribute(SAMLTokenField.OBJECT_CLASS.getField(), String.class.getName());
    // SAML detail for secondary key
    String secondaryKey = encoding.encodeKey("weasel");
    token.setAttribute(SAMLTokenField.SECONDARY_KEY.getField(), secondaryKey);
    // When
    Token result = adapter.toToken(adapter.fromToken(token));
    // Then
    TokenTestUtils.assertTokenEquals(result, token);
}
Also used : JSONSerialisation(org.forgerock.openam.cts.utils.JSONSerialisation) Calendar(java.util.Calendar) TokenIdFactory(org.forgerock.openam.cts.api.tokens.TokenIdFactory) SAMLToken(org.forgerock.openam.cts.api.tokens.SAMLToken) Token(org.forgerock.openam.cts.api.tokens.Token) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) TokenBlobUtils(org.forgerock.openam.cts.utils.blob.TokenBlobUtils) Test(org.testng.annotations.Test)

Aggregations

Token (org.forgerock.openam.cts.api.tokens.Token)86 Test (org.testng.annotations.Test)58 Task (org.forgerock.openam.sm.datalayer.api.Task)17 ResultHandler (org.forgerock.openam.sm.datalayer.api.ResultHandler)16 PartialToken (org.forgerock.openam.sm.datalayer.api.query.PartialToken)16 InvocationOnMock (org.mockito.invocation.InvocationOnMock)14 CoreTokenException (org.forgerock.openam.cts.exceptions.CoreTokenException)13 InternalSession (com.iplanet.dpro.session.service.InternalSession)8 DataLayerException (org.forgerock.openam.sm.datalayer.api.DataLayerException)8 Calendar (java.util.Calendar)7 JsonValue (org.forgerock.json.JsonValue)7 SessionID (com.iplanet.dpro.session.SessionID)6 TokenFilter (org.forgerock.openam.cts.api.filter.TokenFilter)6 Collection (java.util.Collection)5 HashMap (java.util.HashMap)5 Entry (org.forgerock.opendj.ldap.Entry)5 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)4 SAMLToken (org.forgerock.openam.cts.api.tokens.SAMLToken)4 Connection (org.forgerock.opendj.ldap.Connection)4 LinkedHashMapEntry (org.forgerock.opendj.ldap.LinkedHashMapEntry)4