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