/* * © Copyright IBM Corp. 2012 * * Licensed 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 com.ibm.sbt.security.authentication.oauth.consumer.store; import java.util.HashMap; import java.util.Map; import com.ibm.commons.util.StringUtil; import com.ibm.sbt.security.authentication.oauth.OAuthException; import com.ibm.sbt.security.authentication.oauth.consumer.AccessToken; import com.ibm.sbt.security.authentication.oauth.consumer.ConsumerToken; /** * Memory based OAuth user token store. * @author Philippe Riand */ public class MemoryTokenStore implements TokenStore { private Map<String,ConsumerToken> appTokens = new HashMap<String, ConsumerToken>(); private Map<String,AccessToken> userTokens = new HashMap<String, AccessToken>(); public MemoryTokenStore() { } // // App tokens // @Override public ConsumerToken loadConsumerToken(String application, String provider) throws OAuthException { String key = getAppKey(application, provider); ConsumerToken tk = appTokens.get(key); if(tk==null) { tk = createDefaultConsumerToken(application, provider); } return tk; } @Override public void saveConsumerToken(String application, String provider, ConsumerToken token) throws OAuthException { String key = getAppKey(application, provider); appTokens.put(key,token); } protected String getAppKey(String application, String provider) { StringBuilder sb = new StringBuilder( 200 ); sb.append( application ).append( '|' ).append( provider ); return sb.toString(); } protected ConsumerToken createDefaultConsumerToken(String application, String provider) throws OAuthException { return null; } // // User tokens // @Override public AccessToken loadAccessToken(String appId, String serviceName, String consumerKey, String userId) throws OAuthException { return loadAccessToken(appId, serviceName, consumerKey, null, null, userId); } @Override public AccessToken loadAccessToken(String appId, String serviceName, String consumerKey, String moduleId, String tokenName, String userId) throws OAuthException { String key = getUserKey( appId, serviceName, consumerKey, moduleId, tokenName, userId ); AccessToken tk = userTokens.get(key); if(tk==null) { tk = createDefaultAccessToken(appId, serviceName, consumerKey, moduleId, tokenName, userId); } return tk; } protected AccessToken createDefaultAccessToken(String appId, String serviceName, String consumerKey, String moduleId, String tokenName, String userId) throws OAuthException { return null; } @Override public void saveAccessToken(AccessToken token) throws OAuthException { String key = getUserKey(token.getAppId(), token.getServiceName(), token.getConsumerKey(), token.getModuleId(), token.getTokenName(), token.getUserId()); userTokens.put(key,token); } @Override public void deleteAccessToken(String appId, String serviceName, String consumerKey, String userId) throws OAuthException { deleteAccessToken(appId, serviceName, consumerKey, null, null, userId); } @Override public void deleteAccessToken(String appId, String serviceName, String consumerKey, String moduleId, String tokenName, String userId ) throws OAuthException { String key = getUserKey( appId, serviceName, consumerKey, moduleId, tokenName, userId ); userTokens.remove(key); } protected String getUserKey(String appId, String serviceName, String consumerKey, String moduleId, String tokenName, String userId ) { StringBuilder sb = new StringBuilder( 200 ); sb.append( appId ).append( '|' ). append( serviceName ).append( '|' ). append( consumerKey ).append( '|' ). append( userId ).append( '|'). append( StringUtil.getNonNullString(moduleId) ).append( '|' ). append( StringUtil.getNonNullString(tokenName) ); return sb.toString(); } }