/* * Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except * in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.wso2.carbon.identity.provider.openid.cache; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.core.model.OpenIDRememberMeDO; import org.wso2.carbon.identity.core.util.IdentityTenantUtil; import org.wso2.carbon.identity.provider.IdentityProviderException; import java.sql.Timestamp; import java.util.Date; /** * The Cache implementation for OpenID RememberMe tokens * * @author WSO2 Inc */ public class OpenIDRememberMeTokenCache extends OpenIDBaseCache<OpenIDIdentityCacheKey, OpenIDIdentityCacheEntry> { private static final String OPENID_REMEMBER_ME_CACHE = "OPENID_REMEMBER_ME_CACHE"; private static OpenIDRememberMeTokenCache rememberMeCache = null; private static final Log log = LogFactory.getLog(OpenIDRememberMeTokenCache.class); /** * Private constructor * * @param cacheName */ protected OpenIDRememberMeTokenCache() { super(OPENID_REMEMBER_ME_CACHE); } /** * Returns the singleton of the <code>OpenIDRememberMeTokenCache</code> * * @return */ public static synchronized OpenIDRememberMeTokenCache getCacheInstance() { if (rememberMeCache == null) { rememberMeCache = new OpenIDRememberMeTokenCache(); } return rememberMeCache; } /** * Updates the OpenID RememberMe token in cache * * @param rememberMe * @throws IdentityProviderException */ public synchronized void updateTokenData(OpenIDRememberMeDO rememberMe) throws IdentityProviderException { String username = rememberMe.getUserName(); int tenantId = IdentityTenantUtil.getTenantIdOfUser(rememberMe.getUserName()); if (log.isDebugEnabled()) { log.debug("Updating RememberMe token in cache for " + username + " with tenant ID " + tenantId); } OpenIDIdentityCacheKey key = new OpenIDIdentityCacheKey(tenantId, username); // if the entry exist, remove it if (rememberMeCache.getValueFromCache(key) != null) { rememberMeCache.clearCacheEntry(key); } // now create a new entry Date date = null; if (rememberMe.getTimestamp() != null) { date = new Date(rememberMe.getTimestamp().getTime()); } else { date = new Date(); } OpenIDIdentityCacheEntry entry = new OpenIDIdentityCacheEntry(rememberMe.getToken(), null, date); // add the entry rememberMeCache.addToCache(key, entry); } /** * Returns the RememberMe token from cache * * @param rememberMe * @return <code>OpenIDRememberMeDO</code> * @throws IdentityProviderException */ public synchronized OpenIDRememberMeDO getTokenData(OpenIDRememberMeDO rememberMe) throws IdentityProviderException { String username = rememberMe.getUserName(); int tenantId = IdentityTenantUtil.getTenantIdOfUser(rememberMe.getUserName()); if (log.isDebugEnabled()) { log.debug("Loading RememberMe token in cache for " + username + " with tenant ID " + tenantId); } OpenIDIdentityCacheKey key = new OpenIDIdentityCacheKey(tenantId, username); OpenIDIdentityCacheEntry entry = rememberMeCache.getValueFromCache(key); if (entry == null) { return null; } rememberMe.setToken(entry.getCacheEntry()); Timestamp timestamp = new Timestamp(entry.getDate().getTime()); rememberMe.setTimestamp(timestamp); return rememberMe; } }