/* * Copyright 2013 Eric F. Savage, code@efsavage.com * * 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.ajah.oauth.service; import java.util.Date; import lombok.extern.slf4j.Slf4j; import org.scribe.builder.ServiceBuilder; import org.scribe.builder.api.TwitterApi; import org.scribe.model.Token; import org.scribe.model.Verifier; import org.scribe.oauth.OAuthService; import org.springframework.stereotype.Service; import com.ajah.oauth.OAuthAccessToken; import com.ajah.oauth.OAuthProvider; import com.ajah.oauth.OAuthToken; import com.ajah.util.StringUtils; import com.ajah.util.config.Config; /** * Operations for the {@link TwitterApi} service. * * @author <a href="http://efsavage.com">Eric F. Savage</a>, <a * href="mailto:code@efsavage.com">code@efsavage.com</a>. */ @Service @Slf4j public class TwitterOAuthService implements AjahOAuthService { /** * Generates a new {@link OAuthToken}. Note that this token is not saved. * * @return A token for the Twitter service. */ public static OAuthToken getToken() { return getToken(Config.i.get("oauth.twitter.callback")); } /** * Generates a new {@link OAuthToken}. Note that this token is not saved. * * @param callback * The callback for the service. * * @return A token for the Twitter service. */ public static OAuthToken getToken(final String callback) { final ServiceBuilder serviceBuilder = new ServiceBuilder().provider(TwitterApi.class).apiKey(Config.i.get("oauth.twitter.key")).apiSecret(Config.i.get("oauth.twitter.secret")); if (!StringUtils.isBlank(callback)) { serviceBuilder.callback(callback); } final OAuthService service = serviceBuilder.build(); final Token requestToken = service.getRequestToken(); final OAuthToken token = new OAuthToken(); token.setProvider(OAuthProvider.TWITTER); token.setToken(requestToken.getToken()); token.setSecret(requestToken.getSecret()); token.setAuthUrl(service.getAuthorizationUrl(requestToken)); token.setCreated(new Date()); return token; } /** * Generates a new {@link OAuthAccessToken}. Note that this token is not * saved. * * @param token * The token to verify. * @param oauthVerifier * The verification code. * @return The {@link OAuthAccessToken} to be used to sign future requests. */ @Override public OAuthAccessToken verify(final OAuthToken token, final String oauthVerifier) { final OAuthService service = new ServiceBuilder().provider(TwitterApi.class).apiKey(Config.i.get("oauth.twitter.key")).apiSecret(Config.i.get("oauth.twitter.secret")) .callback(Config.i.get("oauth.twitter.callback")).build(); final Token requestToken = new Token(token.getToken(), Config.i.get("oauth.twitter.secret")); final Verifier verifier = new Verifier(oauthVerifier); final Token remoteAccessToken = service.getAccessToken(requestToken, verifier); log.info("Access Token: " + remoteAccessToken.getToken()); log.info("Access Token Secret: " + remoteAccessToken.getSecret()); final OAuthAccessToken accessToken = new OAuthAccessToken(); accessToken.setToken(remoteAccessToken.getToken()); accessToken.setSecret(remoteAccessToken.getSecret()); accessToken.setUserId(token.getUserId()); accessToken.setProvider(OAuthProvider.TWITTER); return accessToken; } }