001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.data.oauth; 003 004import java.io.IOException; 005import java.io.InputStream; 006import java.net.URL; 007import java.util.Map; 008 009import org.openstreetmap.josm.tools.HttpClient; 010 011import oauth.signpost.AbstractOAuthConsumer; 012import oauth.signpost.AbstractOAuthProvider; 013 014/** 015 * Adapters to make {@code oauth.signpost} work with {@link HttpClient}. 016 */ 017public final class SignpostAdapters { 018 019 private SignpostAdapters() { 020 // Hide constructor for utility classes 021 } 022 023 /** 024 * OAuth provider. 025 */ 026 public static class OAuthProvider extends AbstractOAuthProvider { 027 028 /** 029 * Constructs a new {@code OAuthProvider}. 030 * @param requestTokenEndpointUrl request token endpoint URL 031 * @param accessTokenEndpointUrl access token endpoint URL 032 * @param authorizationWebsiteUrl authorization website URL 033 */ 034 public OAuthProvider(String requestTokenEndpointUrl, String accessTokenEndpointUrl, String authorizationWebsiteUrl) { 035 super(requestTokenEndpointUrl, accessTokenEndpointUrl, authorizationWebsiteUrl); 036 } 037 038 @Override 039 protected HttpRequest createRequest(String endpointUrl) throws Exception { 040 return new HttpRequest(HttpClient.create(new URL(endpointUrl), "GET")); 041 } 042 043 @Override 044 protected HttpResponse sendRequest(oauth.signpost.http.HttpRequest request) throws Exception { 045 return new HttpResponse(((HttpRequest) request).request.connect()); 046 } 047 048 @Override 049 protected void closeConnection(oauth.signpost.http.HttpRequest request, oauth.signpost.http.HttpResponse response) throws Exception { 050 if (response != null) { 051 ((HttpResponse) response).response.disconnect(); 052 } else if (request != null) { 053 ((HttpRequest) request).request.disconnect(); 054 } 055 } 056 } 057 058 /** 059 * OAuth consumer. 060 */ 061 public static class OAuthConsumer extends AbstractOAuthConsumer { 062 063 /** 064 * Constructs a new {@code OAuthConsumer}. 065 * @param consumerKey consumer key 066 * @param consumerSecret consumer secret 067 */ 068 public OAuthConsumer(String consumerKey, String consumerSecret) { 069 super(consumerKey, consumerSecret); 070 } 071 072 @Override 073 protected HttpRequest wrap(Object request) { 074 return new HttpRequest((HttpClient) request); 075 } 076 } 077 078 static final class HttpRequest implements oauth.signpost.http.HttpRequest { 079 final HttpClient request; 080 081 HttpRequest(HttpClient request) { 082 this.request = request; 083 } 084 085 @Override 086 public void setHeader(String name, String value) { 087 request.setHeader(name, value); 088 } 089 090 @Override 091 public String getMethod() { 092 return request.getRequestMethod(); 093 } 094 095 @Override 096 public String getRequestUrl() { 097 return request.getURL().toExternalForm(); 098 } 099 100 @Override 101 public String getContentType() { 102 return request.getRequestHeader("Content-Type"); 103 } 104 105 @Override 106 public String getHeader(String name) { 107 return request.getRequestHeader(name); 108 } 109 110 @Override 111 public InputStream getMessagePayload() { 112 return null; 113 } 114 115 @Override 116 public void setRequestUrl(String url) { 117 throw new IllegalStateException(); 118 } 119 120 @Override 121 public Map<String, String> getAllHeaders() { 122 throw new IllegalStateException(); 123 } 124 125 @Override 126 public Object unwrap() { 127 throw new IllegalStateException(); 128 } 129 } 130 131 static final class HttpResponse implements oauth.signpost.http.HttpResponse { 132 final HttpClient.Response response; 133 134 HttpResponse(HttpClient.Response response) { 135 this.response = response; 136 } 137 138 @Override 139 public int getStatusCode() { 140 return response.getResponseCode(); 141 } 142 143 @Override 144 public String getReasonPhrase() { 145 return response.getResponseMessage(); 146 } 147 148 @Override 149 public InputStream getContent() throws IOException { 150 return response.getContent(); 151 } 152 153 @Override 154 public Object unwrap() { 155 throw new IllegalStateException(); 156 } 157 } 158}