// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.data.oauth; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Map; import org.openstreetmap.josm.tools.HttpClient; import oauth.signpost.AbstractOAuthConsumer; import oauth.signpost.AbstractOAuthProvider; /** * Adapters to make {@code oauth.signpost} work with {@link HttpClient}. */ public final class SignpostAdapters { private SignpostAdapters() { } /** * OAuth provider. */ public static class OAuthProvider extends AbstractOAuthProvider { /** * Constructs a new {@code OAuthProvider}. * @param requestTokenEndpointUrl request token endpoint URL * @param accessTokenEndpointUrl access token endpoint URL * @param authorizationWebsiteUrl authorization website URL */ public OAuthProvider(String requestTokenEndpointUrl, String accessTokenEndpointUrl, String authorizationWebsiteUrl) { super(requestTokenEndpointUrl, accessTokenEndpointUrl, authorizationWebsiteUrl); } @Override protected HttpRequest createRequest(String endpointUrl) throws Exception { return new HttpRequest(HttpClient.create(new URL(endpointUrl), "GET")); } @Override protected HttpResponse sendRequest(oauth.signpost.http.HttpRequest request) throws Exception { return new HttpResponse(((HttpRequest) request).request.connect()); } @Override protected void closeConnection(oauth.signpost.http.HttpRequest request, oauth.signpost.http.HttpResponse response) throws Exception { if (response != null) { ((HttpResponse) response).response.disconnect(); } else if (request != null) { ((HttpRequest) request).request.disconnect(); } } } /** * OAuth consumer. */ public static class OAuthConsumer extends AbstractOAuthConsumer { /** * Constructs a new {@code OAuthConsumer}. * @param consumerKey consumer key * @param consumerSecret consumer secret */ public OAuthConsumer(String consumerKey, String consumerSecret) { super(consumerKey, consumerSecret); } @Override protected HttpRequest wrap(Object request) { return new HttpRequest((HttpClient) request); } } static final class HttpRequest implements oauth.signpost.http.HttpRequest { final HttpClient request; HttpRequest(HttpClient request) { this.request = request; } @Override public void setHeader(String name, String value) { request.setHeader(name, value); } @Override public String getMethod() { return request.getRequestMethod(); } @Override public String getRequestUrl() { return request.getURL().toExternalForm(); } @Override public String getContentType() { return request.getRequestHeader("Content-Type"); } @Override public String getHeader(String name) { return request.getRequestHeader(name); } @Override public InputStream getMessagePayload() { return null; } @Override public void setRequestUrl(String url) { throw new IllegalStateException(); } @Override public Map<String, String> getAllHeaders() { throw new IllegalStateException(); } @Override public Object unwrap() { throw new IllegalStateException(); } } static final class HttpResponse implements oauth.signpost.http.HttpResponse { final HttpClient.Response response; HttpResponse(HttpClient.Response response) { this.response = response; } @Override public int getStatusCode() { return response.getResponseCode(); } @Override public String getReasonPhrase() { return response.getResponseMessage(); } @Override public InputStream getContent() throws IOException { return response.getContent(); } @Override public Object unwrap() { throw new IllegalStateException(); } } }