package com.github.scribejava.core.extractors; import com.github.scribejava.core.exceptions.OAuthParametersMissingException; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.ParameterList; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; /** * Default implementation of {@link BaseStringExtractor}. Conforms to OAuth 1.0a */ public class BaseStringExtractorImpl implements BaseStringExtractor { protected static final String AMPERSAND_SEPARATED_STRING = "%s&%s&%s"; /** * {@inheritDoc} */ @Override public String extract(OAuthRequest request) { checkPreconditions(request); final String verb = OAuthEncoder.encode(getVerb(request)); final String url = OAuthEncoder.encode(getUrl(request)); final String params = getSortedAndEncodedParams(request); return String.format(AMPERSAND_SEPARATED_STRING, verb, url, params); } protected String getVerb(OAuthRequest request) { return request.getVerb().name(); } protected String getUrl(OAuthRequest request) { return request.getSanitizedUrl(); } protected String getSortedAndEncodedParams(OAuthRequest request) { final ParameterList params = new ParameterList(); params.addAll(request.getQueryStringParams()); params.addAll(request.getBodyParams()); params.addAll(new ParameterList(request.getOauthParameters())); return params.sort().asOauthBaseString(); } protected void checkPreconditions(OAuthRequest request) { Preconditions.checkNotNull(request, "Cannot extract base string from a null object"); if (request.getOauthParameters() == null || request.getOauthParameters().size() <= 0) { throw new OAuthParametersMissingException(request); } } }