package org.scribe.oauth;
import java.util.HashMap;
import org.scribe.builder.api.*;
import org.scribe.model.*;
/**
* OAuth 1.0a implementation of {@link OAuthService}
*
* @author Pablo Fernandez
*/
public class OAuth10aServiceImpl implements OAuthService
{
private static final String NO_SCOPE = null;
private static final String VERSION = "1.0";
private OAuthConfig config;
private DefaultApi10a api;
private String scope;
/**
* Default constructor
*
* @param api OAuth1.0a api information
* @param config OAuth 1.0a configuration param object
*/
public OAuth10aServiceImpl(DefaultApi10a api, OAuthConfig config)
{
this.api = api;
this.config = config;
this.scope = NO_SCOPE;
}
/**
* {@inheritDoc}
*/
public Token getRequestToken()
{
OAuthRequest request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint());
addOAuthParams(request, OAuthConstants.EMPTY_TOKEN);
//addOAuthHeader(request);
Response response = request.send();
return api.getRequestTokenExtractor().extract(response.getBody());
}
public void addOAuthParams(OAuthRequest request, Token token)
{
request.addBodyParameter(OAuthConstants.TIMESTAMP, api.getTimestampService().getTimestampInSeconds());
request.addBodyParameter(OAuthConstants.NONCE, api.getTimestampService().getNonce());
request.addBodyParameter(OAuthConstants.CONSUMER_KEY, config.getApiKey());
request.addBodyParameter(OAuthConstants.SIGN_METHOD, api.getSignatureService().getSignatureMethod());
request.addBodyParameter(OAuthConstants.VERSION, getVersion());
//request.addOAuthParameter(OAuthConstants.CALLBACK, config.getCallback());
if(scope != NO_SCOPE) request.addBodyParameter(OAuthConstants.SCOPE, scope);
request.addBodyParameter(OAuthConstants.SIGNATURE, getSignature(request, token));
}
/**
* {@inheritDoc}
*/
public HashMap<String,Object> getAccessToken(Token requestToken, Verifier verifier)
{
OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint());
request.addBodyParameter(OAuthConstants.TOKEN, requestToken.getToken());
//request.addOAuthParameter(OAuthConstants.VERIFIER, verifier.getValue());
addOAuthParams(request, requestToken);
//addOAuthHeader(request);
Response response = request.send();
HashMap<String,Object> respParams=new HashMap<String,Object>();
respParams.put("response", response.getBody());
respParams.put("token",api.getAccessTokenExtractor().extract(response.getBody()));
return respParams;
}
/**
* {@inheritDoc}
*/
public void signRequest(Token token, OAuthRequest request)
{
request.addBodyParameter(OAuthConstants.TOKEN, token.getToken());
addOAuthParams(request, token);
//addOAuthHeader(request);
}
/**
* {@inheritDoc}
*/
public String getVersion()
{
return VERSION;
}
/**
* {@inheritDoc}
*/
public void addScope(String scope)
{
this.scope = scope;
}
/**
* {@inheritDoc}
*/
public String getAuthorizationUrl(Token requestToken)
{
return api.getAuthorizationUrl(requestToken);
}
private String getSignature(OAuthRequest request, Token token)
{
String baseString = api.getBaseStringExtractor().extract(request);
return api.getSignatureService().getSignature(baseString, config.getApiSecret(), token.getSecret());
}
private void addOAuthHeader(OAuthRequest request)
{
String oauthHeader = api.getHeaderExtractor().extract(request);
request.addHeader(OAuthConstants.HEADER, oauthHeader);
}
}